Подтвердить что ты не робот

POST массив объектов для REST API

Я проектирую REST API, который должен иметь возможность принимать массив объектов, например

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

В самом деле, API может иметь метод для принятия одного объекта, который будет вызываться в цикле. Однако по соображениям производительности я хочу POST несколько объектов в одном запросе.

Каков самый элегантный способ сделать это? Пока что моя единственная идея - использовать JSON, например:

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

Это нормально, или я должен использовать совершенно другой подход?

4b9b3361

Ответ 1

В принципе, ответ, который я искал, был:

  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
      },
      ...
    ]
    

Ответ 2

Нет необходимости обертывать массив в другом объекте с помощью свойства data. Массив сам по себе действителен JSON:

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

Просто убедитесь, что ваш API также ожидает этот массив.