Коллекция + элементы 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, который я изначально рассматривал как проблему, фактически обеспечивает отличный способ расширения при сохранении обратной совместимости.

Другие вопросы по тегам