2014-09-23 93 views
2

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

如果它不能找到任何对象,它返回是这样的:

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

如果能找到任何数据,它返回是这样的:

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

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

什么是指导如何设计此类响应的好地方?

+0

我认为[这] (http://stackoverflow.com/questions/18781775/how-to-send-the-json-data-in-rest-web-services)将帮助你。 – cbandroid 2014-09-23 07:43:21

回答

2

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

您如何在200机构响应中构造这些对象取决于您。我的首选项一直是单个项目的直JSON对象,或者多个的数组。

下面是一些例子:

GET /api/users/20000000返回404

GET /api/users/1返回200{"name":"John Smith","id":"1","email":"[email protected]"}

GET /api/users返回200[{"name":"John Smith","id":"1","email":"[email protected]"},{"name":"Jill Smith","id":"2","email":"[email protected]"},{"name":"Someone Else","id":"3","email":"[email protected]"}]音符阵列格式)的主体上的主体

GET /api/users/1,2回报200[{"name":"John Smith","id":"1","email":"[email protected]"},{"name":"Jill Smith","id":"2","email":"[email protected]"}]阵列格式)

FYI的身体,我必须实现这样的一个明确的项目,所以我加强标准化的IT http://github.com/deitch/booster

+0

我不在JavaScript的东西领域,所以我不能使用助推器。你的回答确实帮助我在这里讨论如何组织事情。非常感激。还有一件事:看下一个评论。 – 2014-10-07 10:38:21

+1

如果用户没有任何属性(是的:在我们的API中返回的对象可以是空的),你会怎么做:只需返回'[{}]'给他们?为什么区分'{...}'和'[{...},{...}]'。为什么不总是像'[{...}]'返回一个数组? – 2014-10-07 10:40:38

+0

那么,我非常高兴它是有帮助的(如果以意想不到的方式)。 :-) – deitch 2014-10-07 11:00:29