シナリオは、ターン ベースの RPG REST サービスです。ほとんどのゲームはハイパーメディア リソースとしてモデル化できますが、特定のユース ケースで問題が発生しています。アバターがモンスターを攻撃したい。クライアントに終了状態を生成させることはできません。チートを防ぐために、サーバーは、ミスまたはヒットがあるかどうか、およびヒットした場合は、減算するヒット ポイントの数を決定する必要があります。また、信頼性と重複排除も必要です。
公開されたベース URL:
Req:
GET /game
Res:
HTTP/1.1 200
<world>
<link rel="avatars" href="/avatars"/>
<link rel="monsters" href="/monsters"/>
</world>
<link rel="actions" href="/actionqueue"/>
明らかなアバターとモンスター コレクションのリストをスキップします。
Req:
GET /avatars/1
Res:
HTTP/1.1 200
<avatar>
<name>Puck</name>
<health>high</health>
<link rel="weapon" href="/weapon/3">dagger</link>
</avatar>
Req:
GET /monsters/2
Res:
HTTP/1.1 200
<monster>
<type>snake</type>
<health>high</health>
<state>angry</state>
</monster>
メッセージが失われた場合に複製することを気にしないサーバー生成の一意のリソースを取得します。
Req:
POST /actionqueue
<action/>
Res:
HTTP/1.1 201
Location:/actionqueue/1234
冪等アクション メソッド。
Req:
PUT /actionqueue/1234
<action>
<type>attack</type>
<source>
<avatar>1</avatar>
</source>
<target>
<monster>2</monster>
</target>
</action>
Res:
HTTP/1.1 200
<outcome>
<status>success</status>
<updated>
<link rel="monster" href="/monsters/2"/>
</updated>
</outcome>
ここでの質問は、攻撃アクションについてです。私にはRPCのような気がしますが、このようなことをどのように処理しますか? クライアントは状態の変化を事前に知ることができないため、クライアントはサーバーに「何か」を送信して、サーバーが決定した状態の変化を開始する必要があります。より良いテクニックはありますか?これを RESTful な設計と見なしますか?