Можно ли сделать одно и то же поле обязательным для POST и необязательным для запросов PUT? - PullRequest
0 голосов
/ 04 июля 2019

Можно ли сделать одно и то же поле обязательным для POST и необязательным для запросов PUT для REST API? Или это зависит от технологии, используемой для реализации этого запроса?

Например, есть запрос POST для создания Car объектов, и у этого объекта есть поле model_id, которое фактически выбрано из словаря моделей. И запрос POST требует model_id, потому что для автомобиля должен быть определен model_id.

И я хочу иметь метод PUT, который меняет некоторые поля, например serial_num, manufacture_date, color и т. Д. Даже model_id. Но я хочу, чтобы этот метод PUT изменил model_id как необязательный параметр, например, Я просто хочу изменить цвет, и это нормально.

Так возможно ли это в REST? Разве некоторые технологии, которые реализуют этот запрос, не могут позволить мне сделать другой набор необязательных / обязательных параметров для POST ant PUT?

1 Ответ

1 голос
/ 04 июля 2019

Ну, вы можете делать все, что вы хотите здесь. Никто не убьет вас, если вы проверите поля в теле запроса и вернете ошибку, если указано model_id (или нет).

Некоторые ребята используют метод POST для обновления сущностей в API.

Если вы хотите быть ближе к стандартам, лучше используйте PATCH для частичных обновлений.

Вы можете найти много интересной информации здесь:

  1. https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
  2. REST API - PUT против PATCH с примерами из реальной жизни
  3. https://tools.ietf.org/html/rfc7231#section-4.3.4
  4. https://tools.ietf.org/html/rfc5789

Одна важная вещь из 4. source:

Метод PUT уже определен для перезаписи ресурса с завершить новое тело, и его нельзя использовать повторно для частичных изменений.

И еще одно предложение из 3. source:

Вообще говоря, все детали реализации за интерфейсом ресурса преднамеренно скрыты сервером.

...