HALでのPOSTリンクの記述方法を教えてください。HATEでのHATEOAS POSTリンク
私はWikipedia's HATEOAS exampleに似HATEOAS制約を持つRESTfulなAPIを設計するが、HAL JSON(明確にするためのスキーム、ホスト、などをドロップ)で表されている:「転送」アクションを実行するには
GET /accounts/12345
{
"id" : 12345,
"balance" : 100.00
"_links" : {
"self" : {
"href" : "/accounts/12345"
},
"transfer" : {
"href" : "/accounts/12345/transfer{?amount,target}",
"templated" : true
}
}
}
クライアントはおそらく次のようになります:
GET /accounts/12345/transfer?amount=100.00,target=54321
{
"id" : 34567,
"amount" : 100.00
"_links" : {
"self" : {
"href" : "/transfers/34567"
},
"source" : {
"href" : "/account/12345"
},
"target" : {
"href" : "/account/54321"
}
}
}
"transfer"リンクをGETで呼び出すと、 "transfers"に新しいressourceが作成されます。しかし、新しいリソースを作成するためにGETを実行することは、冪等ではなく、「間違っている」と感じます。 RESTfulなリソース中心のAPIはPOSTになります。
POST {amount: 10.00, source: 12345, target: 54321} /transfers/
{
"id" : 34567,
"amount" : 100.00
"_links" : {
"self" : {
"href" : "/transfers/34567"
},
"source" : {
"href" : "/account/12345"
},
"target" : {
"href" : "/account/54321"
}
}
}
しかし、どのように私はこのPOSTを説明し、HALで必要なフォーム要素ですので、クライアントは、単にハードコード化されたされずに「正しいこと」を行うことができますか?おそらくのようなもの:
{
"id" : 12345,
"balance" : 100.00
"_links" : {
"self" : {
"href" : "/accounts/12345"
},
"transfer" : {
"href" : "/transfers{?amount,source,target}",
"templated" : true,
"method" : "POST"
}
}
}
しかしmethod
ないHAL specificationの一部と全く類似した識別子がありません - 私は間違ってトラックにだようにそれは感じている...
おそらく、私のクライアントは単に「知っておくべきことtransfer
のGETは一致する転送リソースを返し、transfer
のPOSTは新しい転送リソースを作成します。
FWIW、フォローアップの質問が春HATEOASでこれを表現する方法であるので、私の実装では、春のHATEOASで春ブーツ2を使用しています...