3

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

user.group_ref => user_group.id

如果我做 a GETon/api/v1/user/1/?format=json它会做类似的事情SELECT * FROM users WHERE id = 1JOIN对,好的,现在......如果我想在user_group哪里user.group_ref = user_group.id立即访问user_group. 我不想进行额外的查询来获取该数据。

也许我的整个想法都错了......有没有更简单的方法?

4

3 回答 3

1

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();
于 2013-01-29T17:34:33.133 回答
0

REST API 可以单独实现,与前端没有任何关系,可以根据需要进行设计。

在您的情况下,如果您总是要通过查询用户获取 user_group.id,那么您应该将您的 SQL 永久更改为 JOIN 语句:SELECT * FROM users WHERE id = 1 JOIN user_group WHERE user.group_ref=user_group。 ID。

如果您需要有和没有用户组信息的查询。您可以设计两种 REST 方法,例如 (GET /api/v1/user/1?format=json) 用于没有组信息,以及 (GET /api/v1/userwithgroup/1?format=json) 用于具有组信息的方法.

在主干上,您可以有两个不同的模型来代表两者。

如果您的表中没有数百万用户,那么带有组信息的 SQL 应该会非常快,并且始终使用组信息会更容易。

于 2013-01-29T17:30:34.103 回答
0

有一个名为 slumbber ( http://slumber.in/ ) 的 python 库,它建立在请求之上,用于 REST API 的明确目的。

于 2013-01-29T17:31:47.203 回答