各状態がハイパーリンクされるべきであるという HATEOAS の原則に従って、リソースの状態を変更するリンクをモデル化する最良の方法は何ですか?
注文の古典的な例を見てみましょう:
{
id : 12,
state: 'pending',
...,
links: [
...,
{
rel: 'cancel',
href: '/orders/12/cancel'
},
...
]
}
「/cancel」の部分にはまったく満足していません。次の内容で「 PUT」リクエストを送信できれば、もっと気分が良くなるでしょう。
{
status:'cancelled'
}
しかし、リンクセクションの「href」属性でそれを表現するにはどうすればよいですか? たとえば、注文のキャンセルは常に可能であるとは限らないため (「完了」状態)、そこで利用可能なアクションを表現したいと思います。
1 つの可能性は、'/orders/12?action=cancel' のような URL を使用することです。これは、RPC アプローチのように感じられ、何かが欠けているように感じます。
おそらく最も見栄えの良い別の可能性は、次のようなリンクを持つことです。
{
rel: 'cancel',
href: '/orders/12/',
type: 'PUT',
values: {
state: 'cancelled'
}
}
この解決策は少し冗長に感じるかもしれません。
それを優雅に処理する方法はありますか?たぶん、誰かがすでに同様の「問題」を解決していますか?