WTFはhateoasか?
9563 ワード
アプリケーション状態のエンジンとしてのHypermediaまたはHateoasはRESTアーキテクチャの主要な部分です.残りの主要な基礎の一つであるユニフォームインターフェイスを提供します.ここで私はそれを説明し、なぜそれが作成されます.
ユーザ実体を管理するためにAPIを公開する必要があるシステムを持っているとしましょう.APIは先月のユーザ課金のレポートをサポートするのに加えて、CRUD操作を行います.すべてのユーザーを得てください: 1のIDを持つシングルユーザーを得る
新しいユーザーを作成します: ユーザーを更新します: ユーザーを削除: ユーザの課金レポートを取得します.
現実的に、どんな大きなプロジェクトのためにも、バックエンドの終点は時間とともに変化するでしょう.私たちの例のために、新しい建築家は雇われました、そして、彼は資源(例えば、例ではユーザー)がURIで複数形であると思っていないので、すべてのユーザーを得てください:
ID 1のシングルユーザーを取得します.
ユーザーを更新します.
ユーザを削除します:削除 ユーザのデフォルトの課金レポートを取得します.
ユーザーのために税報告を得てください:
フロントエンド部分については、フロントエンドとのコーディネート配置なしでこのアップデートをロールバックすると、これは壊滅的になります.
これは、サーバーとクライアントの両方の独立性の進化であるRESTエンドポイントの利益を享受していないことを意味します.
Hateoasを使用すると、実際には簡単にすべてのこれらの異なるAPIを変更しながらフロントエンドを実行し続けることができます.
HiEeoasは、任意のエンティティの応答でアクションとそのエンドポイントを定義することによって動作します.したがって、フロントエンドのすべてのAPIをハードコード化しません.
これは、我々の行動を実行するために応答から必要なリンクを得ることができるように、エンティティへのリンクを持つアクションのリストを追加することによって適用されます.
もともと、
これを行うための推奨される方法は、
いくつかの建築家は、Hateeoasが静止のための統一的なインターフェースを持つことの一部であるので、Hateoasの役割がURIを切り離すために標準に従うことであるのを見るので、HTTPメソッドを結合しておくのを好みます.それで、HTTP動詞を認識するAPIドキュメントに戻らなければなりません.
また、動詞はそれがしている行動を提示しなければなりません、私がユーザーを検索しているならば、私は常に私がURIを変えるかどうかを得るでしょう.あなたはのようなインターネット上で衝突意見の多くを見つけることができます
前の投稿 パーフェクトワールド
ユーザ実体を管理するためにAPIを公開する必要があるシステムを持っているとしましょう.APIは先月のユーザ課金のレポートをサポートするのに加えて、CRUD操作を行います.
GET https://ahmedabdulaziz.com/users/
GET https://ahmedabdulaziz.com/users/1/
(または、後遺症のために、後のポストのそれに関してより多くをされます)POST https://ahmedabdulaziz.com/users/
PUT https://ahmedabdulaziz.com/users/1/
Now in a perfect world these endpoints are and will always be the go-to endpoints to manage a user, we will never need to do a new change here, or will we?
不完全な世界
現実的に、どんな大きなプロジェクトのためにも、バックエンドの終点は時間とともに変化するでしょう.私たちの例のために、新しい建築家は雇われました、そして、彼は資源(例えば、例ではユーザー)がURIで複数形であると思っていないので、
DELETE https://ahmedabdulaziz.com/users/1/
の代わりに、我々は、税関報告を生成するために新しい機能を要求しているということに加えて、GET https://ahmedabdulaziz.com/users/1/report
を持っています.それで、我々は以下の終点を持ちます/users/1/
を得てください/user/1/
https://ahmedabdulaziz.com/user/
を得てくださいこれは、サーバーとクライアントの両方の独立性の進化であるRESTエンドポイントの利益を享受していないことを意味します.
救助のための
Now HATEOAS was introduced to specifically mitigate this issue, the issue of ever-evolving backend APIs.
Hateoasを使用すると、実際には簡単にすべてのこれらの異なるAPIを変更しながらフロントエンドを実行し続けることができます.
HiEeoasは、任意のエンティティの応答でアクションとそのエンドポイントを定義することによって動作します.したがって、フロントエンドのすべてのAPIをハードコード化しません.
これは、我々の行動を実行するために応答から必要なリンクを得ることができるように、エンティティへのリンクを持つアクションのリストを追加することによって適用されます.
もともと、
https://ahmedabdulaziz.com/user/1/
に対する応答は、ユーザのリストを取得するために、このようになります( HiOEOASを使ってバックエンドにシングルユーザを持っていると仮定してください).[
{
"id": 1,
"name": "Ahmed Abdul-Aziz",
"email": "[email protected]",
"links": {
"self": {
"href": "https://ahmedabdulaziz.com/users/1"
},
"update": {
"href": "https://ahmedabdulaziz.com/users/1"
},
"delete": {
"href": "https://ahmedabdulaziz.com/users/1"
},
"report": {
"href": "https://ahmedabdulaziz.com/users/1/report"
}
}
}
]
https://ahmedabdulaziz.com/user/1/
からhttps://ahmedabdulaziz.com/user/1/
までのエンドポイントを変更することができます.[
{
"id": 1,
"name": "Ahmed Abdulaziz",
"email": "[email protected]",
"links": {
"self": {
"href": "https://ahmedabdulaziz.com/user/1"
},
"update": {
"href": "https://ahmedabdulaziz.com/user/1"
},
"delete": {
"href": "https://ahmedabdulaziz.com/user/1"
},
"report": {
"href": "https://ahmedabdulaziz.com/user/1/report/default"
},
"tax-report": {
"href": "https://ahmedabdulaziz.com/user/1/report/tax"
}
}
}
]
別のステップでは、リンクを使用するHTTPメソッドを追加して結合をさらに削減します.{
"self": {
"href": "https://ahmedabdulaziz.com/users/1",
"method": "GET"
}
}
これは例えばパッチを更新するためにPUTを変更します.それにもかかわらず、これはHieoas準拠ではありません.これを行うための推奨される方法は、
https://ahmedabdulaziz.com/user/1/report/default
だけがアクションにある古い構造を維持し、要求されたHTTPメソッドを取得するリクエストを送る前にhttps://ahmedabdulaziz.com/user/1/report/tax
リクエストを送信することです.事実として、Roy T .フィールディングは、残り242479152の作成者.いくつかの建築家は、Hateeoasが静止のための統一的なインターフェースを持つことの一部であるので、Hateoasの役割がURIを切り離すために標準に従うことであるのを見るので、HTTPメソッドを結合しておくのを好みます.それで、HTTP動詞を認識するAPIドキュメントに戻らなければなりません.
Remember that HATEOAS is not a replacement for something like OpenAPI for API documentation.
また、動詞はそれがしている行動を提示しなければなりません、私がユーザーを検索しているならば、私は常に私がURIを変えるかどうかを得るでしょう.あなたはのようなインターネット上で衝突意見の多くを見つけることができます
Reference
この問題について(WTFはhateoasか?), 我々は、より多くの情報をここで見つけました https://dev.to/ahmedabdulaziz/wtf-is-hateoas-h96テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol