2016-05-16 2 views
2

У меня есть коллекция запросов, отправляемых с моего клиентского приложения на сервер, который их обрабатывает. Я создаю новый запрос с этим запросомREST API-дизайн для коллекции, который, естественно, разделен на подколлекции

POST api/v1/requests 

После запроса отправить его recieves статус PENDING и после того, как оценивали STAUS изменяется на RESOLVED. Таким образом, у меня есть коллекция requests, которая разделена на 2 подвыбора: requests.pending и requests.resolved. Мне нужен способ получить доступ к ним с обеих сторон, а также кэшировать эти страницы.

Будет ли остальной путь, чтобы сделать их как этот:

GET api/v1/requests/page/:page   - returns pages of all requests collection 
GET api/v1/requests/pending/page/:page - returns pages of pending requests collection 
GET api/v1/requests/resolved/page/:page - returns pages of resolved requests collection 

Я немного неудобно с этим подходом в качестве основного ресурса является requests сбором и я создаю 2 искусственные (или магазины) поверх нее. Тем не менее я думаю, что я не могу просто подойти к этому с параметрами запроса, как это в качестве параметров запроса не должны кэшировать witin протокола REST серверов кэша:

GET api/v1/requests/?page=:page   - returns pages of all requests 
+0

обновил заголовок. – zmii

+0

В Github есть что-то вроде этого, как описано здесь: https://developer.github.com/v3/activity/events/#list-public-events-that-a-user-has-received – zmii

ответ

4

Есть целый LOT способов сделать ваши URLs здесь, и я уверен, что будет несколько (сильных) мнений.

Моя рекомендация будет следующим ...

POST ../api/v1/request 

v1 против 1 это мое личное предпочтение, я думаю, что v1 более описательный, чем просто 1.

Есть много обсуждение множественного числа и единственного числа для имен ресурсов. Мое предпочтение - единственное.

// redirects to a paginated url 
GET ../api/v1/request -> ../api/v1/request?page=1&rpp=10 

// your default page that return all types of requests ordered 
// however you want, most likely reverse date created. 
GET ../api/v1/request?page=1&rpp=10 

// returns pending requests. 
GET ../api/v1/request?page=1&rpp=10&status=pending 

// returns resolved requests. 
GET ../api/v1/request?page=1&rpp=10&status=resolved 

Вот что я думаю ... Из того, что я могу сказать, вы на самом деле пытаетесь запросить у вас запросы.

Как правило, более конкретные/вложенные URL-адреса относятся к дочерним отношениям.

Например, получить все адреса для конкретного клиента:

GET ../api/v1/customer/1/address 

Все вышеуказанные адреса могли бы быть кэшируемым и bookmarkable.

+0

Один из архетипов REST 'controller', что в основном sasys, что вы создаете какое-то действие для выбранных ресурсов, поэтому дополнительный уровень вложенности может представлять действие на некотором источнике, основанное на предыдущих частях URI, поэтому почему я не должен ставить'/pending' в конце URI для выбора ожидающих запросов? – zmii

+2

Вы можете. Как я уже сказал, есть много способов разрезать и нарезать «RESTful» URL. Но то, что я чувствую, что вы действительно пытаетесь сделать, это найти запросы со статусом ожидания. Так что, возможно, '../ api/v1/request/status/pending'. По-прежнему кажется, что вы пытаетесь запросить ресурс запроса. Но есть много способов сделать то, что вы пытаетесь сделать, и то, как вы хотите это сделать, скорее всего, будет работать нормально.Вы обеспокоены кодом в контроллере и должны выполнять инструкции 'if' в вашем контроллере? Потому что есть способы вокруг этого, если это необходимо. – hooknc

Смежные вопросы