最近、アプリケーション状態のエンジン(HATEOAS)としてのハイパーメディアについて読んでいます。これは、Web APIを「真にRESTful」とする制約です。基本的に、現在の状態から可能な遷移へのすべての応答にリンクを含めることになります。
HATEOASが私の理解に基づいていることを説明させてください。何かを見逃した場合は、訂正してください。
/
GET: {
"_links": {
"child": [
{ "href": "http://myapi.com/articles", "title": "articles" }
]
}
}
/articles?contains=HATEOAS
GET: {
"_items": [
{ "uri": "http://myapi.com/articles/0", "title": "Why Should I Care About HATEOAS?" },
{ "uri": "http://myapi.com/articles/1", "title": "HATEOAS: Problem or Solution?" }
],
"_links": {
"self": { "href": "http://myapi.com/articles", "title": "articles" },
"parent": { "href": "http://myapi.com/", "title": "home" }
}
}
POST: {
"title": "A New Article",
"body": "Article body",
"tags": [ "tag1", "tag2" ]
}
/articles/0
GET: {
"title": "Why Should I Care About HATEOAS?",
"body": "Blah blah blah"
"tags": [ "REST", "HATEOAS" ],
"_links": {
"self": { "href": "http://myapi.com/articles/0", "title": "article" },
"parent": { "href": "http://myapi.com/articles", "title": "articles" }
}
}
HATEOASは2つの主な利点を提供すると主張されています。
サービス全体がルートURIから検出可能であるため、ドキュメントは不要です。
クライアントはサーバーから切り離され、サーバーはURI構造を自由に変更できるようになりました。これにより、APIバージョン管理の必要がなくなります。
しかし、私の考えでは、サービスはそのURI構造よりもはるかに多くのことです。効果的に使用するには、次のことも知っておく必要があります。
- 使用できるクエリパラメータと可能な値
- JSON / XML / POST / PATCH / etcリクエストで送信する必要があるドキュメントの構造
- サーバーによって送信された応答の構造
- 発生する可能性のあるエラー
- ...
上記に基づいて、HATEOASは発見可能性と結合の問題のごく一部しか解決しません。上記の4つの側面を文書化する必要がありますが、それらはクライアントがサーバーに強く結合しているためです。クライアントの破損を回避するには、引き続きAPIをバージョン管理する必要があります。
それが提供する唯一の利点は、URL構造を多かれ少なかれ自由に変更できることです(ところで、「クールURIは変わらない」という原則はどうなりましたか?)。私の理解は正しいですか?