Hypermedia をうまく活用した RESTful サービスを設計しようとしています。
できれば、サービスのすべての機能を探索できるように、ユーザー エージェントはルート URI のみを知っている必要があります。つまり、成熟度モデルの第 3 レベルにあることを望みます。
これで、ユーザー エージェントはいくつかのリソースを作成し、後でそれらを編集できるようになります。作成/編集時に、ユーザー エージェントは他のリソース/列挙にアクセスする必要があります。
fooリソース:
{
"category" : "category chosen from an enumeration of possible categories",
"color" : "color chosen from an enumeration of possible colors",
"aRelatedResource" : "resource identifier from chosen from a collection"
}
前述の要件を考慮して、次のパターンを考え出しました。
fooRootリソースを用意します。
{
// no properties, only links
"_links" : {
"foos" : { "href" : "URI-to-foos" },
"fooCreator" : { "href" : "URI-to-plain-fooWriter" }
}
}
fooリソースにfooWriterへのリンクを含めます。
fooリソース:
{
"category" : "category chosen from an enumeration of possible categories",
"color" : "color chosen from an enumeration of possible colors",
"aRelatedResource" : "resource identifier from chosen from a collection",
"_links" : {
"self" : {...},
"fooEditor" : { "href" : "URI-to-fooWriter-initialized-for-current-foo" }
}
}
fooWriterは次のようになります。
{
"fooPayload" : {
"category" : "NULL or pre-initialized",
"color" : "NULL or pre-initialized",
"aRelatedResource" : "NULL or pre-initialized"
},
"_links" : {
"fooPayloadDestination" : { "href" : "URI-to-foos-or-foo" },
"categoryEnum" : { "href" : "URI-to-categories" },
"colorEnum" : { "href" : "URI-to-colors" },
"availableResourcesToRelateWith" : { "href" : "some-other-URI" },
....
.... and even something useful for pre-validation etc.
"validator" : { href : "URI-to-some-resource-or-service" }
}
}
要約すると、作成および編集できるすべてのリソースには、ライターリソースが関連付けられている可能性があります。writer
を
GET することにより、ユーザー エージェントは非常に便利な方法でリソースを作成/編集できます。
ライターに埋め込まれたペイロードは、その宛先に POST され、ほら :)
また、リソースと新しいリソースのライターの両方へのリンクを保持するルートコンテナが必要です (上記の例のfooRootを参照)。
質問は...
...上記のパターンにはよく知られている名前がありますか? ...作成/編集時に隣接するリソースが必要であり、第 3 レベルの成熟度がまだ「保持」されている、作成/編集
の問題
を解決するより良い方法はありますか?
参考文献: