我想实现一个接收对象的rest服务,如果该对象有资格使用某些参数进行处理,则返回该服务。问题是取决于对象是否符合条件,响应的结构是非常不同的。作为应该处理对象的示例,它与处理类型和优先级相关联。如果不符合条件,则返回原因。哪种最简洁的方法可以为同一个请求返回不同的结构。我可以想到三种选择,但可以随意添加其他选项。
选项A:
将数据作为包含结构
{
"eligible": bool,
"data": {
// Data depending on whether elbile or not
}
}
选项B:
相应地使用不同的HTTP状态代码和结构json。这在某种程度上是不洁净的,因为它在请求中并非真正的错误,而是有效的响应。
选项C:
在符合条件或不符合条件的情况下,使用不同的字段进行数据发送,并让一个字段为空。
{
"eligible": bool,
"dataEligible": {
"processingType": "",
"priority": 0
}
"dataNonEligible": {
"reason": "",
}
}
答案 0 :(得分:1)
我认为这对422 Status Code来说是个很好的用例。它还不是官方的ISO,但很多公司(即Twitter)正在使用它。
基本上它就是你发生的事情 - 无法处理资源,服务器理解请求并且语法正确。
选项C看起来也合理,因此请使用最适合您需求的选项。我不推荐A,因为同一请求的不同格式对于使用静态类型语言(即Java)的消费者来说是个大问题