2014-09-23 61 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