В моей попытке переделать существующее приложение с использованием архитектурного стиля REST, я столкнулся с проблемой, которую я бы назвал "Mediatype Explosion". Тем не менее, я не уверен, что это действительно проблема или неотъемлемая польза REST. Чтобы объяснить, что я имею в виду, сделайте следующий пример
Одна крошечная часть нашего приложения выглядит так:
коллекторно-оф-collections- > коллекциям-оф-изделия- > элементов
i.e верхний уровень представляет собой набор коллекций, и каждая из этих коллекций снова представляет собой набор элементов.
Кроме того, каждый элемент имеет 8 атрибутов, которые можно читать и писать отдельно. Попытка разоблачить вышеупомянутую иерархию как ресурсы RESTful оставляет меня со следующими типами носителей:
application/vnd.mycompany.collection-of-collections+xml
application/vnd.mycompany.collection-of-items+xml
application/vnd.mycompany.item+xml
Кроме того, поскольку каждый элемент имеет 8 атрибутов, которые могут быть прочитаны и записаны индивидуально, это приведет к появлению еще 8 типов носителей. например одним из таких типов носителей для атрибута "значение" элемента будет:
application/vnd.mycompany.item_value+xml
Как я упоминал ранее, это всего лишь крошечная часть нашего приложения, и я ожидаю, что несколько разных коллекций и элементов должны быть раскрыты таким образом.
Мои вопросы:
- Я делаю что-то не так, имея огромное количество типов медиа?
- Что такое альтернативный метод проектирования, чтобы избежать этого взрыва типов носителей?
Мне также известно, что вышеприведенная конструкция очень гранулирована, особенно разоблачая отдельные атрибуты элемента и имеющие отдельные типы носителей для каждого из них. Однако, делая это грубыми средствами, я в конечном итоге переношу ненужные данные по проводу, когда на самом деле клиенту нужно только прочитать или написать один атрибут элемента. Как вы подходите к такой проблеме дизайна?