HATEOAS
アプリケーション状態のエンジンとしてのハイパーメディア(HATEOAS )は、他のネットワークアプリケーションアーキテクチャと区別するRESTアプリケーションアーキテクチャの制約です。
HATEOASを使用すると、クライアントは、アプリケーションサーバーがハイパーメディアを介して動的に情報を提供するネットワークアプリケーションと対話します。RESTクライアントは、ハイパーメディアの一般的な理解を超えて、アプリケーションまたはサーバーと対話する方法についての予備知識をほとんどまたはまったく必要としません。
対照的に、Common Object Request Broker Architecture(CORBA)のクライアントとサーバーは、ドキュメントまたはインターフェイス記述言語(IDL)を介して共有される固定インターフェイスを介して対話します。
HATEOASによって課せられる制限は、クライアントとサーバーを切り離します。これにより、サーバー機能を独立して進化させることができます。
コンテンツ
1 例
2 オリジンズ
3 実装
4 も参照してください
5 参考文献
例
HTTPを実装するユーザーエージェントは、単純なURLを介してRESTAPIのHTTPリクエストを作成します。ユーザーエージェントが行う可能性のある後続のすべての要求は、各要求への応答内で検出されます。これらの表現に使用されるメディアタイプ、およびそれらに含まれる可能性のあるリンク関係は標準化されています。クライアントは、表現内のリンクから選択するか、メディアタイプによって提供される他の方法で表現を操作することにより、アプリケーションの状態を移行します。このように、RESTfulインタラクションは、帯域外情報ではなく、ハイパーメディアによって駆動されます。
たとえば、このGETリクエストはアカウントリソースをフェッチし、JSON表現で詳細をリクエストします。
GET / accounts / 12345 HTTP / 1.1ホスト: bank.example.com
応答は次のとおりです。
HTTP / 1.1 200 OK{{ “アカウント”: {
“account_number”:12345、
“残高”: {
「通貨」:「米ドル」、
「値」:100.00 }、 「リンク」:{
“預金”: “/accounts/12345/deposits”、
“引き出し”: “/ accounts / 12345 / withdrawals”、
“転送”: “/accounts/12345/転送”、
“close-requests”: “/ accounts / 12345 / close-requests”
} }}
応答には、次の可能なフォローアップリンクが含まれています:POSTデポジット、引き出し、転送、またはクローズリクエスト(アカウントをクローズするため)。
例として、後でアカウントが上書きされた後、アカウントが上書きされたため、使用可能なリンクの異なるセットが
HTTP / 1.1 200 OK{{ “アカウント”: {
“account_number”:12345、
“残高”: {
「通貨」:「米ドル」、
「値」:-25.00 }、 「リンク」:{
「預金」:「/ accounts / 12345/deposits」
} }}
現在、利用できるリンクは1つだけです。それは、より多くのお金を入金することです(入金にPOSTすることによって)。現在の状態では、他のリンクは使用できません。したがって、アプリケーション状態のエンジンという用語。リソースの状態が変化すると、可能なアクションは変化します。
クライアントは、サーバーが提供するすべてのメディアタイプと通信メカニズムを理解する必要はありません。新しいメディアタイプを理解する機能は、サーバーからクライアントに提供される「コードオンデマンド」を通じて実行時に取得できます。
オリジンズ
HATEOAS制約は、 Roy Fieldingの博士論文で定義されているように、RESTの「均一なインターフェイス」機能の重要な部分です。フィールディングは彼のブログでその概念をさらに説明しています。
フィールディング氏によると、この制約やその他のREST制約の厳格さの目的は、「数十年規模のソフトウェア設計です。細部はすべて、ソフトウェアの寿命と独立した進化を促進することを目的としています。制約の多くは、短期的なものとは正反対です。残念ながら、人々は短期的な設計にはかなり優れており、通常は長期的な設計にはひどいです。」
実装HAL JSON-LD
サイレン
コレクション+JSON
JSON:API
ハイドラ
も参照してください
ハイパーテキストアプリケーション言語
Universal Description Discovery and Integrationは、 Webサービス記述言語と同等です
参考文献
^ フィールディング、ロイT.(2008年10月20日)。「RESTAPIはハイパーテキスト駆動型である必要があります」。
^ Thijssen、Joshua(2016-10-29)。「HATEOASとは何ですか?RESTAPIにとってなぜそれが重要なのですか?」。RESTクックブック。
^ フィールディング、ロイ・トーマス(2000)。「RepresentationalStateTransfer(REST)」。建築様式とネットワークベースのソフトウェアアーキテクチャ(PhD)の設計。カリフォルニア大学アーバイン校。
^ サイレン: GitHubでエンティティを表すためのハイパーメディア仕様 ^ 「コレクション+JSON-ハイパーメディアタイプ」。2021-10-25を取得しました。
^ 「JSONAPI:最新の仕様」。2021-10-25を取得しました。
^ 「Hydra:ハイパーメディア駆動型WebAPI」。2021-10-27を取得。