У меня есть пара вопросов о реализации PHP API за магистральным клиентом.
PHP API, который я пишу, предназначен для RESTful и, как результат, работает нормально с GET
, PUT
, POST
а также DELETE
запрос.
Однако использование API значительно выросло, и в результате мы хотим упростить запросы.
Мы можем собрать коллекцию проектов, выполнив следующие действия на стороне клиента,
var projects = new App.Collections.Projects();
projects.fetch({ reset: true });
Стоит отметить, что на данный момент проект может иметь один из 4 статусов: заархивирован, находится в состоянии ожидания, активен, завершен.
Это вызывает запрос GET http://app.com/projects
это возвращает все проекты для пользователя, тестовый пользователь, которого мы используем, возвращает 1200 проектов (каждый проект представляет собой довольно большой объем данных). Это приводит к тому, что PHP не хватает памяти.
Мы хотим упростить запрос, поэтому вместо запроса данных в одном блоке он запрашивает данные в 4 этапа.
Т.е. получить все ожидающие проекты — затем получить все завершенные проекты и т. д.
Сначала мы должны создать коллекцию для каждого статуса проекта, затем запустить выборку для каждого статуса, а затем объединить результаты в одну коллекцию. Похоже, это разумный вариант?
Это идет вразрез с REST-мышлением или использованием базовых моделей и коллекций?
Есть несколько способов достичь этого. То, что сейчас приходит мне в голову, это модифицировать сервер для обработки параметра запроса, скажем status
а затем пройти status
при получении коллекции.
var projects = new App.Collections.Projects();
projects.fetch({
reset: true,
data:{ status : 'ACTIVE'}
}).done(function(){
projects.fetch({
data : { status: 'ARCHIVED'},
remove:false
}).done(function(){
projects.fetch({
remove:false,
data : {status:'PENDING'}
});
})
});
Передача параметров запроса в бэкэнд REST — это прекрасно, ничего против.
Рекомендации :
Других решений пока нет …