为同一请求返回不同结构的最简洁方法

时间:2016-08-19 14:36:43

标签: json rest api-design

我想实现一个接收对象的rest服务,如果该对象有资格使用某些参数进行处理,则返回该服务。问题是取决于对象是否符合条件,响应的结构是非常不同的。作为应该处理对象的示例,它与处理类型和优先级相关联。如果不符合条件,则返回原因。哪种最简洁的方法可以为同一个请求返回不同的结构。我可以想到三种选择,但可以随意添加其他选项。

选项A:
将数据作为包含结构

字段的信封返回
{
    "eligible": bool,
    "data": {
        // Data depending on whether elbile or not
    }
}

选项B:
相应地使用不同的HTTP状态代码和结构json。这在某种程度上是不洁净的,因为它在请求中并非真正的错误,而是有效的响应。

选项C:
在符合条件或不符合条件的情况下,使用不同的字段进行数据发送,并让一个字段为空。

{
    "eligible": bool,
    "dataEligible": {
        "processingType": "",
        "priority": 0
    }
    "dataNonEligible": {
        "reason": "",
    }
}

1 个答案:

答案 0 :(得分:1)

我认为这对422 Status Code来说是个很好的用例。它还不是官方的ISO,但很多公司(即Twitter)正在使用它。

基本上它就是你发生的事情 - 无法处理资源,服务器理解请求并且语法正确。

选项C看起来也合理,因此请使用最适合您需求的选项。我不推荐A,因为同一请求的不同格式对于使用静态类型语言(即Java)的消费者来说是个大问题