Коллекция + элементы JSON, которые ссылаются на элементы другой коллекции
Я делаю REST веб-сервер в nodejs, и я подумывал реализовать его, используя Collection+JSON в качестве гипермедиа-типа.
Однако я не понял, можно ли представить в коллекции 1 к n отношения. Так, например, если у меня есть корзина коллекции, можно ли сделать элементы внутри корзины так, чтобы они указывали на элемент другой определенной коллекции?
2 ответа
Вы можете использовать collection
отношение ссылки, которое описывается как:
Относится к ресурсу, представляющему коллекцию, членом которой является текущий ресурс.
Кажется, это отвечает вашим потребностям.
Используя традиционный пример электронной торговли, вот как может быть структурирована конечная точка collection-JSON для продукта. Обратите внимание, что ваш клиент должен группировать по rel-tag. Ваш список тегов 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"
}, ]
}
В этом примере клиент будет знать, что наличие rel-тега "swatch" означает, что он должен отображать раздел "Образцы цветов"... один образец на каждый "rel-tag". Ваш клиент может даже отрисовать по-другому, если есть 1 образец против многих.
Вы могли бы быть прощены за то, что хотели расширить коллекцию +JSON ( я расширил это широко). Подробный синтаксис collection+JSON, который я изначально рассматривал как проблему, фактически обеспечивает отличный способ расширения при сохранении обратной совместимости.