そのREST APIは本当にRPCですか?ロイ・フィールディングはそう考えるようです
RESTについて私が知っていると思っていたものの多くは明らかに間違っている-そして私は一人ではない。この質問には長い導入がありますが、情報が少しばらばらなので、必要なようです。このトピックにすでに精通している場合は、実際の質問が最後に来ます。 Roy FieldingのREST APIの最初の段落はハイパーテキスト駆動である必要があることから、彼の仕事が広く誤解されていると彼が信じていることは明らかです。 HTTPベースのインターフェースをREST APIと呼ぶ人々の数に不満を感じています。今日の例はSocialSite REST APIです。それがRPCです。それはRPCを叫びます。ディスプレイには非常に多くのカップリングがあるため、Xレーティングを指定する必要があります。 フィールディングでは、REST APIのいくつかの属性をリストします。それらのいくつかは、SOや他のフォーラムでの一般的な慣行と一般的なアドバイスの両方に反対するようです。例えば: REST APIは、最初のURI(ブックマーク)と、対象とするオーディエンスに適した標準化されたメディアタイプのセット(APIを使用する可能性のあるすべてのクライアントによって理解されることが期待される)以外の事前知識なしで入力する必要があります。... REST APIは、固定リソース名または階層(クライアントとサーバーの明らかな結合)を定義してはなりません。... REST APIは、リソースの表現とアプリケーションの状態の駆動に使用されるメディアタイプの定義、または既存の標準メディアタイプの拡張リレーション名やハイパーテキスト対応マークアップの定義に、ほとんどすべての記述的努力を費やすべきです。... 「ハイパーテキスト」のアイデアは中心的な役割を果たします。URI構造やHTTP動詞の意味よりもはるかに重要です。「ハイパーテキスト」は、コメントの1つで定義されています。 私が[フィールディング]とハイパーテキストを言うとき、それは情報とコントロールの同時の提示を意味し、情報はユーザー(またはオートマトン)が選択肢を取得してアクションを選択するためのアフォーダンスになるようにします。ハイパーメディアは、メディアストリーム内に一時的なアンカーを含めるというテキストの意味を拡張したものです。ほとんどの研究者は区別を落としました。 ブラウザでハイパーテキストをHTMLにする必要はありません。マシンは、データ形式と関係タイプを理解すると、リンクをたどることができます。 私はこの時点で推測していますが、上記の最初の2つのポイントは、次のようなFooリソースのAPIドキュメントは、クライアントとサーバー間の密結合につながり、RESTfulシステムには場所がないことを示唆しているようです。 GET /foos/{id} # read a Foo POST /foos/{id} # create a Foo PUT /foos/{id} # update a Foo 代わりに、エージェントは、/ foosに対してGETリクエストを発行するなどして、すべてのFoosのURIを検出するように強制する必要があります。(これらのURIは、上記のパターンに従うことが判明する可能性がありますが、それはポイントの横にあります。)応答は、各アイテムへのアクセス方法とそれで実行できることを伝えることができるメディアタイプを使用し、上記の3番目のポイントをもたらします。 。このため、APIドキュメントでは、応答に含まれるハイパーテキストを解釈する方法の説明に重点を置く必要があります。 さらに、FooリソースへのURIが要求されるたびに、応答には、エージェントがURIを介して関連リソースや親リソースにアクセスしたり、作成後にアクションを実行したりするなどの方法を発見するために必要なすべての情報が含まれます/リソースの削除。 システム全体の鍵は、応答がメディアタイプに含まれるハイパーテキストで構成され、それ自体がエージェントに処理のオプションを伝えることです。これは、ブラウザが人間に対して機能する方法と同じです。 しかし、これは現時点での私の推測です。 フィールディングはフォローアップを投稿し、彼の議論はあまりに抽象的で、例が不足しており、専門用語が豊富であるという批判に応えました。 他のものは、私が書いたものをより直接的に、または今日のいくつかの実際的な懸念に適用できる方法で解読しようとします。次のトピックに取り組んでいる、会議の準備をしている、別の標準を書いている、遠く離れた場所に旅行している、または給料を稼いだと感じさせるちょっとしたことをしているので忙しくないので、おそらくそうしません。 それで、実用的な考え方を持つRESTエキスパートへの2つの簡単な質問:Fieldingが言っていることをどのように解釈し、REST APIを文書化/実装するときにそれをどのように実践しますか? 編集:この質問は、話している内容の名前がないと、何かを学ぶのがどれほど難しいかを示す例です。この場合の名前は、「アプリケーション状態のエンジンとしてのハイパーメディア」(HATEOAS)です。