При предоставлении ответов от REST API с ограничением гипермедиа, как указать клиенту, какой метод HTTP (глагол) использовать? - PullRequest
5 голосов
/ 02 июня 2011

Я думаю, что довольно хорошо разбираюсь в принципах архитектуры RESTful, но я еще не там.

Часть, которую я не могу понять, это то, как клиенты узнаюткакие методы HTTP доступны для каждого ресурса?Как насчет того, когда для продолжения процесса требуется определенное действие в потоке приложения?

Упрощенный пример:

Предполагается, что клиент размещает простой заказ в моем REST API.

Клиент отправит почтовый запрос на: http://api.mycompany.com/orders

Запрос полезной нагрузки

<order>
    <items>
        <sku>12345</sku>
        <quantity>1</quantity>
    </items>
</order>

Принимая запросуспешно

полезная нагрузка ответа

<order>
    <id>156</id>
    <status>Pending Payment</status>
    <items>
        <sku>12345</sku>
        <quantity>1</quantity>
    </items>    
    <links>
        <link rel="order" url="http://api.mycompany.com/orders/156" />
        <link rel="invoice" url="http://api.mycompany.com/payments/156" />
        <link rel="payment" url="http://api.mycompany.com/invoices/156" />
    </links>
</order>

Если я правильно понимаю ограничение гипермедиа, я предоставляю соответствующие ресурсы, и клиент может выбрать, кудаиди оттуда.

В приведенном выше примере ссылка с rel = "order" может быть запросом GET , PUT или DELETE .Ссылка с rel = "invoice" ограничена запросом GET .Ссылка с rel = "payment" будет принимать только запрос POST .

Как клиент узнает об этом?Я знаю, что если они сделают запрос OPTIONS к одному из вышеупомянутых ресурсов, он должен предоставить им доступные методы, но я не уверен, является ли это стандартным способом обработки такого сценария.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

6 голосов
/ 03 июня 2011

Простой факт заключается в том, что эти глаголы будут задокументированы в документации ресурсов.

Вопрос, который вы не задавали, звучит так: «Как клиент узнает, что такое refs 'order', 'invoice', а' оплата 'за? ".

Тем не менее, они страдают от той же проблемы, что и вы.И их тоже нужно документировать.

Когда они документированы, когда им даны объяснения относительно того, чем они являются, почему они существуют и для чего вы, как потребитель ресурсов, будете их использовать,тогда фактические глаголы, необходимые для использования этих ресурсов, также будут документированы вместе с ними.

0 голосов
/ 03 июня 2011

Клиенты могут вызывать любые HTTP-глаголы на любом URI, который вы выставляете.Будут ли эти действия иметь какой-либо эффект, это отдельный вопрос.

Клиенты могут узнать, какие методы будут работать с конкретным URI по-разному:

  1. Они вызывают каждый URI с помощьюразличные действия и динамически определяют, какие из них работают (возвращая код ответа 2xx), а какие возвращают 405 - Method Not Allowed.
  2. Клиентский программист читает вашу документацию и заранее кодирует взаимодействия.

Если честно, я никогда не видел № 1, реализованного в производственной системе.# 2 - это то, что имеет смысл для меня и большинства людей, которым приходится писать клиенты, использующие REST API.

Обратите внимание, что использование REST API - это нечто большее, чем просто знание, какой HTTP-глагол использовать.Содержание и структура типа мультимедиа (как для запросов, так и для ответов) так же важна для документирования и предоставления доступа тем, кто планирует кодировать в вашей системе.

...