В чем разница между HTTP-методами GET и PATCH?

Ответ

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, другая история, про которую я тебе как-нибудь в другой раз расскажу, если, конечно, не передумаю, блядь.