вторник, 18 января 2011 г.

Модель зрелости REST сервисов Леонарда Ричардсона (Richardson Maturity Model)

Уровень 0

Сервисы имеют единственный URI, который использует единственный http-метод (как правило, метод POST).Примерами таких сервисов могут служить большинство веб-сервисов - они используют единственный URI для идентификации точки входа и HTTP POST для передачи SOAP-пакета с данными. Службы XML-RPC и POX(Plain Old XML) используют похожие вызовы, при которых по одному URI передаётся XML, как часть http-запроса.

Уровень 1 (Resources(Ресурсы))

Такие сервисы используют несклько URI, но единственный http-метод. Разница между L1 и L0, заключается в том, что L1 выставляет много логических ресурсов, а сервис уровня L0 объединяет все взаимодействия через единственный (большой и сложный) ресурс. В сервисах уровня L1, имена операций и параметров находятся в самом URI и передаются удалённому сервису, как правило через HTTP GET.

Уровень 2 (HTTP-verbs(http-методы/глаголы))

Сервивсы этого уровня имеют много URI-адресуемых ресурсов и используют несколько http-методов для каждого ресурса. Это, как правило CRUD(Create Read Update Delete)-сервисы, где состояние ресурса представляет бизнес-сущность, которой можно управлять через сеть.

Уровень 3 (Hypermedia Controls)
(Управление гиперсодержанием (? ничего лучшего в голову не пришло при переводе)))

Смысл таких сервисов в том, что при вызове сервиса, они возвращают не только состояние(изменённое или неизменённое), но и ссылки(слоты) на то что мы можем делать дальше с этим сервисом. Фактически, сервисы этого уровня пытаются обеспечить этакую само-документацию, т.е. дать пользователю возможность выбрать дальнейшие действия из доступного списка.

Пример запроса (уровень 3):

POST /slots/1234 HTTP/1.1
[various other headers]

<appointmentRequest>
  <patient id = "jsmith"/>
</appointmentRequest>


и ответа (уровень 3):

HTTP/1.1 201 Created
Location: http://royalhope.nhs.uk/slots/1234/appointment
[various headers]

<appointment>
  <slot id = "1234" doctor = "mjones" start = "1400" end = "1450"/>
  <patient id = "jsmith"/>
  <link rel = "/linkrels/appointment/cancel"
        uri = "/slots/1234/appointment"/>
  <link rel = "/linkrels/appointment/addTest"
        uri = "/slots/1234/appointment/tests"/>
  <link rel = "self"
        uri = "/slots/1234/appointment"/>
  <link rel = "/linkrels/appointment/changeTime"
        uri = "/doctors/mjones/slots?date=20100104@status=open"/>
  <link rel = "/linkrels/appointment/updateContactInfo"
        uri = "/patients/jsmith/contactInfo"/>
  <link rel = "/linkrels/help"
        uri = "/help/appointment"/>
</appointment>




Ссылки
http://www.crummy.com/writing/speaking/2008-QCon/act3.html
http://martinfowler.com/articles/richardsonMaturityModel.html

Комментариев нет:

Отправить комментарий