Правильно ли возвращать неполный ресурс из REST API?

#api #rest

Вопрос:

У меня есть пример ресурса, который является предложением. Предположим, что в каждом предложении есть n пунктов предложения, например, 5 или 7. Эти элементы предложения могут иметь другое состояние, например «Недействительно». Моя проблема в том, что мне нужно создать конечную точку, которая вернет предложение (мой ресурс) с недопустимым элементом предложения, скажем, для конкретного пользователя. С этой конечной точки мне было бы гораздо лучше вернуть упомянутое предложение ТОЛЬКО с недействительным пунктом предложения (поэтому некоторые пункты предложения могут быть обрезаны). Предложение также должно быть возвращено, а не только товар предложения. Я задаюсь вопросом, правильно ли с точки зрения ОТДЫХА возвращать ресурс, но без полного состояния. Как может выглядеть uri конечной точки примера?

Комментарии:

1. Я, вероятно, сегодня не в лучшей форме и поэтому как-то не понимаю вопроса. Является offerItem ли состояние (какой-то продукт, я думаю) каким-то образом зависимым от пользователя (например, «продукт не предназначен для пользователя») или что Invalid в этом контексте означает? Я также не совсем понимаю, почему вы тогда хотите вернуть предложение с недействительными товарами. Но в качестве общего эмпирического правила здесь: проектируйте ресурс и взаимодействие так, как если бы вы имели дело с традиционными HTML-страницами. REST просто использует те же концепции взаимодействия, что и в Интернете. Однако REST не заботится о дизайне URI

Ответ №1:

Если в ответе не всегда будут полные данные, я предполагаю, что вы ожидаете чего-то вроде фильтра.

Если ваш api-это api для составления списков, вы можете использовать фильтр. Например: /пользователи?статус=активный, который может возвращать только набор активных пользователей.

В противном случае, если ваш api должен возвращать ответ одного объекта, вы можете использовать поля параметров, чтобы возвращать только определенные данные в ответе. Пример: /пользователи/идентификатор пользователя?поля=электронная почта,возраст