Вот пример, чтобы задать свой вопрос. У меня есть модель, которая содержит 'коробки', и у них есть REST конечной точки:Моделирование более сложной связи между объектами RESTful (поля и узлы)
/boxes
, /boxes/{boxId}
Эта модель также содержит 'узлы':
/nodes
, /nodes/{nodeId}
Nodes могут сидеть на границах ящиков, и это отношение типа «многие-ко-многим». Наличие одного узла на нескольких границах - это способ указать, что эти границы (частично) перекрываются, но узлы также имеют другие цели.
Я пытаюсь определить, как эта модель в не-удивительно, RESTful образом. Я вижу пару способов сделать это. Но я не уверен, я должен использовать:
Модель
/borders
в качестве полноправного типа объекта с его собственной конечной точки. В блоках указаны четыре границы (сверху, снизу, слева, справа). Имеют границы, ссылающиеся на список узлов. У узлов ссылаться на список границ.Модель
/boxNodeRelationships
со своей собственной конечной точкой и каждая из них относится к ящику, узлу и содержит поле «граница» (перечисление с четырьмя вариантами).
Оба являются похожими, а скорее «тяжелыми» для их целей. Альтернативный вариант должен быть немного более ad-hoc:
- Дайте в коробке список
{ border, node }
объектов. Дайте узлам список объектов{ box, border }
. Эти объекты будут возвращены сGET
вызовами и ожидаются отPOST
/PUT
вызовов, но не будут полноценными типами с конечной точкой.
Я хотел бы знать, как RESTifarian разрешит это, а также услышит некоторые плюсы и минусы этих подходов. Я также хотел бы знать, есть ли другие подходы, которые принципиально отличаются друг от друга.
Чтобы найти оптимальный способ моделирования API, вам необходимо понять варианты использования, для которых он, скорее всего, будет использоваться. – astreltsov
@astr: Нам нужны всевозможные способы приблизиться к этим данным, действительно, например. получение всех узлов на границе, подключение всех ящиков к узлу, подключение всех ящиков к другому ящику и т. д. Поэтому мне интересно, какой из самых элегантных RESTful API предоставляет полный доступ к данным. – mhelvens