Какие основные HTTP-методы используются в RESTful API?

Ответ

RESTful API опирается на стандартные HTTP-методы для выполнения операций CRUD (Create, Read, Update, Delete) над ресурсами.

Метод Идемпотентность Безопасность Назначение Пример (ресурс /books)
GET Да Да Получение данных ресурса или коллекции. GET /books — список книг. GET /books/5 — книга с id=5.
POST Нет Нет Создание нового ресурса. POST /books — создать новую книгу (тело запроса содержит данные).
PUT Да Нет Полное обновление ресурса. PUT /books/5 — заменить все данные книги id=5.
PATCH Нет Нет Частичное обновление ресурса. PATCH /books/5 — обновить только указанные поля книги id=5.
DELETE Да Нет Удаление ресурса. DELETE /books/5 — удалить книгу id=5.
HEAD Да Да Аналогичен GET, но без тела ответа. Используется для получения метаданных. HEAD /books/5 — проверить существование и заголовки книги id=5.
OPTIONS Да Да Получение информации о поддерживаемых методах для ресурса. OPTIONS /books — узнать, какие методы (GET, POST и т.д.) допустимы.

Ключевые понятия:

  • Идемпотентность: Повторный вызов метода с теми же данными дает идентичный результат (не создает побочных эффектов).
  • Безопасность: Метод не изменяет состояние ресурса на сервере.

Ответ 18+ 🔞

А, слушай, ну вот эта ваша REST-архитектура, блядь. Вроде бы всё просто, как три копейки, а потом смотришь — какой-то чувак POST'ом удаляет, а PUT'ом создаёт, и пиздец наступает, ёпта.

Короче, вся их философия, блядь, строится на обычных-то HTTP-глаголах. Это как набор отвёрток: каждой — своя дырка, сука. Нельзя крестовой плоскую закручивать, получится пиздец и сорванные грани.

Смотри, вот таблица, чтобы не ебать мозг, а сразу всё понятно было:

Метод Идемпотентность Безопасность Назначение Пример (ресурс /books)
GET Да Да Получение данных ресурса или коллекции. GET /books — список книг. GET /books/5 — книга с id=5.
POST Нет Нет Создание нового ресурса. POST /books — создать новую книгу (тело запроса содержит данные).
PUT Да Нет Полное обновление ресурса. PUT /books/5 — заменить все данные книги id=5.
PATCH Нет Нет Частичное обновление ресурса. PATCH /books/5 — обновить только указанные поля книги id=5.
DELETE Да Нет Удаление ресурса. DELETE /books/5 — удалить книгу id=5.
HEAD Да Да Аналогичен GET, но без тела ответа. Используется для получения метаданных. HEAD /books/5 — проверить существование и заголовки книги id=5.
OPTIONS Да Да Получение информации о поддерживаемых методах для ресурса. OPTIONS /books — узнать, какие методы (GET, POST и т.д.) допустимы.

Теперь про эти умные слова, а то без них нихуя не ясно.

Идемпотентность — это, блядь, такая штука, что ты можешь тыкать на кнопку сто раз, а результат будет как от одного тыка. Ну, представь: DELETE /books/5. Ты его удалил — книга испарилась в пизду. Ты второй раз шлёшь DELETE — а её уже нет, но мир не рухнул, состояние системы то же самое. Это и есть идемпотентность, ёпта. PUT — тоже идемпотентен: заменил данные раз, заменил десять раз — в конце концов там будут те же данные, что ты последний раз прислал.

А вот POST — не идемпотентный, хитрая жопа. Каждый раз, как ты его вызовешь, будет создаваться новая сущность. Нажал раз — одна книга, нажал два — две одинаковые книги, нажал сто — у тебя библиотека дохуища одинаковых талмудов. Вот поэтому с ним осторожно надо.

Безопасность — это вообще про то, что метод ресурс не трогает. GET, HEAD, OPTIONS — они только смотрят, щупают, но ничего не ломают и не меняют. Как музейный смотритель, блядь. А POST, PUT, PATCH, DELETE — это уже ремонтная бригада с кувалдами, они всё могут сломать, перестроить или вообще снести к хуям.

Запомни эту хуйню, и не будет у тебя в коде такого, что GET-запрос базу данных дропает. А то видел я такие «шедевры» — волосы дыбом, ёпта.