Restful веб-сервисы - PullRequest
       10

Restful веб-сервисы

6 голосов
/ 30 июля 2009

Чего следует избегать при настройке интерфейса Restful, чтобы убедиться, что вы не превратили его в RPC?

Ответы [ 5 ]

8 голосов
/ 30 июля 2009

Do:

  • Создайте приложение так, чтобы оно управлялось гипертекстом (Гипермедиа как двигатель состояния приложения - HATEOAS).
  • Потратьте большую часть своего времени и усилий на поиск ресурсов и создание типов носителей для их представления.
  • Думайте обо всем URI как об идентификаторе ресурса и предполагайте, что он изменится в будущем.
  • Укажите все параметры для продолжения работы через ваше приложение в виде ссылок в вашем представлении.
  • Думайте о своем приложении как о веб-сайте, который клиенты будут «сканировать» или «просматривать».
  • Попробуйте написать клиент для вашего API и посмотрите, где происходит связывание.

Не

  • Публикация шаблонов URI в документации API. Если вам нужны шаблоны для параметров запроса, например, убедитесь, что они являются частью вашего определения типа мультимедиа.
  • Представьте, что ваше приложение представляет собой набор URI, на которые действуют четыре глагола.
  • Служите MIME-типам, таким как "application / xml" или "application / json", для клиентов.

Чтобы использовать аналогию, ваш API должен работать больше как GPS для ваших клиентов, а не как карта. Вы будете предоставлять клиентам только название соседней улицы. Но с тех пор они могут делать только то, что ваше приложение говорит, что они могут делать в любой момент.

Цель этого стиля - минимизировать связь между вашим приложением и его клиентами. Все связи должны происходить в вашем определении типа носителя. Это упрощает эволюцию API и обеспечивает хороший механизм управления версиями. Кроме того, исчезают вопросы о таких проблемах, как нумерация страниц.

Большинство API RESTful не следуют этому шаблону. Для того, чтобы это сделать, смотрите Sun Cloud API и его предысторию .

4 голосов
/ 30 июля 2009

Воспользуйтесь преимуществами базового протокола, где это возможно. Вместо использования глаголов в полезной нагрузке попробуйте использовать (например) методы HTTP GET, POST, PUT, DELETE. Ваш URI должен описывать ресурс, но не то, что с ним делать.

3 голосов
/ 30 июля 2009

Некоторые вещи, которых вы хотите избежать:

  • Игнорирование кэширования
  • Туннелирование всего через GET (или, альтернативно, POST)
  • Игнорирование типов MIME

Здесь есть хорошая статья, в которой говорится о некоторых анти-шаблонах REST:

http://www.infoq.com/articles/rest-anti-patterns

2 голосов
/ 30 июля 2009

В этой статье подробно рассматриваются некоторые конструктивные решения, которые отличают RPC от REST:

http://www.pluralsight.com/community/blogs/tewald/archive/2007/04/28/47067.aspx

@S.Lott: спасибо, я честно думал, что я отправил это как ответ, а не комментарий. Я теряю шарики.

2 голосов
/ 30 июля 2009

Вроде широкий вопрос, но я попробую. Во-первых, используйте только те глаголы HTTP, которые были предназначены. Не размещайте POST на URL с аргументом url, который в основном переопределяет POST и превращает его в GET или DELETE. Вот как работает SOAP (все это POST).

...