Допустим, я разрабатываю API рецептов, и он предоставляет доступ к ресурсам рецептов, состоящим из ингредиентов, инструкций и, конечно же, длинной предыстории рецепта):
GET /recipes/ - returns a paginated list of recipes
Теперь, скажем, меня попросили реализовать функцию, позволяющую пользователю запрашивать рецепты, которые они еще не пробовали. Один из возможных запросов для этого может быть:
GET /recipes?tried=false
Поскольку служба, которая управляет рецептами, скорее всего, отличается от службы, которая управляет рецептами, которые видел пользователь, этот маршрут звучит как неправильный подход.
Возможно, улучшение будет следующим:
GET /user/{user_id}/recipes?tried=false
Это говорит о том, что эта пользовательская служба могла бы получить список всех рецептов, которые пользователь пробовал, а затем отправить запрос в службу рецептов для возврата разбитого на страницы списка. рецептов, за исключением тех, которые пользователь уже пробовал.
Но это означает, что будет такой маршрут:
GET /recipes?exclude=202,203,420,109,...,400
, и это может превышать максимальную длину для URL-адресов.
Есть ли способ RESTful для поддержки этих функций, не подвергая риску слишком длинные URL-адреса?
Я подумал о создании нового ресурса, называемого фильтром, который позволил бы вызывающей стороне создать фильтр с помощью POST, который включает список идентификаторов рецептов, которые пробовал пользователь, и передачи URL или идентификатора этого фильтра в t он рецепт службы, а затем удаление ресурса фильтра, но это начало звучать слишком сложно.
Заранее спасибо!