私は RESTful API の設計と実装を依頼され、ベスト プラクティスを調査してきましたが、これまでのところ、リソース表現についてはお粗末な概念しかありません。私が見つけた利用可能な例のほとんどは、一連の GET を使用して接続された構造をたどる API クライアントに重点を置いているようです。
私は見ました:
http://www.restapitutorial.com/media/RESTful_Best_Practices-v1_1.pdf
http://www.youtube.com/watch?v=HW9wWZHWhnI
他のオンライン リソースの中でも (2 つのリンクに限定されているため、すべてをリストすることはできません)。それらはすべて素晴らしいですが、私の設計上の質問には実際には対応していません。
ほとんどのベスト プラクティス ドキュメントは、私には少し矛盾しているように見える 2 つのことを示唆しています。
1) REST サービスは、リソース間のリンクとしてデータ関係を表す必要があります
2) クライアントからの「PUT」リクエストは、サーバー上で見られる表現と同じ形式の完全な表現でなければなりません。
私の観点からの問題は、リンク、およびおそらく典型的なリソースの他のかなりの数のプロパティが読み取り専用であるため、更新できないことです。サーバーは、クライアントがそれらを更新しようとしていると判断した場合は、エラーを返します。実際、JSON で表現された典型的なリソースを見ると、その大部分は、論理的に置き換えられない/置き換えられないデータです。例えば
{
"link": { "rel":"self", "href":"http://example/project/12345" },
"team": {
"link": { "rel":"self", "href":"http://example/project/12345/team" },
"title": "The project team"
},
"title": "The Big Project"
}
ここでは、せいぜい 2 つのタイトル テキストだけがこのリソースでクライアントに書き込み可能です (チーム メンバーシップはチーム リンクを介して変更できる場合があります)。
したがって、PUT にすべての「リンク」要素をそのまま正確に含めることを要求する必要があります。これは純粋に論理的で読み取り専用です (この例では、リソースがチームとして定義しているため、チームは再リンクできないことに注意してください)。プロジェクトの場合 - この場合は変更できますが、コンテナシップがより厳格な多くのリソース タイプには適用されません)。
多くのリンクを持つ REST でリソースを表すための標準パターンまたはアンチパターンはありますか? HATEOAS などの特定の REST バリアントを求められているわけではありませんが、可能であれば理論的な「正確さ」を目指す傾向があります。言い換えれば、「公式の」REST が、クライアントがリソース全体、リンク、およびすべてを PUT することを期待する場合、それはおそらく私が行うことです。
GET および PUT をサポートし、したがってこの問題に対処する必要がある現実世界の複雑な非リーフ REST リソースの例をいくつか挙げていただければ幸いです。検索すると、多くの意見が得られ、GET がいかにうまく機能するかを示す多くの例が得られます。. . しかし、これまでのところ、些細なリーフ リソース (つまり、おそらく自己参照を除いてリンクを含まないリソース) 以外への PUT を示す十分に文書化された例を見たことがありません。