如何在 JSON 响应中格式化 HATEOAS 链接
How to format HATEAOS links in JSON reponse
我正在构建一个包含啤酒数据的 API。 beer_lookup
table 中的每种啤酒都具有以下特性:
{
"beerid": "e2e73352-1cf3-4bd7-943a-e682c2498c09",
"beername": "Barrel-Aged Mexican Cake (Bourbon)",
"description": "",
"abv": "10.5",
"ibu": "",
"status": "Verified",
"dateadded": "2017-08-28T00:00:00"
}
在单独的查找中 tables 我有 brewery
和 style
通过相交 tables 链接到啤酒。
在向 http://localhost:5000/api/beer/{beerid}
索要啤酒时的 json 响应中,我想提供啤酒对象和指向啤酒其他方面的参考链接(HATEAOS 样式)。目前我的回答是这样的,我认为这没问题,除非啤酒可以有多个啤酒厂(合作)。我应该如何处理多个 "rel": "brewery"
链接? _links
是否应该包含一个名为 breweries
的数组?我知道我完全可以 return 随心所欲,但我想知道是否有类似的标准。
{
"value": {
"beerid": "e2e73352-1cf3-4bd7-943a-e682c2498c09",
"beername": "Barrel-Aged Mexican Cake (Bourbon)",
"description": "",
"abv": "10.5",
"ibu": "",
"status": "Verified",
"dateadded": "2017-08-28T00:00:00"
},
"_links": [
{
"href": "http://localhost:5000/api/beer/e2e73352-1cf3-4bd7-943a-e682c2498c09",
"rel": "self",
"method": "GET"
},
{
"href": "http://localhost:5000/api/brewery/32efb254-b418-4c59-bc30-5cec97e3d702",
"rel": "brewery",
"method": "GET"
},
{
"href": "http://localhost:5000/api/brewery/989b1eaa-fe92-423b-a275-4895ed90da51",
"rel": "brewery",
"method": "GET"
},
{
"href": "http://localhost:5000/api/style/2689dcb0-9419-43c8-918f-4fc411fc0f90",
"rel": "style",
"method": "GET"
}
]
}
编辑:可能会这样:
{
"value": {
"beerid": "e2e73352-1cf3-4bd7-943a-e682c2498c09",
"beername": "Barrel-Aged Mexican Cake (Bourbon)",
"description": "",
"abv": "10.5",
"ibu": "",
"status": "Verified",
"dateadded": "2017-08-28T00:00:00"
},
"_links": {
"self": {
"href": "http://localhost:5000/api/beer/e2e73352-1cf3-4bd7-943a-e682c2498c09"
},
"breweries": [
{
"href": "http://localhost:5000/api/brewery/32efb254-b418-4c59-bc30-5cec97e3d702"
},
{
"href": "http://localhost:5000/api/brewery/989b1eaa-fe92-423b-a275-4895ed90da51"
}
],
"style": {
"href": "http://localhost:5000/api/style/2689dcb0-9419-43c8-918f-4fc411fc0f90"
}
}
}
I want to provide the beer object and ref links (HATEAOS style) to other aspects of the beer.
太棒了。
您可能应该看看 JSON 超媒体格式,而不是自己动手。
虽然不是你问的。
Possibly going with this
也许 - 我认为这取决于您期望客户如何使用 link。客户是否希望关心哪些啤酒厂 link 是哪个?还是对啤酒厂感兴趣的客户希望加载所有这些?
想想一个网页——我们在 html 中包含图像 links,但客户端需要下载并呈现所有这些图像。 Hyperlinks(由 a 标签定义)通常伴随着一些语义内容以允许客户端区分它们。
因此,您的啤酒厂 可能 是具有自身 link 的嵌入对象列表,而不是啤酒资源本身的 link。
我认为 HAL specification 上的示例很好地说明了这两个选项。
我正在构建一个包含啤酒数据的 API。 beer_lookup
table 中的每种啤酒都具有以下特性:
{
"beerid": "e2e73352-1cf3-4bd7-943a-e682c2498c09",
"beername": "Barrel-Aged Mexican Cake (Bourbon)",
"description": "",
"abv": "10.5",
"ibu": "",
"status": "Verified",
"dateadded": "2017-08-28T00:00:00"
}
在单独的查找中 tables 我有 brewery
和 style
通过相交 tables 链接到啤酒。
在向 http://localhost:5000/api/beer/{beerid}
索要啤酒时的 json 响应中,我想提供啤酒对象和指向啤酒其他方面的参考链接(HATEAOS 样式)。目前我的回答是这样的,我认为这没问题,除非啤酒可以有多个啤酒厂(合作)。我应该如何处理多个 "rel": "brewery"
链接? _links
是否应该包含一个名为 breweries
的数组?我知道我完全可以 return 随心所欲,但我想知道是否有类似的标准。
{
"value": {
"beerid": "e2e73352-1cf3-4bd7-943a-e682c2498c09",
"beername": "Barrel-Aged Mexican Cake (Bourbon)",
"description": "",
"abv": "10.5",
"ibu": "",
"status": "Verified",
"dateadded": "2017-08-28T00:00:00"
},
"_links": [
{
"href": "http://localhost:5000/api/beer/e2e73352-1cf3-4bd7-943a-e682c2498c09",
"rel": "self",
"method": "GET"
},
{
"href": "http://localhost:5000/api/brewery/32efb254-b418-4c59-bc30-5cec97e3d702",
"rel": "brewery",
"method": "GET"
},
{
"href": "http://localhost:5000/api/brewery/989b1eaa-fe92-423b-a275-4895ed90da51",
"rel": "brewery",
"method": "GET"
},
{
"href": "http://localhost:5000/api/style/2689dcb0-9419-43c8-918f-4fc411fc0f90",
"rel": "style",
"method": "GET"
}
]
}
编辑:可能会这样:
{
"value": {
"beerid": "e2e73352-1cf3-4bd7-943a-e682c2498c09",
"beername": "Barrel-Aged Mexican Cake (Bourbon)",
"description": "",
"abv": "10.5",
"ibu": "",
"status": "Verified",
"dateadded": "2017-08-28T00:00:00"
},
"_links": {
"self": {
"href": "http://localhost:5000/api/beer/e2e73352-1cf3-4bd7-943a-e682c2498c09"
},
"breweries": [
{
"href": "http://localhost:5000/api/brewery/32efb254-b418-4c59-bc30-5cec97e3d702"
},
{
"href": "http://localhost:5000/api/brewery/989b1eaa-fe92-423b-a275-4895ed90da51"
}
],
"style": {
"href": "http://localhost:5000/api/style/2689dcb0-9419-43c8-918f-4fc411fc0f90"
}
}
}
I want to provide the beer object and ref links (HATEAOS style) to other aspects of the beer.
太棒了。
您可能应该看看 JSON 超媒体格式,而不是自己动手。
虽然不是你问的。
Possibly going with this
也许 - 我认为这取决于您期望客户如何使用 link。客户是否希望关心哪些啤酒厂 link 是哪个?还是对啤酒厂感兴趣的客户希望加载所有这些?
想想一个网页——我们在 html 中包含图像 links,但客户端需要下载并呈现所有这些图像。 Hyperlinks(由 a 标签定义)通常伴随着一些语义内容以允许客户端区分它们。
因此,您的啤酒厂 可能 是具有自身 link 的嵌入对象列表,而不是啤酒资源本身的 link。
我认为 HAL specification 上的示例很好地说明了这两个选项。