REST APIの場合、それはすべてあなたの視点の問題であることを覚えておいてください。
REST APIの2つの主要な概念は、エンドポイントとリソース(エンティティ)です。大まかに言えば、エンドポイントはGETを介してリソースを返すか、POSTやPUTなどを介してリソースを受け入れます(または上記の組み合わせ)。
POSTでは、送信したデータによって、新しいリソースとそれに関連付けられたエンドポイントが作成される場合とされない場合があります。これらは、POSTされたURLで「ライブ」ではない可能性が高いです。言い換えると、POSTするとき、処理するためにどこかにデータを送信します。POSTエンドポイントは、リソースが通常見つかる場所ではありません。
RFC 2616からの引用(無関係な部分は省略し、関連する部分は強調表示):
9.5投稿
POSTメソッドを使用して、オリジンサーバーがリクエストに含まれるエンティティを、Request-LineのRequest-URIで識別されるリソースの新しい下位として受け入れることをリクエストします。POSTは、以下の機能をカバーする統一された方法を可能にするように設計されています。
- ...
- フォームの送信結果などのデータブロックをデータ処理プロセスに提供する。
- ...
...
POSTメソッドによって実行されるアクションは、URIで識別できるリソースにならない場合があります。この場合、応答に結果を説明するエンティティが含まれているかどうかに応じて、200(OK)または204(コンテンツなし)が適切な応答ステータスです。です。
オリジンサーバーでリソースが作成されている場合、応答は201(作成済み)である必要があります...
私たちは、ユーザー、メッセージ、本など、問題ドメインが指示するものは何でも、「もの」または「データ」を表すエンドポイントとリソースに慣れてきました。ただし、エンドポイントは、検索結果などの別のリソースを公開することもできます。
次の例を検討してください。
GET /books?author=AUTHOR
POST /books
PUT /books/ID
DELETE /books/ID
これは典型的なREST CRUDです。ただし、追加した場合:
POST /books/search
{
"keywords": "...",
"yearRange": {"from": 1945, "to": 2003},
"genre": "..."
}
このエンドポイントについて、RESTfulなものはありません。リクエストボディの形式でデータ(エンティティ)を受け入れます。そのデータは、他のようなDTOである検索基準です。このエンドポイントは、リクエスト(検索結果)に応答してリソース(エンティティ)を生成します。検索結果リソースは一時的なものであり、リダイレクトなしで、また他の正規URLから公開されることなく、クライアントにすぐに提供されます。
エンティティが本ではないことを除いて、RESTのままです。リクエストエンティティはブック検索条件であり、レスポンスエンティティはブック検索結果です。