Мой веб-сервис RESTFUL? - PullRequest
       3

Мой веб-сервис RESTFUL?

4 голосов
/ 29 июня 2010

У меня есть веб-сервис REST, который предоставляет 2 метода:

  1. [метод POST]. Клиент предоставит список объектов в форме XML.Мой метод веб-службы вставит / обновит список объектов на основе одного атрибута в объекте [mode = insert / update] и вернет XML со списком объектов и их состоянием [была ли вставка / обновление успешной].
  2. [POST метод] Он примет список objectIds и вернет состояние этих объектов с сервера в виде XML.

Я знаю, что мы должны использовать

  • Метод GET для получения информации
  • Метод POST для создания новой записи
  • Метод PUT для обновления существующей записи.

Я знаючто наша реализация нарушает некоторые ограничения REST, но наше требование заставило нас реализовать его таким образом.

Мой вопрос: можно ли согнуть ограничения, чтобы удовлетворить наше требование?

Ответы [ 3 ]

5 голосов
/ 29 июня 2010

То, что вы пытаетесь сделать, можно сделать ОТДЫХА.Хотя POST обычно используется для добавления одного объекта в коллекцию, его также можно использовать для отправки фрагмента данных в «ресурс обработки данных».Это в значительной степени открывает двери для того, чтобы делать с POST все, что вы хотите.

Люди часто неправильно понимают ограничения REST и считают, что вы ДОЛЖНЫ использовать PUT и DELETE, чтобы быть RESTful.Это не вариант.Нет необходимости использовать все методы.Единственное требование - не злоупотреблять теми, которые вы используете.

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

Важно, чтобыявно об этих правилах.Вы должны создать новый тип носителя, например application/vnd.yourcompany.objectlist+xml, и вам нужно написать документацию о том, как должен быть структурирован этот тип носителя.

Теперь, когда вы определили тип носителя, ваш клиент должен будет знать, гдеРАЗМЕСТИТЬ этот список объектов.В идеале вы должны определить новое отношение ссылки (например, objectprocessor), которое можно использовать в других документах для предоставления URL-адреса для POST.В документе спецификации этого отношения Link вы должны объяснить разработчикам клиента, что когда вы публикуете application/vnd.yourcompany.objectlist+xml для ссылки, которая имеет отношение ссылки objectprocessor, то произойдут x, y и z.

Предполагая, что ваш корневой URL-адрес возвратил какой-то документ XHTML, такой как:

<html>
  <h1>My awesomely restful service that can create objects in batches</h1>
  <link rel='objectprocessor' href='http:/example.org/myservice/objectprocessor'/>
</html>

Клиентское приложение может обработать этот документ, обнаружить эту ссылку и понять, основываясь на определении отношения ссылки, которое необходимо для POST aapplication/vnd.yourcompany.objectlist+xml до конечной точки, указанной в href.

Таким образом, сообщение полностью самоописательно, вы взаимодействуете с ресурсами, идентифицированными с URL-адресами, которые можно обнаружить, и вы находитесь в рамках правил единого интерфейса.

1 голос
/ 29 июня 2010

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

1 голос
/ 29 июня 2010

Этот веб-сервис не является RESTful.Вы всегда можете согнуть ограничения, но потеряете метку REST: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...