APIリクエストの基礎から実務運用まで完全解説(REST・GraphQL・gRPC対応)
APIリクエストとは何か — 概要
APIリクエスト(API request)は、ソフトウェアやサービスが別のソフトウェアやサービスに機能を依頼するための呼び出し(要求)です。特にWeb APIの場合は、HTTP/HTTPSプロトコルを使ってリクエストを送信し、サーバーがレスポンスを返すことでデータ取得や操作を行います。APIリクエストは、現代の分散システムやマイクロサービス、モバイル/フロントエンドとバックエンドの連携において基本的な構成要素です。
APIリクエストの基本構造
一般的なHTTPベースのAPIリクエストは次の要素で構成されます。
- リクエストライン(メソッド、URL、HTTPバージョン)
- ヘッダー(Content-Type、Authorization、Acceptなど)
- (任意)ボディ(JSON、XML、フォームデータなど)
- クエリパラメータやパスパラメータ(URL内または末尾に付与)
例:GET /users/123?fields=name,email HTTP/1.1 といった形式で、HTTPメソッドとエンドポイント(URLパス)で操作対象を指定します。
HTTPメソッドの意味と使い分け
- GET:リソースの取得。安全(副作用なし)かつ冪等(同じリクエストを何度送っても結果は同等)であることが期待される。
- POST:リソースの作成や処理の実行。一般に非冪等(複数回実行されると複数のリソースが作成されるなど)。
- PUT:リソースの完全置換や作成(指定したリソースを上書き)。冪等であるべき。
- PATCH:リソースの部分更新。冪等とは限らないが、設計次第で冪等にできる。
- DELETE:リソースの削除。冪等の性質を持つのが望ましい(同じ削除を複数回しても結果は同じ)。
リクエストとレスポンスのステータスコード
サーバーはHTTPステータスコードで結果を表現します。代表的なカテゴリ:
- 2xx:成功(200 OK、201 Createdなど)
- 3xx:リダイレクト(301、302)
- 4xx:クライアントエラー(400 Bad Request、401 Unauthorized、403 Forbidden、404 Not Found、429 Too Many Requests)
- 5xx:サーバーエラー(500 Internal Server Error、503 Service Unavailable)
API設計では、適切なステータスコードとエラーボディ(エラーコード、メッセージ、追跡IDなど)を返すことが重要です。
データ形式とヘッダー
一般的なコンテンツタイプ:
- application/json:最も一般的なAPIボディ形式(JSON)。
- application/xml / text/xml:SOAPや古いAPIで使用。
- application/x-www-form-urlencoded:HTMLフォームの送信形式。
- multipart/form-data:ファイルアップロードなどに使用。
典型的なヘッダー:Authorization(認証情報)、Content-Type(送信データの種類)、Accept(受け取り可能なフォーマット)、Cache-Control、If-None-Match(ETagを使った条件付きリクエスト)など。
認証と認可
APIでの代表的な認証方式:
- APIキー:簡便だが漏洩リスクがあるため送信はHTTPS必須、最小権限とローテーションを推奨。
- Basic認証:ユーザー名とパスワードをBase64で送る。HTTPS必須で、通常は推奨されない(代替としてトークン使用)。
- OAuth 2.0:外部アプリによるアクセスやスコープ管理に広く使われる(認可コードフロー、client_credentials等)。
- JWT(JSON Web Token):認証後に署名済みトークンを用いる方式。自己完結的にクレームを含められる。
認可(どの操作が許可されるか)は認証とは別に設計する必要があり、スコープやロールベースアクセス制御(RBAC)を活用します。
セキュリティ上の留意点
- 常にTLS(HTTPS)を使用して通信の機密性と整合性を確保する。
- 入力値検証(SQLインジェクション、XSS等)と出力エスケープを行う。
- 認証情報は適切に保護し、最小権限の原則を適用する。
- レートリミットと異常検知(ブルートフォース防止など)を導入する。
- 敏感情報(パスワード、クレジットカード番号等)はログに残さない。
- CORS(クロスオリジンリソース共有)はブラウザクライアントの安全のための設定であり、必要最小限のオリジン許可を行う。
- OWASP API Security Top 10などのガイドラインに従う。
APIスタイル比較(REST、GraphQL、gRPC、SOAP)
- REST:リソース指向、HTTPのメソッドとステータスを活用。シンプルで広く採用。URI設計・ステートレス性が鍵。
- GraphQL:クライアントが必要なデータを1回のリクエストで取得できる。複雑なクエリや複数リソースのまとめ取得に有利だが、キャッシュや過剰クエリ防止の設計が必要。
- gRPC:高速なバイナリプロトコル(HTTP/2を利用)で、低レイテンシや双方向ストリーミングが得意。主にサービス間通信。
- SOAP:XMLベースの標準。トランザクションや厳格な仕様が必要なレガシーシステムで使われる。
実務での運用上のポイント
API運用で重視すべき点:
- バージョニング:後方互換性を壊さないためにバージョン付け(URIに/v1/、ヘッダー、メディアタイプ等)を検討する。
- レートリミットとスロットリング:過負荷や乱用を防ぐ(Token BucketやLeaky Bucketアルゴリズムなど)。
- 監視:レイテンシ、エラー率、スループット、リクエスト/レスポンスサイズをモニタリング。
- トレーシング:分散トレーシング(OpenTelemetry等)でリクエストの経路を追跡。
- エラーハンドリング:一貫したエラーフォーマットとリトライ可能/不可判定を提供。
- テスト:ユニット、統合、契約テスト(Consumer-Driven Contract Testing)を導入。
- ドキュメント:OpenAPI(Swagger)やGraphQLスキーマで自動生成可能なドキュメントを用意。
エラー処理とリトライ戦略
クライアント側では、どのエラーがリトライ可能かを識別する必要があります。一般的には:
- 4xx系は基本的にクライアントの問題(認証やリクエスト構文)なのでリトライ不要。ただし429(Too Many Requests)は遅延後に再試行可能。
- 5xx系はサーバー側の問題なので、エクスポネンシャルバックオフ+ジッターを付けて再試行するのが一般的。
重要なのは、冪等性(idempotency)を保証するためにPOST操作に対してidempotency keyを受け付けるなどの仕組みを用意することです。
パフォーマンスと最適化
- レスポンスの圧縮(gzip、brotli)や適切なキャッシュ制御(Cache-Control、ETag)を設定する。
- ページネーションやフィールド選択(fieldsパラメータ)を用いて必要最小限のデータを返す。
- バッチ処理や非同期API(ジョブキュー、Webhook)で重い処理を切り離す。
- APIゲートウェイやCDNを利用してスケーラビリティとセキュリティを改善する。
実践例:簡単なJSON APIリクエスト(curl)
ユーザー作成の例:
<code>curl -X POST "https://api.example.com/v1/users" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-d '{"name":"山田太郎","email":"taro@example.com"}'</code>成功時に201 Createdと作成されたリソースのJSONを返す、等が典型的です。
ドキュメント化と開発者体験(DX)
良いAPIはドキュメントが充実していることが重要です。OpenAPI仕様でエンドポイント、スキーマ、サンプル、認証方法を定義し、SDKやコード例を提供すると開発者の採用率が高まります。APIコンソールやPostmanコレクションを用意するのも有効です。
まとめ
APIリクエストは、サービス間通信の基礎であり、正確なHTTP理解、適切な認証・セキュリティ設計、エラーハンドリング、パフォーマンス対策、ドキュメント化が不可欠です。用途に応じてREST、GraphQL、gRPCなどの方式を選び、運用での監視・バージョニング・レート制御を設計することで、堅牢で使いやすいAPIを提供できます。
参考文献
- MDN Web Docs — HTTPの概要(日本語)
- MDN Web Docs — HTTPメソッド(日本語)
- MDN Web Docs — HTTPステータスコード(日本語)
- RFC 9110 — HTTP Semantics
- OpenAPI Specification(v3)
- GraphQL(公式)
- OWASP API Security Project
- W3C — SOAP 1.2(仕様)


