RESTful дизайн для конечной точки, чтобы фильтровать и возвращать только последний созданный ресурс - PullRequest
0 голосов
/ 27 февраля 2019

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

POST /main-resources/{id}/sub-resources

Подресурс содержит период времени, ограниченный датами, как часть тела, что-то вроде:

{
    "startDate": "2018-10-10",
    "endDate": "2018-12-12"
}

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

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

GET /main-resources/{id}/sub-resources/latest?date=2018-11-11

Моя проблема в том, что latest мне кажется фильтром.latest может возвращать разные значения при каждом вызове, в зависимости от того, создал ли пользователь новые подресурсы, которые, по моему пониманию, не являются RESTful.Вместо предыдущей конечной точки, я думаю, она должна выглядеть примерно так:

GET /main-resources/{id}/sub-resources?latest=true&date=2018-11-11

или

GET /main-resources/{id}/sub-resources?limit=1&date=2018-11-11&order=desc

, которая дает больше опций, но на самом деле не понадобится в моем случае использования.

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

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

Есть ли другая альтернатива?

1 Ответ

0 голосов
/ 27 февраля 2019

Моя проблема в том, что latest мне кажется фильтром.latest может возвращать разные значения при каждом вызове, в зависимости от того, создал ли пользователь новые подресурсы, которые, по моему пониманию, не являются RESTful.

Идентификатор latest выглядит простохорошо.См. Следующую цитату из главы 5 диссертации Филдинга, где определен архитектурный стиль REST:

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

Например, «предпочтительная версия авторов» академической статьиявляется отображением, значение которого меняется со временем, тогда как отображение «статьи, опубликованной в материалах конференции X», является статическим.Это два разных ресурса, даже если они оба отображаются в одно и то же значение в определенный момент времени.Различие необходимо для того, чтобы оба ресурса можно было идентифицировать и ссылаться независимо.Аналогичным примером из разработки программного обеспечения является отдельная идентификация файла исходного кода с управлением версиями при обращении к «последней редакции», «редакции номер 1.2.7» или «редакции, включенной в выпуск Orange».

...