(申し訳ありませんが、最初の(2)で/ edit /と/ delete /を見逃しました...)
URIの考えはそれがメソッド呼び出しよりむしろアドレス可能なリソースの識別子であるということです。したがって、URIは特定のリソースを指す必要があります。また、URIを尊重する場合は、常に同じリソースを取得する必要があります。
つまり、データベースの行の主キーについて考えるのと同じ方法で、URIについて考える必要があります。何かを一意に識別します:Universal Resource Identifier。
したがって、複数形を使用する場合も単数形を使用する場合も、URIは呼び出しではなく識別子である必要があります。あなたがしようとしていることは、メソッド、すなわち:GET(取得)、PUT(作成/更新)、DELETE(削除)またはPOST(他のすべて)に行きます。
そのため、「/ item / delete / 123」はRESTを中断します。これは、リソースを指していないため、メソッド呼び出しに近いためです。
(また、意味的に、URIを取得し、それが古くなっていると判断し、同じ URIを削除できるようにする必要があります。これは識別子であるためです。GETURIに「/ delete /」がなく、DELETE HTTPセマンティクスに反します。リソースごとに2つ以上のURIをブロードキャストします。
さて、これはごまかしです。リソースとリソースの明確な定義はありません。そのため、RESTの一般的な回避策は、「処理名詞」を定義してURIを指すことです。これはほとんど単語ゲームですが、セマンティクスを満たします。
したがって、たとえば、何らかの理由でこれを実際に使用できなかった場合:
DELETE /items/123
「削除者」処理リソースがあることを世界に宣言して使用することができます
POST /items/deletor { id: 123 }
これは、RPC(リモートプロシージャコール)によく似ていますが、HTTP仕様で指定されているPOST仕様の「データ処理」句の広大な抜け穴に陥ります。
あなたはしかし、それを行うことは一種の例外的であり、かつでき、作成/更新するための共通のPUTを使用して、削除のためのDELETE、およびPOST APPENDのために、作成、および他のすべては、あなたがすべきことは、HTTPのより標準的な使用だから、。しかし、「commit」、「publish」、または「redact」のようなトリッキーなケースがある場合、プロセッサーの名詞を使用するケースはRESTの純粋主義者を満たし、必要なセマンティクスを提供します。
PUT
およびがない場合DELETE
、クエリ文字列で区別せずに、パスに追加することをお勧めします。既存の操作に対するクエリ文字列の変更ではありません。それは別の操作です。