Ответ
GET и PATCH — это HTTP-методы с разной семантикой согласно стандарту REST.
| Характеристика | GET | PATCH |
|---|---|---|
| Назначение | Получить (Retrieve) данные. Запрос ресурса. | Частично обновить (Update) ресурс. |
| Идемпотентность | Да. Многократный вызов возвращает одинаковый результат и не меняет состояние сервера. | Нет. Повторные вызовы с тем же телом могут приводить к разным состояниям. |
| Безопасность | Да. Не должен изменять состояние сервера. | Нет. Изменяет состояние ресурса на сервере. |
| Тело запроса | Обычно отсутствует (не имеет семантического значения). | Присутствует. Содержит инструкции для частичного обновления (например, JSON Patch). |
| Кешируемость | Да. Ответы часто кешируются. | Нет. Ответы обычно не кешируются. |
Примеры:
### GET: Получение информации о пользователе
GET /api/users/123 HTTP/1.1
Host: example.com
### Ответ
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 123,
"name": "Alice",
"email": "alice@example.com"
}
### PATCH: Частичное обновление пользователя (JSON Patch format)
PATCH /api/users/123 HTTP/1.1
Host: example.com
Content-Type: application/json-patch+json
[
{ "op": "replace", "path": "/name", "value": "Alicia" },
{ "op": "add", "path": "/age", "value": 30 }
]
### Ответ
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 123,
"name": "Alicia",
"email": "alice@example.com",
"age": 30
}
Ключевое: GET — для чтения, PATCH — для частичного изменения. Для полной замены ресурса используется PUT.
Ответ 18+ 🔞
А, ну это ж классика, блядь! Сидишь ты такой, пишешь свой API, и тут бац — нужно выбрать, какой метод использовать. А там этих методов, блядь, как собак нерезаных. Но сегодня, сука, про двух главных распиздяев поговорим: GET и PATCH. Это как два брата-близнеца, только один — тихий очкарик, который только смотрит, а второй — тот ещё хулиган, который всё ломает и переделывает.
Смотри сюда, я тебе на пальцах, блядь, объясню, а то ты, пизда бородавчатая, опять всё перепутаешь.
| Признак | GET | PATCH |
|---|---|---|
| Чё делает? | Читает данные. Просто пришёл, посмотрел, ушёл. Как в музее. | Частично меняет ресурс. Пришёл, переставил одну вазу, картину криво повесил и свалил. |
| Идемпотентный? | Ага. Сколько раз ни вызывай — хуйня одна и та же. Как включать свет в комнате. | Хуй там! Если два раза один и тот же патч отправить — результат может быть пиздец какой разный. |
| Безопасный? | Да. Он нихуя не трогает. Святой, блядь. | Нет, ёпта! Он меняет всё, до чего дотронется. Опасный тип. |
| Тело запроса | Обычно нету. Зачем? Он же просто читает, а не сочиняет. | Обязательно есть! Там, блядь, целая инструкция, что и как менять. |
| Кешируется? | Естественно. Ответ можно засунуть в кеш и потом не париться. | Хуй с горы! Кто ж будет кешировать результат обновления? Ты с ума сошёл? |
Ну и примеры, чтобы совсем понятно стало, ёпта:
### GET: Просто посмотреть на пользователя, как на картину в Лувре
GET /api/users/123 HTTP/1.1
Host: example.com
### Ответ
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 123,
"name": "Alice",
"email": "alice@example.com"
}
Видишь? Пришёл, получил Алису, и всё. Ничего не изменилось. Красота.
А теперь смотри, как приходит наш PATCH — хитрая жопа с ушами:
### PATCH: Пришёл, чтобы Алису немного подрихтовать
PATCH /api/users/123 HTTP/1.1
Host: example.com
Content-Type: application/json-patch+json
[
{ "op": "replace", "path": "/name", "value": "Alicia" },
{ "op": "add", "path": "/age", "value": 30 }
]
### Ответ
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 123,
"name": "Alicia",
"email": "alice@example.com",
"age": 30
}
Вот, блядь! Пришёл, имя поменял, возраст добавил. Теперь она Алисия, и ей 30 лет. Сервер изменился, всё ебнулось. Волнение ебать!
И главное запомни, чувак: GET — это когда тебе просто почитать надо, а PATCH — когда немного подправить. А если хочешь всё снести и заново построить — это уже PUT, другая история, про которую я тебе как-нибудь в другой раз расскажу, если, конечно, не передумаю, блядь.