УСПОКОИТЕЛЬНЫЕ услуги и операции обновления

Я знаю, что REST предназначен, чтобы быть ориентированным на ресурс, который примерно переводит в операции CRUD на этих ресурсах с помощью стандартных методов HTTP. Но что я просто хотел обновить часть ресурса?

Например, скажем, я имею Payment ресурс и я хотели отметить свое состояние как"paid". Я не хочу POST целое Payment объект через HTTP (иногда у меня даже нет всех данных).

Каков был бы УСПОКОИТЕЛЬНЫЙ способ сделать это? Я видел, что Twitter использует следующий подход для обновления состояний Twitter:

http://api.twitter.com/1/statuses/update.xml?status=playing with cURL and the Twitter API

Этот подход в "духе" REST?

ОБНОВЛЕНИЕ: ПОМЕЩЕННЫЙ-> СООБЩЕНИЕ

Некоторые ссылки я нашел тем временем:

13
задан Igor Brejc 22 February 2010 в 09:40
поделиться

3 ответа

Идеальный способ сделать это - изменить часть (подресурс) ресурса и заставить сервер вернуть 303 См. другое с заголовком Location, чтобы указать на измененный ресурс. 303 See Other сообщает клиенту, что в результате запроса изменился какой-то другой ресурс и что клиент должен обновить свое представление.

В вашем примере (типы носителей, конечно, гипотетические):

1. Client retrieves payment representation
GET /payments/2

200 Ok
Content-Type: application/payment+xml

<payment>
  <status href="/payments/2/status" value="pending"/>
</payment>

2. Client updates status
PUT /payments/2/status
Content-Type: text/plain

payed

303 See Other
Location: /payments/2

3. Client follows the 303 redirect 
GET /payments/2

200 Ok
Content-Type: application/payment+xml

<payment>
  <status href="/payments/2/status" value="payed"/>
</payment>

10
ответ дан 2 December 2019 в 00:46
поделиться

POST следует использовать для изменения ресурса

EDIT: Статья Мартина Фаулера Richardson Maturity Model - очень хорошее введение в REST.

4
ответ дан 2 December 2019 в 00:46
поделиться

Думаю, для этого и нужен POST: буква U в CRUD.

Вы отправляете данные на существующий ресурс. Ресурс решает, что с ним делать, и обновляется. Кроме того, данные POST могут быть только фрагментом всего ресурса.

Twitter использует подход IMHO, а не RESTful, потому что они перегружают GET.

-1
ответ дан 2 December 2019 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: