web-dev-qa-db-ja.com

Restangularの.all()と.one()の違いは何ですか?

これら2つの違いは何ですか?どちらも/ usersにGETを行って取得するようです。

Restangular.one('users').getList().then(function(users) {
    // do something with users
});

Restangular.all('users').getList().then(function(users) {
    // do something with users
});

私はあなたがone( 'users'、123)を実行できることを理解し、/ users/123を取得しますが、2番目の引数がないと同じように見えます。その場合、なぜ1つのメソッドしかありませんか?

34
user2906759

one()関数には、IDを受け入れる2番目の引数があります。 .one('users', 1)

  • one('users', 1).get()は_/users/1_に変換されます
  • all('users').getList()は_/users_に変換されます

all()とは異なり、one()は通常、.getList()で引数なしで使用されません。ただし、.one('users', 1).getList('emails')または.one('users', 1).all('emails').getList()を呼び出す場合は、_/users/1/emails_へのGETリクエストを作成します。

33
lyschoening

私の推測では、彼らはあなたがやろうとしていることの意図を表現するためにそこにいると思います。それらをURLを構築する方法として理解し、リソース全体または特定のリソースにアクセスするかどうかを表現します。

最終的には、ビルドしてGETリクエストを実行しますが、GETを実行して一部のデータを取得するので、そのように使用する必要はありません。

https://github.com/mgonto/restangular/issues/45 から抽出した例

getListは、両方の方法で呼び出すことができます。要素1で呼び出された場合、コレクションを取得するにはサブ要素が必要です。それ以外の場合は、コレクションをフェッチします。したがって、以下は同じです。

Restangular.one('places', 123).getList('venues')        // GET /places/123/venues
Restangular.one('places', 123).all('venues').getList()  // GET /places/123/venues

ご覧のように、one/'places'、123).all( 'venues')を呼び出して、エリア/場所123にある会場のみが必要であることを理解する方が表現力があります。

多分次のURLがあなたを助けるでしょう:

https://github.com/mgonto/restangular/issues/45

8
kitimenpolku

私は最近、これらの方法の違いを発見しました。はい、どちらも同じgetリクエストを作成しますが、得られた結果には驚かれる可能性があります(私を驚かせたように)。

厳密には配列ではなく、次のようなAPIメソッド/ usersがあるとします。

{
   "result": [{...}]
}

したがって、配列は応答オブジェクトのいくつかのプロパティの値として返されます。この場合、get()とgetList()の動作は異なります。このコードはうまく機能します:

Restangular.get('users').then(function (response) {...});

応答を受信すると、応答ハンドラが呼び出されます。しかし、このコードは機能していないようです:

Restangular.all('users').getList().then(function (response) {...});

要求がステータスコード200および空でない応答で完了したにもかかわらず、応答ハンドラは呼び出されません。ブラウザコンソールにエラーは表示されず、ネットワークモニタにリクエストの成功が表示されます。

私はこれをRestangular 1.5.2でテストしたので、おそらくこれは新しいバージョンですでに修正されています。

0
sergio