Какие варианты существуют для разрешения вложенных ресурсов в ответах ngResource?
Были некоторые связанные вопросы о разрешении конечных точек для вложенного ресурса в ngResource, но этот вопрос касается случаев, когда ответ REST содержит второй ресурс, вложенный в запрашиваемую коллекцию, особенно сопоставления 1-к-1, где у вас не было бы например pets/<id>/owner
как собственный ресурс.
Скажем, есть два ресурса, Pets
и Owners
:
ПОЛУЧИТЬ /домашние животные:
[{
name: 'spark',
type: 'dog',
owner: '/owners/3/' # alternatively just '3' or the full object.
}]
Как разработчик, я иногда хочу запросить ресурс Owner
в целом, иногда я хочу запросить ресурс Pet
, а затем я хочу автоматически преобразовать атрибут owner
в экземпляр ресурса.
Это мое текущее решение:
.factory('Pet', function ($resource, Owner) {
var Pet = $resource('/pets/:id', {id: '@id'});
Pet.prototype.getOwner = function () {
return new Owner(this.owner); // or Owner.get({id: this.owner})
}
return Pet;
})
Проблем тут много. Есть целостность - для одного. Я считаю, что эта реализация позволяет использовать несколько экземпляров одного и того же ресурса. Тогда есть практичность. У вас также есть дополнительные атрибуты для отслеживания (owner
и getOwner()
, а не только owner
; возможно, setOwner
, если вы хотите иметь возможность сохранить модель).
Альтернативное решение может быть построено на transformResponse
, но было бы хаком включать его в каждый ресурс, имеющий вложенное сопоставление.