REST端点返回多个JSON类型

时间:2014-09-23 07:33:27

标签: rest

我们正在讨论REST基础架构,因为其中一个端点目前可以返回两种不同类型的数据:

如果找不到任何对象,则返回如下内容:

{
   "key1": "value1",
   "key2": "value2"
}

如果可以找到任何数据,则返回如下内容:

{
   "key3": "value3",
   "key4": [   {
      "key5": "value5",
      "output":       [
                  {
            "name": "value6",
            "value": "value7"
         },
                  {
            "name": "value8",
            "value": 0
         }
      ]
   }]
}

我不认为这是非常REST的,但我对REST设计相对较新。

有关如何设计此类回复的指导的好地方是什么?

1 个答案:

答案 0 :(得分:2)

对此有很多意见。我的观点是,如果找不到任何对象,则返回404。如果找到一个或多个对象,则返回200,其中包含对象的主体。

如何在200身体反应中构建这些对象取决于您。我的偏好始终是单个项目的直接JSON对象,或多个数组。

以下是一些例子:

GET /api/users/20000000返回404

GET /api/users/1200

的正文返回{"name":"John Smith","id":"1","email":"john@smith.net"}

GET /api/users返回200,主体为[{"name":"John Smith","id":"1","email":"john@smith.net"},{"name":"Jill Smith","id":"2","email":"jill@smith.net"},{"name":"Someone Else","id":"3","email":"someone@else.com"}]注意数组格式)

GET /api/users/1,2返回200,主体为[{"name":"John Smith","id":"1","email":"john@smith.net"},{"name":"Jill Smith","id":"2","email":"jill@smith.net"}]注意数组格式)

仅供参考,我必须为快速项目实施类似的内容,因此我使用助推器http://github.com/deitch/booster对其进行标准化