REST API Framework. Рекомендуемое поведение для недопустимого параметра запроса

Я внедряю REST API Framework, и мне интересно, что такое рекомендуемое поведение, когда клиент отправляет недопустимый параметр запроса.

Я проиллюстрирую, что я имею в виду с конкретным примером: Скажем, у меня есть обработчик API на /api/contacts/endpoint, а обработчик предоставляет фильтр с именем id, который позволяет клиентам выбирать определенные контакты с предоставленными идентификаторами.

Таким образом, запрос GET или DELETE может быть /api/contacts/?id=2&id=4&id=lalalala.

Очевидно, что нет контакта с id=lalalala. В этом случае, что должен вести сервер, как?

  • Игнорировать недействительный контакт с id=lalalala и только фильтровать контакты на действительных идентификаторах 2 и 4.

  • Отвечайте с кодом ошибки, указывающим эту ошибку. Если да, то какой код ошибки должен быть предоставлен?

Спасибо заранее.

Изменить: уточнить; Основное внимание в рамках структуры, которую я разрабатываю, имеет предсказуемое поведение и, следовательно, коды ответов. По этой причине я хочу, чтобы клиенты, потребляющие API, основанные на этой структуре, ожидали наименьших возможных сюрпризов. Итак, в основном вопрос: должен ли API возвратить ошибку в этом случае (и если да, то какой)? Или игнорировать недопустимые записи фильтра и фильтровать только правильные параметры запроса?

Ответы

Ответ 1

Так как это вызов REST, мы говорим о ресурсах. И всякий раз, когда у нас есть неправильный фильтр, мы должны вернуть правильный код ошибки.

В этом случае я бы пошел за 400 - bad request, поскольку ресурс был найден и правильно отображен (/api/contacts), но возникла проблема с частью query string. Поэтому a 400, а не a 404.

Вернул бы 404, если кто-то запросил /api/contacts-all или какой-то несуществующий ресурс.

EDIT, основанный на комментариях ниже

Соглашайтесь на свой комментарий. В идеале a 400 является проблемой с запросом. Поступая таким образом, вы можете использовать 422 Unprocessable Entity. Посмотрите ссылку на stackoverflow ниже, и она говорит о том же.

Я бы предположил, что разработчикам по всему миру было бы более удобно видеть 400 than 422 для таких логических ошибок из-за того, что более крупные компании используют 400, а не 422.

Литература: Коды состояния Http и 400 для логической ошибки и искаженного запроса

Ответ 2

Следуя букве закона, ответ должен быть 404 Не найден. Однако, если вы предпочитаете возвращать 400 - плохой запрос, никто не будет слишком расстроен.

Я обязательно вернул бы код статуса 4XX. Вы хотите, чтобы клиент знал, что они сделали ошибку.