От: | Shmj | ||
Дата: | 19.09.22 05:38 | ||
Оценка: |
Например, если мы создаем REST API для обновления сведений об ученике с помощью PUT (метод HTTP), тогда URI запроса будет {server_host}/students/{student_id}а тело запроса будет таким:
{ "id": student_id, "name": "student name", "school_name": "school name" }
Я много раз видел, как разработчики путаются в том, почему нам нужно отправлять один и тот же параметр в несколько мест. Например, в приведенном выше примере мы отправляем student_id к параметру пути, а также к телу запроса. Может показаться, что мы отправляем повторяющуюся информацию через API, но помните, что параметры тела запроса и пути имеют разные значения и должны использоваться для той цели, которой они будут служить.
Ниже объясняется, почему мы не можем удалить student_id из параметров пути и тела запроса.
Тело запроса используется для отправки и получения данных через REST API. Если мы используем POST/PUT API, то на основе контракта REST API мы должны отправлять всю информацию о ресурсе, потому что эти методы работают со всем ресурсом. В приведенном выше примере student_id также является частью этого ресурса, поэтому он должен присутствовать в теле запроса, иначе тело запроса сможет представлять всю информацию о ресурсе.
После удаления student_id из тела запроса у нас будет следующее тело запроса.
{ "name": "student name", "school_name": "school name" }
Представляет ли это тело запроса всю информацию о ресурсах? Нет. Так что это нарушение контракта REST.
Итак, чтобы представить состояние ресурса, нам нужно отправить student_id в теле запроса, а чтобы однозначно идентифицировать ресурс, нам нужно отправить student_id в параметре пути.