我正在尝试设计一个充分利用超媒体的 RESTful 服务。
最好,用户代理应该只知道根 URI,以便能够探索服务的所有功能——也就是说,我希望它处于成熟度模型的第 3 级。
现在,用户代理应该能够创建一些资源并在以后编辑它们。在创建/编辑时,用户代理需要访问其他一些资源/枚举。
富资源:
{
"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的链接:
富资源:
{
"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" }
}
}
总而言之,任何可以创建和编辑的资源都可能具有关联的编写器资源。
通过 GET-ting writer,用户代理可以非常方便地创建/编辑资源。
嵌入在编写器中的有效负载被 POST 到它的目的地,瞧 :)
此外,还应该有一个根容器,其中包含指向资源及其新资源编写器的链接(参见上面示例中的fooRoot)。
问题是...
...上面描述的模式有一个众所周知的名字吗?
...有没有更好的方法来解决创建/编辑问题,在创建/编辑时需要相邻资源并且第三级成熟度仍然“保持”?
一些参考资料: