我们正在讨论REST基础架构,因为其中一个端点目前可以返回两种不同类型的数据:
如果找不到任何对象,则返回如下内容:
{
"key1": "value1",
"key2": "value2"
}
如果可以找到任何数据,则返回如下内容:
{
"key3": "value3",
"key4": [ {
"key5": "value5",
"output": [
{
"name": "value6",
"value": "value7"
},
{
"name": "value8",
"value": 0
}
]
}]
}
我不认为这是非常REST的,但我对REST设计相对较新。
有关如何设计此类回复的指导的好地方是什么?
答案 0 :(得分:2)
对此有很多意见。我的观点是,如果找不到任何对象,则返回404
。如果找到一个或多个对象,则返回200
,其中包含对象的主体。
如何在200
身体反应中构建这些对象取决于您。我的偏好始终是单个项目的直接JSON对象,或多个数组。
以下是一些例子:
GET /api/users/20000000
返回404
GET /api/users/1
以200
{"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对其进行标准化