Этот вопрос проверяет знание семантики стандартных HTTP-методов, что является основой для создания понятных, предсказуемых и идиоматичных RESTful интерфейсов.
Основные методы HTTP (или "глаголы") определяют тип операции, которую клиент хочет выполнить с ресурсом. GET используется для безопасного получения данных с сервера, не изменяя их. POST служит для создания нового ресурса или отправки данных на обработку. PUT применяется для полного обновления существующего ресурса, а PATCH — для его частичного обновления. DELETE, как следует из названия, удаляет ресурс. Эти методы придают API единообразную и понятную структуру.
REST API строится поверх протокола HTTP, используя его стандартные методы для выполнения операций CRUD (Create, Read, Update, Delete) над ресурсами. Понимание семантики каждого метода критически важно.
Каждый метод имеет определенное назначение и свойства (идемпотентность и безопасность).
Назначение: Получение (чтение) представления ресурса.
Свойства: Безопасный (safe) и Идемпотентный (idempotent).
Безопасный: Вызов метода не должен изменять состояние сервера. Можно вызывать много раз без последствий.
Идемпотентный: Многократный повтор одного и того же запроса дает тот же результат, что и однократный.
Пример: GET /api/users/123 — получить информацию о пользователе с ID 123.
Назначение: Создание нового ресурса или запуск процедуры, которая не подходит под другие методы (например, поиск с сложными критериями).
Свойства: Не безопасный, Не идемпотентный (в общем случае).
Пример: POST /api/users с телом {"name": "Alice"} — создать нового пользователя. Повторный вызов с теми же данными, скорее всего, создаст второго идентичного пользователя.
Назначение: Полное обновление ресурса. Клиент отправляет новое представление ресурса, которое полностью заменяет старое.
Свойства: Не безопасный, Идемпотентный. Многократная отправка одного и того же PUT-запроса должна оставлять ресурс в одном и том же состоянии (последующие вызовы ничего не меняют).
Пример: PUT /api/users/123 с телом {"name": "Bob", "email": "bob@mail.com"} — заменить все данные пользователя 123 на новые.
Назначение: Частичное обновление ресурса. Клиент отправляет только те поля, которые необходимо изменить.
Свойства: Не безопасный, Идемпотентный (должен быть спроектирован как идемпотентный).
Пример: PATCH /api/users/123 с телом {"email": "new@mail.com"} — обновить только email пользователя 123, оставив остальные поля без изменений.
Назначение: Удаление указанного ресурса.
Свойства: Не безопасный, Идемпотентный. Удаление ресурса первый раз возвращает успех (или 404), последующие вызовы должны возвращать тот же результат (ресурс уже удален).
Пример: DELETE /api/users/123 — удалить пользователя с ID 123.
Вывод: Правильное использование HTTP-методов (GET для чтения, POST для создания, PUT/PATCH для обновления, DELETE для удаления) делает API интуитивно понятным и соответствует принципам REST. Свойства идемпотентности и безопасности важны для обеспечения надежности и предсказуемости взаимодействия, особенно в нестабильных сетевых условиях.