0

我用这两个资源(用tastepie)构建了一个RESTful API:

class PhotographerResource(ModelResource):
    album = fields.ToManyField('core.api.AlbumResource', 'album_set')
    class Meta:
        queryset = Photographer.objects.all()
        resource_name = 'photographer'
        authorization = Authorization()


class AlbumResource(ModelResource):

    artist = fields.ForeignKey(PhotographerResource, 'photographer', full=True)

    class Meta:
        queryset = Album.objects.all()
        resource_name= 'albums'
        authorization = Authorization()

现在,当我访问时,/api/v1/albums/1我得到以下结果:

{
"album": ["/api/v1/albums/4/", "/api/v1/albums/5/"],
"photographer_name": "Jimi Hendrix",
"photographer_thumbnail": "http://upload.wikimedia.org/wikipedia/commons/thumb/0/0d/Katatonia_in_2004.jpg/300px-Katatonia_in_2004.jpg",
"biography": "Jimmi Hendrix is an awesome musician man...",
"id": "1",
"page_link": "http://ahmetkaya.com/",
"resource_uri": "/api/v1/artists/1/",
"slug": "jimi-hendrix"
}

现在在我的前端 Backbonejs 中,当我想获取摄影师的相册时,我必须创建一个album对象,fetch即来自服务器的数据以在视图中呈现它。现在我的问题是,这种方法(向服务器发送许多请求)不会减慢页面的加载速度并对用户体验和应用程序性能产生负面影响吗?有没有更好的方法来设计我的资源之间的关系?save或者,用处理and的 Django 视图替换 RESTful API 是否更好fetch,或者这不是“正确”的做法?我想在学习时遵循约定和最佳实践,但是 Backbonejs 似乎真的没有约定..

谢谢

4

1 回答 1

1

在主干方面,您可以创建一个专辑集合并将其 url 设置为 /api/v1/albums 并在集合上调用 fetch。这将在一个 http 请求中提取所有专辑。如果您需要通过 /api/v1/albums/byname/jonathancoulton 或 /api/v1/albums/bytitle/codemonkey 等方式提供过滤,则 url 也可以是一个函数。如果您经常使用此功能,我还在集合上设置了自定义提取功能

于 2012-07-18T12:50:52.497 回答