3

バックエンドで REST API を使用し、フロントエンドでバックボーン Web アプリを使用して複雑なクエリを作成する方法を完全には理解していません。userテーブルとの関係を持つテーブルがあるとしuser_groupます:

user.group_ref => user_group.id

GETonを実行すると、次の/api/v1/user/1/?format=jsonようになりSELECT * FROM users WHERE id = 1ます。よし、よし、さて…どこですぐにデータにアクセスできるようにしJOINたいのならどうだ。そのデータを取得するために余分なクエリを実行したくありません。user_groupuser.group_ref = user_group.iduser_group

たぶん、私は全体の考えを間違っていました...もっと簡単な方法はありますか?

4

3 に答える 3

1

REST は一連の規則です。自動クエリ マッピングは提供されないため、サービス エンドポイントを定義してから、必要なものを返すように実装する必要があります。

あなたの場合、URL を構成する典型的な方法は次のようになります。

GET /groups/(groupid)/users

つまり、「このグループに属するすべてのユーザーを教えてください」ということです。または:

GET /users?group=(groupid)

どちらのスタイルは「RESTful」ではありませんが、グループをトップレベルのリソースとして不必要に昇格させません。

いずれにせよ、バックボーンは、より複雑なリソースからコレクションを生成するための 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

slumber ( http://slumber.in/ ) と呼ばれる Python ライブラリがあり、REST API の明示的な目的のためにリクエストの上に構築されています。

于 2013-01-29T17:31:47.203 に答える
0

REST API は、フロント エンドとは関係なく個別に実装でき、必要に応じて設計できます。

あなたの場合、常にユーザーのクエリで user_group.id を取得する場合は、SQL を JOIN ステートメントに永続的に変更する必要があります。SELECT * FROM users WHERE id = 1 JOIN user_group WHERE user.group_ref=user_group. ID。

user_group 情報を含むクエリと含まないクエリの両方が必要な場合。グループ情報がない場合は (GET /api/v1/user/1?format=json)、グループ情報がある場合は (GET /api/v1/userwithgroup/1?format=json) の 2 つの REST メソッドを設計できます。 .

バックボーンでは、2 つのモデルを表す 2 つの異なるモデルを使用できます。

テーブルに何百万人ものユーザーがいない場合、グループ情報を含む SQL は非常に高速であり、常にグループ情報を持っている方が簡単です。

于 2013-01-29T17:30:34.103 に答える