在我的系统中,我有多个服务为其资源公开 REST api。系统上的特定服务需要在特定情况下以空运行模式对其他服务进行休息调用,以进行验证。即使请求的主体具有对 api 有意义的有效负载,也不会保留任何内容,不会更改任何状态,也不会发送任何消息。棘手的部分是,如果此服务调用未实现试运行模式的 REST api,它将修改资源,而不仅仅是验证。仅当接收服务在其 api 中实现空运行时,我才需要一种方法来发出空运行请求,否则请求必须失败。
到目前为止,我有这些想法:
传递查询参数
我可以传递一个标志作为查询参数,但如果 api 不知道该参数,请求仍然会通过。
POST /resource?dry-run=true
Run Code Online (Sandbox Code Playgroud)
在标题中传递标志
与查询参数类似,未知头字段将被忽略。
公开试运行 api 仅用于验证
此解决方案有效,因为我可以验证 URL 的试运行版本是否存在,但我不想公开更多端点仅用于验证
POST /resource
POST /resource/dry-run
PUT /resource/{id}
PUT /resource/{id}/dry-run
Run Code Online (Sandbox Code Playgroud)
将标志注入资源体
这看起来是一个解决方案,但是当 api 不支持此字段时,JSON 序列化将失败。那种情况下,我不知道是因为api不支持dry-run还是body确实有问题。此外,感觉不对,因为试运行不是资源的一部分。
POST /resource
{
"dry-run":true,
...
...
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来实现 REST api 的试运行功能,如果服务没有实现它,请求将失败?