Что такое спокойный подход к составлению группы по запросу - PullRequest
7 голосов
/ 08 января 2009

рассмотрим следующий http-запрос:

GET /defects?group-by=priority

Я бы хотел, чтобы возвращаемый набор (поток) дефектов был сгруппирован по приоритету. возвращаемый фид состоит из дефектов (ресурсов) и групповой информации.

Я думал о чем-то, что вернет названия групп и подсчитает их перед возвратом коллекции, например:

<content>
<Group val="High" count="567"/>
<Group val="Medium" count="437"/> 
<Group val="Low" count="19"/> 
<Defect ,,,,>
<Defect ,,,,>
<Defect ,,,,>
</content>

Проблема с таким представлением состоит в том, что запрашиваемый ресурс (URL) является дефектом, поэтому клиент ожидает сбора дефектов, а не элемента Group.

Полагаю, одним из вариантов решения этой проблемы было бы определение отдельного ресурса групп для дефектов, т. Е .:

 defects/groups?group1=priority

, который возвращает коллекцию групп и их количество, а затем клиент может запросить ресурс дефектов для самих данных. Но этот дизайн громоздок и требует дополнительных циклов, не говоря уже о возможных проблемах согласованности, когда дефекты были добавлены \ удалены между вызовом ресурса группы и ресурса дефектов.

Итог, как можно вернуть коллекцию элементов, сгруппированных по атрибуту?

РЕДАКТИРОВАТЬ Сначала я подумал, что эта проблема должна решаться стандартом публикации ATOM. Но даже если ATOM решил эту проблему, мне все равно нужно поддерживать другие представления (XML, JSON), поэтому я ищу шаблон, более присущий подходу RESTful.

Ответы [ 3 ]

6 голосов
/ 09 января 2009

Я не думаю, что то, о чем вы просите, возможно.

Если клиент ожидает сбора дефектов, то вы можете сделать заказ по приоритету, но

a group of defects != a defect

Таким образом, вы не можете вернуть коллекцию групп.

Вы можете добавить неприятный хак, чтобы добавить атрибуты к ресурсу дефектов для приоритета и размера группы приоритетов, но мне это кажется плохим.

Я думаю, что правильные способы Restful сделать это:

  • Оформление услуги по возврату групп дефектов

или

  • Возврат дефектов по заказу приоритет, и пусть клиент делает группировка и подсчет ресурсов в каждой группе.
1 голос
/ 15 января 2009

Исходя из комментария к этого ответа , похоже, что для этого требуется поддержка подкачки страниц. В этом случае я рекомендую вам проверить AtomPub и, в частности, как он обрабатывает пейджинг . Возможно, тот же общий подход будет работать для вас; если вам действительно повезет, вы можете использовать весь стандарт.

0 голосов
/ 01 апреля 2019

Я создал URL-адрес следующим образом:

GET /grouped-posts/category возвращает сгруппированные сообщения, такие как:

{
    "data": {
        "science": [{"title": "post 1"}, {"title": "post 2"}],
        "art": [{"title": "post 3"}, {"title": "post 4"}]
    }
}

Если вы хотите сгруппировать по любым объектам, вы можете вернуть список вместо map / dict:

{
    "data": [{
        "category": {"id": 9202, "name": "science"},
        "posts": [{"title": "post 1"}, {"title": "post 2"}]
    }, {
        "category": {"id": 3924, "name": "art"},
        "posts": [{"title": "post 3"}, {"title": "post 4"}]
    }]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...