JavaScript — Backbone и PHP API

У меня есть пара вопросов о реализации 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-мышлением или использованием базовых моделей и коллекций?

0

Решение

Есть несколько способов достичь этого. То, что сейчас приходит мне в голову, это модифицировать сервер для обработки параметра запроса, скажем 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 — это прекрасно, ничего против.

Рекомендации :

http://backbonejs.org/#Collection-fetch

https://stackoverflow.com/a/15996003/566092

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]