REST означает Передачу состояния представления, что означает, что клиент и сервер влияют на состояние друг друга, обмениваясь представлениями ресурсов.
Клиент может GET
представить билет так:
GET /api/tickets/123 HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 123,
"state": "new",
"archived": false,
"comments": []
}
Теперь клиент может PUT новое представление (заменяя его оптом) или PATCH определенные части существующего:
PATCH /api/tickets/123 HTTP/1.1
Content-Type: application/json-patch+json
[
{"op": "replace", "path": "/state", "value": "approved"},
{"op": "add", "path": "/comments", "value": {
"text": "Looks good to me!"
}}
]
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 123,
"state": "approved",
"archived": false,
"comments": [
{"author": "Thomas", "text": "Looks good to me!"}
]
}
Обратите внимание, как обновление выражается в терминах , что необходимо изменить в представлении JSON , используя стандартный формат JSON Patch . Клиент может использовать тот же подход для обновления любого ресурса, представленного в JSON. Это способствует единому интерфейсу , отделяющему клиента от конкретного сервера.
Конечно, сервер не должен поддерживать произвольные обновления:
PATCH /api/tickets/123 HTTP/1.1
Content-Type: application/json-patch+json
[
{"op": "replace", "path": "/id", "value": 456}
]
HTTP/1.1 422 Unprocessable Entity
Content-Type: text/plain
Cannot replace /id.
Тем не менее, это может потребовать большей сложности на сервере, чем выделенные операции, такие как «утверждение», «отклонение» и т. Д. Возможно, вы захотите использовать библиотеку для реализации JSON Patch. Если вы обнаружите, что вам нужно много пользовательских действий, которые трудно выразить в терминах представления, архитектура RPC может подойти вам лучше, чем REST.