私はRESTの原則にかなりよく知っているし、関連する論文、Wikipediaのエントリ、ブログ記事の束と被写体上のStackOverflowの質問を読んでいるが、それでも一般的な場合には簡単な答え見つけていない:読み取り専用と編集可能なリソースをRESTスタイルで取得するにはどうすればよいですか?
を私は表示するリソースを要求する必要があります。リソースの状態に応じて、私は読み込み専用か編集可能な表現のどちらかをレンダリングする必要があります。どちらの場合でも、私はリソースを取得する必要があります。読み取り専用または編集可能なバージョンを取得するURLを作成するにはどうすればよいですか?
私のユーザーがGET /resource/<id>
へのリンクをたどっている場合は、読者のみが読み込み専用の表現を必要としていることを示すだけで十分です。しかし、編集可能なフォームをサーバーに置く必要がある場合、そのURLはどのように見えますか? GET /resource/<id>/edit
は明らかですが、URLに動詞が含まれています。 GET /resource/<id>/editable
にそれを変更することで、この問題は解決されていますが、見た目は明らかに表面的なレベルです。動詞を形容詞に変えることがすべてあるのでしょうか?
代わりにPOSTを使用して編集可能なバージョンを取得する場合、最初に取得したPOSTと保存しているPOSTを区別するにはどうすればよいですか? POSTを使用する私の(弱い)言い訳は、編集可能なバージョンを取得するとサーバーの状態が変わるということです:リソースをロックします。しかし、それは私の要求がそのようなロックを実装する必要がある場合にのみ成立します。常にそうであるとは限りません。同じ理由でPUTが失敗します。また、実行中のWebサーバーでPUTがデフォルトで有効になっていないため、使用しない実用的な理由(およびDELETE)があります。
編集可能な状態であっても、まだ変更を加えていないことに注意してください。おそらく私がリソースをWebサーバーに再度提出すると、私はそれをPOSTします。しかし、私が後でPOSTできる何かを得るためには、サーバーは最初にに対応しなければなりません。
私は別のアプローチは、コレクションレベルで別々のリソース持っているだろうと思います: GET /read-only/resource/<id>
とGET /editable/resource/<id>
またはGET /resource/read-only/<id>
とGET /resource/editable/<id>
を...しかし、それは私にはかなり見苦しいです。
思考?
re#2、私はそれについてかなり訓練されています。私は、POSTとGETを通じてすべての読み取り要求を介してすべての状態変更要求を送信します。 PUTまたはDELETEを使用するのは現実的ではありません。違いについての良い点。リソースとドメインobj。私は、リソースを特定の状態のオブジェクトの要求と考える傾向があります。 – Val