Код состояния REST для пакетного запроса с частичным результатом - PullRequest
0 голосов
/ 12 февраля 2019

Я создаю REST API, где клиент может запрашивать данные для определенных идентификаторов.Пример запроса выглядит следующим образом:

/api/data?ids=1&ids=2&ids=3&start=2019-01-01&end=2019-02-12

Это соответствует спецификации Open API для передачи массива: https://swagger.io/docs/specification/describing-parameters/#query-parameters

Предположим теперь, что идентификаторы 2 и 3 существуют и возвращают 1 запись и 0 записейсоответственно.Предположим также, что идентификатор 1. не существует.

Что следует вернуть клиенту?Я склоняюсь к возвращению OK 200 со словарем, в котором идентификатор 3 будет присутствовать в качестве ключа, но не содержать данных, тогда как идентификатор 1 вообще не будет присутствовать.

Примерно так:

{
  {
    id=2,
    records=[154334, 324343]
  },
  {
    id=3,
    records=[]
  }
}

Тогда клиенту придется сделать вывод, что идентификатор 1 недействителен.И когда я пытаюсь выполнить запрос для получения метаданных с идентификатором 1:

/api/entity/1

, я получу 404 Not Found.

В общем, я хотел бы найти хорошие решения для обработкиответы и коды состояния на запросы API REST, где запрос дает частичное совпадение.

1 Ответ

0 голосов
/ 12 февраля 2019

Поскольку существуют другие поля, в которых есть действительные данные, отправка 200 будет правильным ответом.Вывод о том, что данные не существуют, является обязанностью клиента (вызываемого абонента?).

Примечание: запрос отправителя верен.И у вас также есть данные согласно отправленным фильтрам.

Из POV сервера

Это функция типа

GetData(
(name="id")List<int> ids, 
(name="start") DateTime startDate, 
(name="end") DateTime endDate){
           // your logic goes here
}
  • Отправитель отправил запрос какпо контракту.(следовательно, не 400)
  • Вы, как сервер, имеете действительные данные для ответа с помощью установленных фильтров (следовательно, не 404)
  • Предположительно, аутентификация настроена (следовательно, не 401)
  • Вы полностью обрабатываете запрос (следовательно, не 202)
  • Вы ничего не создаете (следовательно, не 201).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...