27

私はHATEOASに関する記事を読んでいましたが、応答でさらにアクションを行うための URL を提供するという考えは理解していますが、これらの URL と対話するために使用する HTTP 動詞を指定する場所がわかりません。

たとえば、HATEOAS とは何ですか? REST API にとってなぜ重要なのですか? 、この応答からどのように

GET /account/12345 HTTP/1.1

HTTP/1.1 200 OK
<?xml version="1.0"?>
<account>
    <account_number>12345</account_number>
    <balance currency="usd">100.00</balance>
    <link rel="deposit" href="/account/12345/deposit" />
    <link rel="withdraw" href="/account/12345/withdraw" />
    <link rel="transfer" href="/account/12345/transfer" />
    <link rel="close" href="/account/12345/close" />
</account

HTTPを発行する必要があるのPUTか​​、POST/account/12345/close

4

4 に答える 4

7

/account/12345/close に PUT または POST する必要があるか知っていますか?

API のドキュメントを参照することで、それを知ることができます。HATEOS は正式なドキュメントに代わるものではありません。他の API と同様に、REST API にもドキュメントが必要です。

HATEOS を使用すると、特定のリソースから他のオプションが何であるかを知ることができます。これらのオプションを使用する理由や、送信する情報については説明しません。コンテンツ タイプは、アプリケーション レベルのセマンティクスではなく、構文と高レベルのセマンティクスのみを表現するため、ドキュメントでもありません。

REST API の使用方法を知りたい場合は、ドキュメントをお読みください。他の人に REST API を使用してもらいたい場合は、ドキュメントを提供してください。

ここには魔法はありません。

于 2013-11-13T17:34:45.323 に答える
4

@Cormac Mulhallの答えは非常に良いですが、同僚から聞いた改良点を提案したいと思います:

リソースに発生するアクションまたはイベントは、アクション動詞またはイベント名の動名詞形式を使用して従属ドメイン名詞として扱うことができますが、「アクション」や「イベント」などの意味のあるパス識別子の下に配置する必要があります。 . 返されるリソース表現は、アクションに関する状態データを表現するため、POSTまたはPUTはリクエストとして動作します。

注文に複数のライフサイクル状態があるとします。下書きが作成された後のある時点で、注文が発注、履行、またはキャンセルされます。

これらの注文アクションに関する情報は、リソース パスの下にアクション名を複数名詞形式で配置し/actions、アクションの状態がアクティブである場合に詳細を返すか、または404 NOT FOUNDそうでない場合に見つけることができます。

https://order.api.foobar.com/v1.0/orders/{orderId}/actions/placements
https://order.api.foobar.com/v1.0/orders/{orderId}/actions/fulfillments
https://order.api.foobar.com/v1.0/orders/{orderId}/actions/cancellations

これらのアクションが冪等である場合 (注文を続けて 2 回行うことはできません)、これらのアクションはPUT、これらの URI に適切な表現を 'ing することによって要求できます。冪等でない場合はPOST、複数形に 'ing することで作成されます。

たとえば、承認順序を追跡するには、次のことができPOSTます。

https://order.api.foobar.com/v1.0/orders/{orderId}/approvals

次に、以下に対して GET を実行して、個々の承認に関する情報を確認します。

https://order.api.foobar.com/v1.0/orders/{orderId}/approval/1

すべてのアクションを見つけるには、「アクション」などと呼ばれる集約を使用すると便利なことがよくあります。

https://order.api.foobar.com/v1.0/orders/{orderId}/actions

これを行うことができPOST、表現にどのタイプのアクションが意味されているかを宣言させます。

{orderId}パラメータをオフのままにすることで、個々の注文のアクションのリストを取得することもできます。

https://order.api.foobar.com/v1.0/orders/actions/placements
https://order.api.foobar.com/v1.0/orders/actions

これらは、クエリ パラメータを追加することで検索できます。

https://order.api.foobar.com/v1.0/orders/actions/placements?since={sinceTimestamp}
于 2015-04-01T20:52:38.557 に答える