2013-02-14 9 views
9

私はRESTful HATEOAS APIを作成しています。 私はGET、POST、およびPUTする必要がある複合エンティティを持っています。 GETの部分は簡単で、多くの例があります。応答には、エンティティのプリミティブ属性とネストされたエンティティへのリンクが含まれます。たとえば :RESTFul HATEOAS APIでのHTTP POSTリクエスト

{ 
"id":"2", 
"firstName":"Brad", 
"lastName":"Pitt", 
"balance":1234.5, 
"transactions":"http://localhost:8080/jersey-poc/api/v1.1/account/1/transactions", 
"self":"http://localhost:8080/api/v1.1/account/1", 
"accountType":"http://localhost:8080/api/v1.1/account/1/accountType" 
} 

私はアカウントを作成または変更するときに問題が生じます。アカウントをaccountTypeに関連付ける必要があります。私は次のようなPOST要求を送ることができます:{"firstName":"Michael","lastName":"Jackson","balance":300.0,"accountTypeId":5}
しかし、それはHATEOASのパラダイムを破るでしょう。 POST/PUT複合エンティティのベストプラクティスは何ですか?

答えて

4

HATEOASとは異なるペイロードは何もありません。唯一の実際の問題は、accountTypeIdがあまり発見できないということです。 (マジックIDは、短い記述的な文字列にマッピングされる方が良いです;それらを列挙型のように考えてください)HATEOASモデルで作業するときに覚えておくべき重要なことの1つは、ユーザーがPOSTするエンティティは、リソースを作成するエンティティ。それを変更したり、注釈を付けたり、翻訳したりすることができます。それでもという概念的にはと同じである必要がありますが、それはと全く同じです。です。 (IDと作成タイムスタンプを追加すると、拡張が完全に合理的になる方法の優れた例になります)。

私にとって、実際の問題は、 には、クライアントにPOSTを実行する際にその情報を提出するよう指示します。自分自身のPOSTペイロードが特定のスキーマ(XMLスキーマとRELAX NGの両方が制約を記述するために十分に豊富である)に準拠していることをクライアントに簡単に伝えることができるので、ここではXMLをアップロードするのが大好きです。それを行う唯一の方法ではないと確信しています。

+0

ありがとうございました。それはそれを説明する。私は要求と応答が同一でなければならないと確信していました。 –

関連する問題