我正在nodejs中做一个REST web服务器,我想用Collection+JSON作为超媒体类型来实现它。
然而,我不明白是否可以在集合中表示1到n的关系。所以,例如,如果我有一个收集篮,是否可以使篮中的项目指向其他定义集合的项目?
您可以使用collection
链接关系,它被描述为:
指代表集合的资源当前资源是成员。
这似乎满足了你的需要。
使用传统的电子商务示例,以下是如何构建产品的集合JSON端点。请注意,您的客户端应该使用rel标记进行分组。您的rel标签列表就是您与客户的"合同"。"这个rel标签总是意味着这一点。"
"collection":
{
"href": "/products/1234.json",
"items":
[
{
"name": "name",
"value": "10 Speed Bike"
}
{
"name": "manufacturer",
"value": "Schwin"
}
{
"name": "price",
"value": 150.00
}
],
"links":
[
{
"href": "/products/1234/attachments/flier.pdf",
"rel": "attachment",
"prompt": "Flier from the Manufacturer",
"render": "link"
},
{
"href": "/products/1234/attachments/specs.pdf",
"rel": "attachment",
"prompt": "Spec Sheet from Manufacturer",
"render": "link"
},
{
"href": "/products/1234/attachments/warranty.pdf",
"rel": "attachment",
"prompt": "Limited Lifetime Warranty",
"render": "link"
},
{
"href": "/store/attachments/returns.pdf",
"rel": "attachment",
"prompt": "Our Return Policy",
"render": "link"
},
{
"href": "/images/1235478324.png",
"rel": "product-image",
"prompt": "A Schwin 10-speed bike in red",
"render": "image"
},
{
"href": "/images/1235478355.png",
"rel": "product-image",
"prompt": "A girl riding a 10-speed bike.",
"render": "image"
},
{
"href": "/images/1235478385.png",
"rel": "product-image",
"prompt": "A grandma watching grandkids ride bicycles.",
"render": "image"
},
{
"href": "/images/1235478545.png",
"rel": "swatch",
"prompt": "Radiant Red",
"render": "image"
},
{
"href": "/images/1235478545.png",
"rel": "swatch",
"prompt": "Brilliant Blue",
"render": "image"
},
{
"href": "/images/1235478588.png",
"rel": "swatch",
"prompt": "Stunning Silver",
"render": "image"
},
{
"href": "/blog/2014/07/26",
"rel": "content",
"prompt": "Our store now sells Schwin bicycles!",
"render": "link"
},
{
"href": "/manufacturers/schwin",
"rel": "manufacturer",
"prompt": "Schwin",
"render": "link"
}, ]
}
在这个例子中,客户会知道"swatch"rel标签的存在意味着它应该显示颜色样例部分。。。每个"rel-tag"一个样例。如果有一个样例与多个样例,您的客户端甚至可能会呈现不同的效果。
您想要扩展collection+JSON(我已经对其进行了广泛的扩展),这是情有可原的。collection+JSON的详细语法(我最初认为这是一个问题)实际上提供了一种在保持向后兼容性的同时进行扩展的好方法。