我不完全了解如何在后端使用REST API和在前端使用主干Web应用程序进行复杂的查询。假设我有一个user表,该表与user_group表有关系:

user.group_ref => user_group.id

如果我在GET上执行/api/v1/user/1/?format=json,它将执行类似SELECT * FROM users WHERE id = 1的操作。对,好的,现在...如果我想用自己的JOIN进行user_group怎么办,其中user.group_ref = user_group.id可立即访问user_group上的数据。我不想做额外的查询去获取该数据。

也许我把整个想法弄错了……有没有更简单的方法?

最佳答案

REST是一组约定。它不提供自动查询映射,因此您需要定义一个服务端点,然后实现它以返回想要的任何内容。

在您的情况下,构成URL的典型方式如下:

GET /groups/(groupid)/users

就是说“给我所有属于该组的用户”。或者:
GET /users?group=(groupid)

样式上的样式不太“RESTful”,但不必不必要地将组提升为顶级资源。

无论哪种方式,Backbone都不提供OOTB方式来填充来自更复杂资源的集合。对于除简单CRUD之外的任何内容,您都必须自己实现该服务,或者使用映射到您的服务的url创建一个单独的只读集合。就像是:
var UserGroupCollection = Backbone.Collection.extend({
  url: function() { return "groups/" + this.options.groupId + "/users"; }
});

var group = new UserGroupCollection({groupId:1});
group.fetch();

关于django - 带有复杂查询的REST API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14588452/

10-11 23:57
查看更多