2013-07-27 57 views
9

我設計REST API,應該是能夠接受對象的數組,表示對象的POST數組REST API

[ 
{ 
    'name': 'Alice', 
    'age': 15 
}, 
{ 
    'name': 'Bob', 
    'age': 20 
}, 
... 
] 

事實上,API可以有一個方法接受單個對象,這將是稱爲循環。但是,出於性能原因,我希望在一個請求中發佈多個對象。

這樣做的最優雅的方式是什麼?到目前爲止,我唯一的想法是使用JSON,例如:

post_params = { 'data' : to_json_string([ { 'name' : 'Alice', 'age' : 15 }, 
              { 'name' : 'Bob', 'age' : 20 }, 
              ... 
             ]) 
       }; 
post(url, post_params); 

這是行嗎,還是應該使用一些完全不同的方法?

回答

4

基本上,我一直在尋找的答案是:

  1. 沒有必要使用Content-Type: application/x-www-form-urlencoded這是網絡標準;相反,Content-Type: application/json,應使用
  2. 整個HTTP請求,那麼看起來如下:

    POST /whatever HTTP/1.1 
    Host: api.example.com 
    Content-Type: application/json 
    
    [ 
        { 
        'name': 'Alice', 
        'age': 15 
        }, 
        { 
        'name': 'Bob', 
        'age': 20 
        }, 
        ... 
    ] 
    
+3

你的答案基本上是@ Adam的答案的副本,這是正確的基礎上的問題。您添加到關於內容類型的答案的信息不在您的原始問題中。 –

+0

@inkalimeva問題是整個問題都是不適當的。在提問時,我對REST完全沒有經驗,並不知道我想問什麼。我被困在一個古老的'application/x-www-form-urlencoded'中,我認爲這是提交數據的唯一可能方式,格式爲'key1 = value1&key2 = value2'。如果我知道我只能使用Content-Type:application/json並直接在主體中提交JSON,那麼這個問題就沒有任何意義了吧?如果我的過去自己找到了我目前的答案,那麼這將直接導致他找到解決方案和缺少的知識。 – Tregoreg

7

沒有必要用data屬性將數組包裝在另一個對象中。數組本身是有效的JSON:

post_params = JSON.stringify([ { 'name' : 'Alice', 'age' : 15 }, 
           { 'name' : 'Bob', 'age' : 20 }, 
            ... 
          ]); 
post(url, post_params); 

只要確保您的API也期待這個數組。

+0

所以沒有必要去模仿HTML表單那裏將是一個輸入元素稱爲數據? – Tregoreg