POSTを繰り返すと、投稿されたものと同じオブジェクトが応答することが予想されます。
これは、タイプコピー定義ではっきりとわかります。タイプのオブジェクトを受け取るメソッドがあり、それをhttp://whatever/api/objects
のようなURLにPOSTする予定のメソッドがあるとします。 REST APIが同じか異なることができるレスポンスオブジェクトを持つ201とjsonを返したとします。我々の場合、返される型はITypeB
とする。 次に、標準的なのPOSTを使用することができず、ITypeB
の応答を期待するので、restangularはITypeA
(投稿されたものと同じ)の応答を受け取ると予想されるため、次のコードは正しくありません。上記のコードは次のように正しいだろうので、customPOSTを使用して解決することができ
public postAnObject(objectToPost: models.ITypeA): ng.IPromise<models.ITypeB> {
return this.restangular.all("objects")
.post<models.ITypeA>(objectToPost)
.then((responseObject: models.ITypeB) => {
return responseObject;
}, (restangularError: any) => {
throw "Error adding object. Status: " + restangularError.status;
});
}
:
public postAnObject(objectToPost: models.ITypeA): ng.IPromise<models.ITypeB> {
return this.restangular.all("objects")
.customPOST(objectToPost)
.then((restangularizedObjectTypeB: restangular.IElement) => {
return restangularizedObjectTypeB.plain();
}, (restangularError: any) => {
throw "Error adding object. Status: " + restangularError.status;
});
}
注目すべきいくつかのことを要約すると、あります
- Restangle can 成功したコールバックで応答オブジェクトを取得(
then
部分)
.post(objectA)
メソッドを使用している場合は、objectAと同じタイプの応答を持つ成功したコールバックがあると想定します(存在する場合)。
- あなたが
.customPOST(objectA)
- 重要な方法使用をObjectAを投稿したが、応答をObjectB(異なる種類)を取得したい場合は、次の応答は実際には「本物の」応答オブジェクトをラップ「restangularized」オブジェクトです。つまり、応答にはいくつかの奇妙な方法が含まれています。あなたは、単に応答が実際に
ITypeB
オブジェクトではなく、restangular.IElement
私の第二の例に示すように、応答オブジェクトが応答にメソッド
.plain()
を呼び出したい場合は、それは実際の応答だあなたは確かにありますか? 送信されたものとは異なるデータを返すAPIエンドポイントがあります。 promisse上の 私は 'post'で送られたものと同じデータを得ています。 –ねえ。実際、すべてのサーバレスポンスにRestangularメソッドが追加されています。それはそれをすばらしくするものの一部です。受け取ったすべてのオブジェクトは、Restangularで使用できるように強化されています。あなたの投稿が実際にサーバーから何も返さない場合は、私が実際に投稿した同じオブジェクトを返すので、何かを得ることができます。したがって、投稿しているデータとまったく同じデータを取得している場合は、サーバーからデータを戻していることを確認して[OK]をクリックします。 – mgonto
私は、apiが受け取ったものとは異なるフォーマットでデータを返すので、これに気付きました。例: '{'category': 'asd'}'を受け取り、 '{category:{id:1、name: 'asd'}'を返します。それはngResourceで働いていましたが、私がrestangularに移動したときに、応答は '{'category': 'asd'}'となって壊れました。 –