Ответ
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-запрос базу данных дропает. А то видел я такие «шедевры» — волосы дыбом, ёпта.