Я пытаюсь преобразовать набор сервисов на основе SOAP в API RESTful.
Я начал с определения ресурсов путем анализа имен операций и получил ресурс Subscription
.
Когда мне нужно обновить состояние подписки, я не могу просто отправить POST
запрос на сервер, потому что у меня нет прямого доступа к ресурсам, но мне нужно вызвать некоторые операции в стиле RPC для обновления их свойств. Кроме того, только и только если я изменяю состояние подписки на «активный», требуется дополнительный вызов внешней службы.
В этих случаях, какова лучшая практика для обработки базовых операций?
Решение, которое я придумал, состоит в том, чтобы использовать параметры запроса, так что если мне нужно вызвать службу активации, я могу использовать что-то вроде:
POST /subscriptions/{subscriptionid}/?activate=true
Учитывая, что я не могу напрямую обновить поля моего объекта подписки, есть ли лучшая практика для обработки этого вида преобразования?
Обновление 1:
Я могу поместить в тело моего запроса POST некоторые значения, например, «state»: «active»
и проверьте в моем сервисе правильные операции, которые будут запущены.
источник
Ответы:
Вам нужно посмотреть этот разговор Джима Уэббера.
Подумайте «обмен сообщениями»; отправьте сообщение на свой домен, описав, что вы хотите, чтобы произошло. Побочным эффектом сообщения является то, что модель вашего домена фактически меняет свое состояние. «Ресурс» - это очередь сообщений.
Написание имени ресурса не имеет значения для машин; но люди склонны суетиться, когда используемые вами идентификаторы выходят за рамки соглашения о том, что ресурсы являются "существительными".
Кроме того, мы говорим о ресурсе, который подчиняется
/subscriptions/{subscriptionid}
, поэтому соглашение (см. RFC 3986 ) требует выражения этой связи с сегментом пути, а не с использованием части запроса.Таким образом, эти написания могут быть разумными
источник
Если это логический флаг для активации / деактивации, я бы сказал, что по умолчанию используется JSON:
Это легко расширить, если вы хотите поддерживать больше свойств. Другой подход - дать ему собственную конечную точку:
Лично я бы использовал это, только если
active
состояние этого события нуждается / имеет свойства, которые вы затем можете передать / получить в JSON, такие как идентификатор пользователя или параметр.Если это не логическое значение, а просто действие, которое вам нужно вызвать, но не нужно / не иметь какой-либо обратной связи о состоянии (кроме немедленного 200 OK), я бы использовал конечную точку, подобную этой, чтобы вызвать ее, как RPC:
Если вы сомневаетесь, прочитайте это: http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#restful (см. «Как насчет действий, которые не вписываются в мир операций CRUD?»). «)
источник
ОТДЫХ не работает.
Activate
это глагол и не может быть состоянием,Active
это состояние.Поскольку RESTful не работает, вы не можете указать службе RESTful, что делать, но вы можете добавить работу для очереди службы.
Посмотри это:
Этот запрос является RESTful и поддерживает все преимущества RESTful (такие как производительность, кислота ...)
источник