2016-03-31 7 views
2

/usersにAPIエンドポイントがあり、もう1つが/carsにあるとします。当然のことながら、いずれかのユーザーにGETリクエストを送信すると、すべてのユーザーまたは車が利用可能になります。今、GET /users/74/carsは、ユーザー74に属するすべての車を返す必要があります。Restrictionを使用して特定の親のないリクエストを正しく実行するにはどうすればよいですか?

私のアプリは車だけでなく、多くのモデルが/shops/34/cars/mechanics/12/carsのように存在します。簡単にするために、すべてのPUT/PATCHリクエストをメインの/carsエンドポイントに送信したいと思います。

保存を実行する瞬間、Restangularは、デフォルトでアイテムがロードされたエンドポイントにPUT要求を行います。しかし、その終点は存在しません。

また、URLの最初の部分を破棄する素晴らしいRestangular.setParentless(['cars'])メソッドを提供します。しかし、私はこれをグローバルに行うのではなく、特に特定の要素に対して行うことを望んでいます。

neatestは実際にはグローバルに行いますが、特定のメソッド(Restangular.setParentless(['cars'], ['PUT'])など)に制限します。

そのようなものは何ですか?または私はそれをovercomplicatingですか?

は、これまでのところ、私は好きではないものを試してみました:

delete car.parentResource; 
+0

解決しましたか? – fracz

+0

変更していません。私は要素を複製し、 'parentResource'を削除して操作を実行します。醜い。 – Mauro

答えて

2

私はusing self reference linksをお勧めします。自己参照リンクは、引っ張られたURLではなく、項目にGET/PUT/DELETEなどに使用されるべきルートを格納するリンクです。各オブジェクトの「自己」と呼ばれる自己リンクプロパティを探すためにRestangularを設定し、

まず:

例、ユーザーID 74の車の1台の走行距離を更新します。

RestangularProvider.setRestangularFields({ 
    selfLink: 'self' 
}); 

次は、車を取得するために電話をかけてください。ここでは、APIのエンドポイントが適切なURLを持つ各オブジェクトに、「self」というプロパティを返すようにAPIを変更したと仮定します。

GET /users/74/cars 

[ 
    { 
    "id": 12, 
    "model": "Camaro", 
    "make": "Chevrolet", 
    "year": 1969, 
    "color": "red", 
    "odometer": 67294, 
    "license": "ABC12345", 
    "self": "/cars/12" 
    }, 
    { 
    "id": 14, 
    "model": "Gallardo", 
    "make": "Lamborghini", 
    "year": 2015, 
    "color": "black", 
    "odometer": 521, 
    "license": "XYZ34567", 
    "self": "/cars/14" 
    } 
] 

これらのうちの1つに何マイルか追加して保存します。 PUT/cars/14代わりの/users/74/cars/14に行きます

Restangular.one('users', 74).all('cars').getList().then(function(cars){ 
    cars[1].odometer = 613; 
    cars[1].put(); 
}); 

:全体Restangularコードは次のようになります。これは、モデルを厳密な階層ツリーではなくグラフとして関連付けるようなアプリケーションに非常に便利です。

+0

ああ、いいですね。しかし、私はこのために自分のAPIを変更しなければならないという事実は気に入らない。私は3つのプロジェクトでこの問題を抱えていますが、そのうちの1つではAPIを変更できません。私はあなたの答えは2/3rds右だと思っています。 – Mauro

関連する問題