19

我正在设计应该能够接受对象数组的 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

2 回答 2

22

无需将数组包装在具有data属性的另一个对象中。数组本身就是有效的 JSON:

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

只要确保你的 API 也需要这个数组。

于 2013-07-27T16:05:07.177 回答
10

基本上,我正在寻找的答案是:

  1. 无需使用Content-Type: application/x-www-form-urlencodedweb 中的标准;相反,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
      },
      ...
    ]
    
于 2014-07-07T11:05:35.170 回答