Разрешить сортировку по всем свойствам ресурса? - PullRequest
0 голосов
/ 11 июля 2020
• 1000 подмножество свойств?

Если подмножество в порядке, что мне делать с запросом, запрашивающим сортировку по другому свойству: игнорировать ли я это молча или мне нужно выбросить / вернуть 400?

1 Ответ

0 голосов
/ 11 июля 2020

Разрешить сортировку по всем свойствам ресурса?

Обычный ответ - не манипулировать (отсортировать) представление ресурса, а вместо этого создать новый ресурс с отсортированным представлением .

GET /1a587d4e-4443-49ce-9195-20e821e67f83
GET /1a587d4e-4443-49ce-9195-20e821e67f83?sort=name

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

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

Иногда используется альтернативный подход, заключающийся в том, чтобы сделать различительную часть медиа-типа , а не часть идентификатора ресурса

GET /1a587d4e-4443-49ce-9195-20e821e67f83
Accept: application/prs.unsorted+json
GET /1a587d4e-4443-49ce-9195-20e821e67f83
Accept: application/prs.name-sorted+json

Другими словами, используйте возможности согласования содержимого HTTP, чтобы гарантировать, что клиент получит соответствующее представление. Эта сторона устраняет некоторые из проблем согласованности, которые могут возникнуть у вас, жертвуя дополнительной сложностью, связанной с тем, «как клиент определяет, какие типы контента следует включать в заголовок Accept.

Суть мой вопрос: как подойти к сортировке коллекции ресурсов, например GET api / orders? sortby = createdOn. Нужно ли мне разрешать сортировку по любому из свойств Order или я могу игнорировать запрос клиента на сортировку по некоторым из них (например, GET / api / orders / sortby = itemCount

С точки зрения REST это полностью зависит от вас. Исходный сервер является органом, определяющим, имеет ли значение любой заданный целевой uri (ie, независимо от того, доступен ли этот идентификатор в любой момент).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...