Хорошо, вот моя дилемма. (извините за длинное объяснение, просто пытаясь быть настолько ясным, насколько это возможно для этого случая)
Я работаю над restfull api, созданным с помощью Play Framework. Дело в том, что я нашел два возможных метода для рендеринга ответа JSON от Play. renderJSON и renderJSON2.
Допустим, я делаю запрос GET/студентам
В моем проекте этот запрос должен возвращать массив студентов, это может быть один студент или многие из них. Дело в том, что в конце концов я делаю что-то вроде этого
renderJSON(studentList)
И studentList - это java.utils.List. Так что json, который я получаю в интерфейсе, это что-то вроде этого.
{
paging: {
total: 2
}-
results: [2]
0: {
id: "33333333"
email: "[email protected]"
name: "Bob"
}-
1: {
id: "444444444"
email: "[email protected]"
name: "Jhon"
}-
-
}
Как вы можете видеть, то, что rednerJSON делает здесь, состоит в том, чтобы поместить список учеников внутри объекта, который имеет свойства "подкачки" и "результаты", где результаты на самом деле я хочу.
Теперь, с другой стороны, существует другой метод, называемый renderJSON2, который я тестировал, и в этом же случае дает мне этот результат.
[1]
0: {
id: "33333333"
email: "[email protected]"
name: "Bob"
}
[2]
0: {
id: "444444444"
email: "[email protected]"
name: "Jhon"
}
Как вы можете видеть с помощью этого метода, я получаю список простых учеников как ответ, не встраиваемый в другой объект.
Мой вопрос пришел, когда я начал использовать модуль Restangular совместно с AngularJs, потому что у restangular есть специальные методы для создания вызовов api, которые возвращают один единственный объект или коллекцию объектов. Вы даже получаете сообщение об ошибке из-за рестатулярности в консоли браузера, если он ожидает один объект и получает коллекцию или наоборот.
Поэтому, если я использую только renderJSON(), тогда я бы не стал лучшим из рестанглярного, так как это дает мне прямой способ получить и привязать коллекцию объектов к моей модели angularJs. Это заставляет меня думать, что в случае методов api, которые всегда возвращают коллекции, я должен использовать renderJSON2. Единственное, что заставляет меня хотеть использовать renderJSON, - это то, что атрибут "подкачки" полезен при ограничении результатов ответа.
Каков наилучший способ справиться с этим? Должен ли я использовать renderJSON во всех случаях и, возможно, даже останавливать использование restangular или использовать оба метода render в зависимости от метода api? Есть ли для этого стандарт?
Спасибо заранее и извините за длинный пост.
Вероятно, вам нужно использовать renderJSON и добавить ответный перехватчик в ретрансляционный провайдер, чтобы развернуть полученный объект и сохранить данные разбивки на страницы:
results
должны быть массивом, а не одним большим объектом