これらの URI のうち、POST を受信する (製品を追加する) のに「適している」のはどれですか? 利用可能なベストプラクティスはありますか、それとも個人的な好みですか?
/製品/ (単数)
また
/製品/ (複数)
現在、単一の製品の/products/?query=blah
検索と/product/{productId}/
GET、PUT、および DELETE に使用しています。
これらの URI のうち、POST を受信する (製品を追加する) のに「適している」のはどれですか? 利用可能なベストプラクティスはありますか、それとも個人的な好みですか?
/製品/ (単数)
また
/製品/ (複数)
現在、単一の製品の/products/?query=blah
検索と/product/{productId}/
GET、PUT、および DELETE に使用しています。
RESTful 設計では、新しいリソースの作成に関していくつかのパターンがあります。どのパターンを選択するかは、新しく作成されたリソースの URL を誰が選択するかによって大きく異なります。
クライアントが URL を選択する責任がある場合、クライアントはリソースの URL に PUT する必要があります。対照的に、サーバーがリソースの URL を担当する場合、クライアントは「ファクトリー」リソースに POST する必要があります。通常、ファクトリ リソースは、作成されるリソースの親リソースであり、通常は複数形のコレクションです。
したがって、あなたの場合、使用することをお勧めします/products
1 つのもの、つまり 1 つの PRODUCT を POST または GET します。
特定の製品なしで (またはクエリ基準を使用して) GET する場合があります。しかし、あなたはまだ単数形でそれを言います.
複数形の名前を使用することはめったにありません。コレクション (製品のカタログ) がある場合、それは 1 つのカタログです。
私は単数形にのみ投稿し/product
ます。2 つの URL を混同して、混乱したり間違えたりするのは簡単です。
それらすべてに同じ URL を使用し、MessageContext を使用して、Web サービスの呼び出し元が実行したいアクションのタイプを判別できます。言語は指定されていませんが、Java では次のようなことができます。
WebServiceContext ws_ctx;
MessageContext ctx = ws_ctx.getMessageContext();
String action = (String)ctx.get(MessageContext.HTTP_REQUEST_METHOD);
if(action.equals("GET")
// do something
else if(action.equals("POST")
// do something
これにより、Web サービスに送信されたリクエストのタイプを確認し、リクエスト メソッドに基づいて適切なアクションを実行できます。