web-dev-qa-db-ja.com

POSTオブジェクトの配列REST API

私はRESTオブジェクトの配列を受け入れることができるはずのAPIを設計しています、例えば

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

実際、APIは単一のオブジェクトを受け入れるためのメソッドを持つことができ、それはサイクルで呼び出されます。ただし、パフォーマンス上の理由から、POST 1つのリクエストで複数のオブジェクトを使用したいと考えています。

そうするための最もエレガントな方法は何ですか?これまでのところ、私の唯一のアイデアは、次のようなJSONを使用することです。

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

これは大丈夫ですか、それとも完全に異なるアプローチを使用する必要がありますか?

12
Tregoreg

基本的に、私が探していた答えは:

  1. Webの標準である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
      },
      ...
    ]
    
7
Tregoreg

dataプロパティを使用して、配列を別のオブジェクトにラップする必要はありません。配列自体は有効なJSONです。

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

APIがこの配列も想定していることを確認してください。

10
Adam Liechty