如何为组和列表形成超媒体
How to form Hypermedia for Groups and Lists
我正在设计一个 REST API 并且在这个特定的用例中,试图找出最好的方法以及这个超媒体应该是什么样子。
场景是调用者调用 /persons?fields=lastName;filter=beginsWith=b
因为他想要返回姓氏以 "b" 开头的人的列表。
下面显示了 JSON 响应,我正在尝试弄清楚如何最好地 mold/represent 包括与之相关联的超媒体。
您可以看到人员列表,但只能看到姓名 属性,因为它是每个人的部分代表。
然后我尝试在此处添加 HATEAOS,但不确定添加什么最有用以及应该参考什么。
我想好吧,我可以为我 return 所在的组(列表)本身提供一个 href。如果是这样的话,在哪里?我认为像我这样将它放在根对象中是没有意义的。因为期望是 return 一个人的列表,而不是一些根元对象,所以我对下面的内容感觉不太好。
或
有没有人认为它在这个特定实例中没有用或没有真正接受 HATEOS,我应该在这里提供一些其他类型的 href 链接?
JSON - 人员对象列表(表示)returned
[
"meta": {
"rel": "self",
"href": "http://ourdomain.api/persons?fields=lastName;filter=beginsWith=b"
},
{
"name": {
"last": "best"
}
},
{
"name": {
"last": "bettler"
}
},
{
"name": {
"last": "brown"
}
}
]
嗯,这真的是你的选择,但我认为如果你从导航中排除一个表示(即不提供指向它的链接)那么它就不再是 HATEOAS(这里只是我的意见)。
在我看来,你可以按照你在问题中提供的 json 做一些事情,只需清楚地分开调用的结果和元信息:
{
"meta": {
"rel": "self",
"href": "http://ourdomain.api/persons?fields=lastName;filter=beginsWith=b"
},
"resource" : [
{
"name": {
"last": "best"
}
},
{
"name": {
"last": "bettler"
}
},
{
"name": {
"last": "brown"
}
}
]
}
这并不少见。另一种方法是在您 return 的每个资源中提供指向列表的链接,其关系类似于 parent
或 source
(也许 source
更有意义,因为它是经过过滤的查询),例如
{[
{ "name" : {
"last" : "best"
},
"meta": {
"rel": "source",
"href": "http://ourdomain.api/persons?fields=lastName;filter=beginsWith=b"
}
},
{ ..and so on.. }
]}
毕竟,列表只是结果的容器,所以如果不包含任何超媒体,'clean'(至少对我而言)感觉会更好。
我正在设计一个 REST API 并且在这个特定的用例中,试图找出最好的方法以及这个超媒体应该是什么样子。
场景是调用者调用 /persons?fields=lastName;filter=beginsWith=b
因为他想要返回姓氏以 "b" 开头的人的列表。
下面显示了 JSON 响应,我正在尝试弄清楚如何最好地 mold/represent 包括与之相关联的超媒体。
您可以看到人员列表,但只能看到姓名 属性,因为它是每个人的部分代表。
然后我尝试在此处添加 HATEAOS,但不确定添加什么最有用以及应该参考什么。
我想好吧,我可以为我 return 所在的组(列表)本身提供一个 href。如果是这样的话,在哪里?我认为像我这样将它放在根对象中是没有意义的。因为期望是 return 一个人的列表,而不是一些根元对象,所以我对下面的内容感觉不太好。
或
有没有人认为它在这个特定实例中没有用或没有真正接受 HATEOS,我应该在这里提供一些其他类型的 href 链接?
JSON - 人员对象列表(表示)returned
[
"meta": {
"rel": "self",
"href": "http://ourdomain.api/persons?fields=lastName;filter=beginsWith=b"
},
{
"name": {
"last": "best"
}
},
{
"name": {
"last": "bettler"
}
},
{
"name": {
"last": "brown"
}
}
]
嗯,这真的是你的选择,但我认为如果你从导航中排除一个表示(即不提供指向它的链接)那么它就不再是 HATEOAS(这里只是我的意见)。 在我看来,你可以按照你在问题中提供的 json 做一些事情,只需清楚地分开调用的结果和元信息:
{
"meta": {
"rel": "self",
"href": "http://ourdomain.api/persons?fields=lastName;filter=beginsWith=b"
},
"resource" : [
{
"name": {
"last": "best"
}
},
{
"name": {
"last": "bettler"
}
},
{
"name": {
"last": "brown"
}
}
]
}
这并不少见。另一种方法是在您 return 的每个资源中提供指向列表的链接,其关系类似于 parent
或 source
(也许 source
更有意义,因为它是经过过滤的查询),例如
{[
{ "name" : {
"last" : "best"
},
"meta": {
"rel": "source",
"href": "http://ourdomain.api/persons?fields=lastName;filter=beginsWith=b"
}
},
{ ..and so on.. }
]}
毕竟,列表只是结果的容器,所以如果不包含任何超媒体,'clean'(至少对我而言)感觉会更好。