@VoicesOfUnreasonと同様に、HATEOASでは、URIは変更可能なように発見可能であり、文書化されていません。つまり、あなたのシステムの入り口になっていない限り(Cool URIs、クライアントによってハードコーディングできる唯一のものです)、あなたの残りの部分を進化させたい場合は、あまりにも多くのものを持つべきではありません将来のシステムのURI構造これは、実際には、RESTの機能の中で最も多くのものの1つです。
残りの非クールなURIについては、時間の経過と共に変更される可能性があります。また、APIドキュメントでは、実行時にハイパーメディアトラバーサルによって発見されるべきであるという事実を説明する必要があります。
Richardson's Maturity Model (level 3)を見ると、これはリンクが有効になる場所です。たとえば、トップレベルの/ api/version(/ 1)から、グループへのリンクがあることがわかります。ここでは、これがHAL Browserようなツールで見ることができる方法は次のとおりです。
ルート:
{
"_links": {
"self": {
"href": "/api/root"
},
"api:group-add": {
"href": "http://apiname:port/api/group"
},
"api:group-search": {
"href": "http://apiname:port/api/group?pageNumber={pageNumber}&pageSize={pageSize}&sort={sort}"
},
"api:group-by-id": {
"href": "http://apiname:port/api/group/id" (OR "href": "http://apiname:port/api/group?id={id}")
}
}
}
アドオンは単にそのエンドポイントにPOSTとなり、その後、あなたは2つのGETメソッドを持っていると思います。あなたが特定のグループ(例えば#123)にドリルダウンしたら、次に
{
"groups": [
{
"id": 123,
"name": "Test Group"
},
{
"id": 134,
"name": "Tennis squad"
}
]
}
:このような何かを返すことができ
GET /api/group?pageNumber=0&pageSize=20&sort=asc
ここ
{
"Id" : 123,
"Name" : "test",
"_links": {
"self": {
"href": "/api/group/1" (OR "/api/group?id=1")
},
"edit": {
"href": "http://apiname:port/api/group/1"
},
"api:delete": {
"href": "http://apiname:port/api/group/1"
},
"api:items-query": {
"href": "http://apiname:port/api/bonus?groupId=1"
}
}
}
、編集します単純にPUTにする必要があります。また、DELETE(同じリンクでRESTのレベル2を参照)が必要です。アイテムに関しては、それらが単なるプロパティであればおそらく最もよく分かりますし、別のエンドポイントt;グループを取得している同じ呼び出しで返されるようにそれらを埋め込むことさえできます。
ここでの利点は、クライアントがリレーションシップ(およびリソース)URLを変更することがほとんど自由である一方で、クライアントはリレーションシップ(リンク)名(リソース構造/プロパティのほかに明らかに) 。
本質的に、クライアントは依然としてサーバーから返されたスキームに結合する必要があります。そのスキーマはプロトコールですか? –
Ish。クライアントは、サーバとまったく通信するためにメディアタイプ(バイトの処理方法)を理解する必要があります(コンテンツネゴシエーションはここで役立ちます)。さらに、クライアントはアプリケーションの状態を理解する必要があります。つまり、リンクを使用して目標を達成する方法を理解する必要があります。サーバーは、クライアントが使用できる選択肢の表現としてリンクを提供します。クライアントはすべてのリンクを認識する必要はありませんが、進行するリンクを認識できない場合、それ以上の進歩はできません。 – VoiceOfUnreason
この場合、クライアントは単にHTTP経由でサービスを呼び出すJavaアプリケーションであれば、Javaアプリケーションをプログラミングして、リソースステートの各段階で各リンクをどのように処理するのかを理解するのは簡単なケースです。私が理解していないことは、これがどのように切り離されているかです。クライアントはこの段階でスキームに結合する必要があります。しかし、私はHATEOSを使うと、クライアントが壊されることなく、いつでもサーバがそのスキーマを変更できることを意味すると考えました。 –