RESTful API - gosaaan1/hokulea-garage GitHub Wiki
RESTful APIとは
REST API(Representational State Transfer API)は、Webサービス間の通信を行うための設計スタイルです。
RESTful API設計に関する基本的なポイント
-
リソースの設計: RESTful APIでは、リソース(データのエンティティ)を名詞で表現し動詞は避けるようにします。リソースに対する操作をHTTPメソッド(GET, POST, PUT, DELETE)で表現します。
- 例: ユーザー情報を扱う場合、
/users
エンドポイントを使用します。顧客リソースは /customers、特定の顧客は /customers/5 という風にします。 補足:顧客のIDに推測可能な値(整数の連番)を割り当てるのはセキュリティ上望ましくないらしく、UUIDを使う方が良いとのこと。 - 例: 新しい注文を作成するには POST /orders、既存の注文を更新するには PUT /orders/99 とします。
- 例: ユーザー情報を扱う場合、
-
ステートレス性: RESTful APIはステートレスであるべきです。つまり、各リクエストは独立しており、サーバーはクライアントの状態を保持しません。これにより、スケーラビリティとシンプルさが向上します。
-
HTTPステータスコードの使用: 適切なHTTPステータスコードを使用して、リクエストの結果をクライアントに伝えます。
- 例: 成功したリクエストには200(OK)、リソースが見つからない場合には404(Not Found)を返します。
-
エラーハンドリング: エラーメッセージは明確で詳細なものにし、クライアントが問題を理解しやすいようにします。例えば、バリデーションエラーの場合、どのフィールドが問題なのかを具体的に示します。
これらのポイントを押さえることで、使いやすく、メンテナンスしやすいAPIを設計することができます。
アーキテクチャ
RESTful APIの設計において、フィールディング博士が提唱した要件や制約は以下の通りです:
- クライアント-サーバーアーキテクチャ: クライアントとサーバーを分離し、クライアントはユーザーインターフェースを管理し、サーバーはデータストレージとビジネスロジックを管理します。
- ステートレス: 各リクエストは独立しており、サーバーはクライアントの状態を保持しません。これにより、スケーラビリティが向上します。
- キャッシュ可能: レスポンスはキャッシュ可能であるべきです。適切なキャッシュ制御を行うことで、パフォーマンスが向上します。
- 統一インターフェース: 一貫したインターフェースを提供することで、システムの独立した進化を可能にします。
- 階層システム: システムは階層構造を持ち、各層は他の層の詳細を知らずに機能します。
これらの要件や制約を守ることで、スケーラブルで効率的なWeb APIを設計することができます。