コンテンツにスキップ

API連携を計画する

第17講 / 全32講読了目安 約45分
  • API連携を要件・画面・システム・運用の四つに分ける方法
  • 認証と認可、APIキー、OAuth等の基本的な違い
  • CORS、レート制限、タイムアウト、再試行の意味
  • 正常時だけでなくエラー・停止・仕様変更を設計する方法
  • テスト環境、SLA、費用、契約、個人情報の確認事項

API連携は「URLへアクセスしてデータを取得する」だけの作業ではありません。

flowchart TD
    B[業務・画面要件] --> S[API仕様]
    S --> A[認証・権限]
    S --> L[件数・速度・利用制限]
    S --> E[エラー・停止時]
    S --> T[テスト環境]
    S --> O[監視・変更管理]
    S --> C[契約・費用・データ]

正常に一度動かすだけなら短期間でも、実運用ではアクセス増加、外部障害、仕様変更、誤入力、二重送信等が起きます。

API連携の見積とスケジュールは、これらをどこまで扱うかで変わります。

最初に業務・画面要件を整理する

Section titled “最初に業務・画面要件を整理する”

API仕様書を読む前に、Webサイト側で必要なことを明確にします。

  • 一覧を表示したい
  • 条件検索したい
  • 詳細を表示したい
  • 申し込みたい
  • 更新したい
  • 状態を確認したい
  • 外部システムへ通知したい
  • 読み込み中
  • 結果
  • 0件
  • 入力エラー
  • 一時的な障害
  • 利用不可
  • 再試行
  • 完了
  • 取消・変更
  • 常に最新
  • 数分遅れてもよい
  • 1日一回でよい
  • 公開時点の情報でよい
  • 申込時だけ再確認する

この整理がないと、APIから取得できる項目を並べただけの画面になります。

APIが存在しても、Webサイトの要件に合うとは限りません。

要件確認例
検索AND・OR、部分一致、並び順、距離検索が可能か
一覧最大件数、ページング、合計件数が返るか
詳細必要項目、関連データ、公開状態が返るか
更新作成・変更・削除が可能か、承認が必要か
最新性更新後いつ取得できるか
多言語言語別項目、フォールバックがあるか
画像サイズ、形式、URL期限、加工機能
履歴更新日時、変更者、監査ログ
個別情報ログイン利用者だけ取得できるか

不足機能をWebサイト側で補えるか、API側改修が必要かを切り分けます。

API側の改修が別会社の場合、見積・スケジュール・責任を分けます。

認証は「誰・どのシステムかを確認すること」、認可は「何をしてよいかを決めること」です。

flowchart LR
    R[APIリクエスト] --> A{認証情報は正しいか}
    A -->|いいえ| X[拒否]
    A -->|はい| P{その操作を許可されているか}
    P -->|いいえ| Y[権限不足]
    P -->|はい| O[処理を実行]

発行された文字列をリクエストへ付け、利用プロジェクト等を識別します。

  • 実装が比較的単純
  • 読み取り専用・書き込み可能等の権限がある場合
  • ブラウザ公開可否を確認
  • 流出時の再発行・無効化が必要
  • 環境ごとに分ける

利用者が外部サービス上で許可し、アクセストークンを使って処理する方式です。

  • 利用者本人のデータへアクセスする連携
  • 有効期限・更新
  • 許可範囲
  • ログアウト・連携解除
  • 同意画面

等の設計が必要です。

サーバー同士で証明書、署名、トークン等を使います。

秘密情報を安全に保存し、定期更新・漏えい時の交換手順を用意します。

APIキーやアカウントには、必要な操作だけを許可します。

記事取得だけのWebサイトに、コンテンツ削除や管理者操作の権限は不要です。

  • 読み取りと書き込みを分ける
  • 本番と検証を分ける
  • 機能ごとにキーを分ける
  • 利用元IP・ドメインを制限する
  • 有効期限・ローテーションを決める
  • 退場者・終了システムの権限を削除する

一つの高権限キーを複数案件・環境で共有すると、影響範囲が大きくなります。

ブラウザには、異なるオリジンへの通信を制限する仕組みがあります。

オリジンは、概念的にはスキーム、ホスト、ポートの組み合わせです。

たとえばWebサイトとAPIのドメインが異なると、API側がそのWebサイトからのアクセスを許可するCORS設定が必要になる場合があります。

sequenceDiagram
    participant B as ブラウザ
    participant A as 別ドメインのAPI

    B->>A: このサイトから呼んでよいか確認
    A-->>B: 許可するオリジン・方法を回答
    alt 許可
        B->>A: APIリクエスト
        A-->>B: レスポンス
    else 不許可
        B-->>B: ブラウザが利用を遮断
    end

CORSエラーは、API自体が停止しているとは限りません。

サーバー同士の通信では成功する一方、ブラウザからだけ失敗することがあります。

CORSは認証の代わりではありません。許可されたオリジンからでも、不正利用への認証・権限・入力検証は必要です。

APIは一定時間内のリクエスト数や、月間利用量を制限することがあります。

  • 1秒あたり
  • 1分あたり
  • 1日あたり
  • 同時接続数
  • 1回の取得件数
  • 月間利用回数
  • データ転送量

制限を超えると、エラー、待機、追加料金等が発生します。

  • キャッシュする
  • 入力のたびではなく確定時に検索する
  • リクエストをまとめる
  • ページングする
  • 再試行間隔を設ける
  • アクセス集中時の上限を見積もる
  • 利用量アラートを設定する

無限スクロール、リアルタイム入力検索、地図移動ごとの検索等は、API呼び出し数を増やします。

画面仕様と利用制限を一緒に設計します。

APIが返るまで無制限に待つと、画面が止まったように見え、サーバー資源も消費します。

一定時間で待機を打ち切るタイムアウトを設定します。

タイムアウト時間は一律ではありません。

  • 検索候補:短い応答が求められる
  • ファイル生成:長くかかる場合がある
  • 決済:結果確認が重要
  • 夜間バッチ:画面操作より長く待てる

タイムアウト後に、処理が本当に失敗したのか、提供側では完了しているのか確認が必要な処理もあります。

一時的な通信エラーでは、再試行で成功する場合があります。

しかし、すべてを無条件に再送してはいけません。

同じ取得を再試行しても、データを重複作成しないため比較的扱いやすいです。

同じリクエストを再送すると、二重登録・二重決済になる可能性があります。

重複を防ぐ識別子や、処理結果を照会するAPIが必要です。

flowchart TD
    A[登録APIを送信] --> B{応答を受信したか}
    B -->|はい| C[結果を表示]
    B -->|いいえ| D{提供側で処理済みか確認できるか}
    D -->|はい| E[状態照会]
    D -->|いいえ| F[手動確認・安全な再送設計]

PMは「再試行するか」だけでなく、「再試行して安全な処理か」を確認します。

APIはHTTPステータスや独自エラーコードで結果を返します。

大きくは次のように考えられます。

分類概要画面・運用例
成功処理完了結果を表示
入力・権限エラー要求内容や認証に問題入力修正、再ログイン
見つからない対象がない0件・404表示
利用制限回数・容量超過待機、案内、運用通知
提供側エラーAPI内部の問題代替表示、再試行、連絡
タイムアウト規定時間内に応答なし再試行・状態確認

利用者へ技術的なエラー全文や秘密情報を表示しません。

運用ログには調査に必要な識別子・時刻・対象・エラー分類を残し、個人情報や秘密キーを不必要に記録しません。

複数システムを連携すると、一部だけ成功する場合があります。

例:

  1. フォーム内容を保存
  2. CRMへ登録
  3. 確認メール送信
  4. Slackへ通知

CRM登録だけ失敗した場合、利用者へ完了と表示してよいか、後から再送できるかを決めます。

flowchart LR
    F[フォーム送信] --> D[自社保存]
    D --> C[CRM登録]
    C --> M[メール送信]
    C --> N[担当通知]

各工程の成功・失敗を個別に把握し、整合を取る設計が必要です。

API提供側に本番以外の環境があるか確認します。

  • 開発環境
  • ステージング
  • サンドボックス
  • モックAPI
  • テストアカウント
  • テスト用決済
  • ダミーデータ

本番APIしかない場合、誤登録、誤メール、実在会員への影響、課金等のリスクがあります。

検証環境が本番と同じ仕様・データ量・認証かも確認します。

SLAはサービス品質についての合意・目標を示すものです。

確認例:

  • 稼働率
  • サポート時間
  • 問い合わせ手段
  • 重大障害の連絡
  • 復旧目標
  • 計画メンテナンス
  • 補償条件
  • 対象プラン

SLAがあっても、Webサイトの復旧を制作会社が何もしなくてよいわけではありません。

ステータスページ、代替表示、一次切り分け、クライアント報告を決めます。

API利用料には次の形があります。

  • 月額固定
  • リクエスト数
  • 利用者数
  • 取得件数
  • データ転送
  • 保存容量
  • 高度機能
  • サポート
  • 超過料金

画面仕様によって呼び出し回数が変わるため、想定利用者数と操作回数から概算します。

無料枠だけを前提に本番設計しないようにします。

APIは将来変更されます。

  • 項目追加
  • 項目廃止
  • 型変更
  • 認証変更
  • URL変更
  • バージョン終了
  • 利用制限変更
  • 料金改定

互換性のない変更では、Webサイト側の改修が必要です。

確認すること:

  • バージョン表記
  • 廃止予告期間
  • 変更通知の受信先
  • テスト環境
  • 移行ガイド
  • 保守契約の範囲
  • 改修予算

担当者個人のメールだけで通知を受けると、退職時に見落とします。共有アドレスや管理台帳を使います。

APIで扱うデータについて確認します。

  • 個人情報を含むか
  • どの国・地域へ送られるか
  • 保存されるか
  • ログに残るか
  • 暗号化されるか
  • 削除依頼へ対応できるか
  • 再委託先があるか
  • 利用規約上の二次利用
  • 取得目的と同意
  • 本番データを検証に使うか

技術的に送信できることと、契約・法務上送信してよいことは別です。

  • 1文字入力ごとに呼ぶのか
  • 検索ボタンで呼ぶのか
  • 最大結果件数
  • 並び順
  • キャッシュ
  • 地図移動時
  • 月間利用料
  • 0件・遅延時

を画面設計と一緒に決めます。

  • 二重決済防止
  • 3Dセキュア等の認証
  • 決済成功後の注文登録
  • Webhook
  • タイムアウト時の状態照会
  • 取消・返金
  • 本番・テスト環境
  • 個人情報・カード情報の責任範囲

を確認します。

仕様書が未完成、担当者しか仕様を知らない、検証環境がない場合があります。

制作着手前に、モック、サンプルデータ、項目確定日、変更凍結日、問い合わせ窓口を合意します。

  • 業務要件と画面要件を先に整理している
  • APIが必要な検索・更新機能を持つか確認している
  • 認証と権限を環境・機能ごとに分けている
  • 秘密情報の保存・更新・失効方法を決めている
  • CORSが必要な構成か確認している
  • 最大件数、ページング、レート制限を把握している
  • タイムアウト時間と再試行条件を決めている
  • 二重登録・二重決済を防ぐ設計がある
  • エラー・空データ・部分成功の画面を定義している
  • 本番以外の検証環境とテストデータがある
  • SLA、障害情報、問い合わせ窓口を把握している
  • 通常時・最大時の利用料を試算している
  • 仕様変更通知を共有先で受け取る
  • 個人情報・ログ・データ保存の扱いを確認している

「APIの仕様が決まるまで、画面だけ先に作ればよい」

Section titled “「APIの仕様が決まるまで、画面だけ先に作ればよい」”

項目、件数、検索方法、応答時間、エラーによって画面仕様が変わります。モックで進める場合も前提を明記します。

「CORSエラーはフロントエンドのバグ」

Section titled “「CORSエラーはフロントエンドのバグ」”

API側の許可設定や呼び出し構成に原因がある場合があります。ブラウザから呼ぶか、サーバー経由にするかも含めて判断します。

「失敗したら自動で再送すればよい」

Section titled “「失敗したら自動で再送すればよい」”

登録・決済等は二重処理の危険があります。処理識別子や状態照会が必要です。

「200が返れば業務処理も成功」

Section titled “「200が返れば業務処理も成功」”

HTTPとして成功でも、レスポンス内部に業務エラーが含まれるAPIがあります。成功条件を仕様で確認します。

「本番公開後に利用制限を確認すればよい」

Section titled “「本番公開後に利用制限を確認すればよい」”

レート制限や料金は画面操作・キャッシュ・アクセス設計へ影響するため、要件段階で確認します。

Q1. 認証と認可の違いを説明してください。

Section titled “Q1. 認証と認可の違いを説明してください。”
回答と解説 認証は誰・どのシステムかを確認し、認可はその主体がどのデータや操作を許可されているかを決めます。

Q2. 検索欄で文字入力のたびにAPIを呼ぶ設計では、何を確認しますか。

Section titled “Q2. 検索欄で文字入力のたびにAPIを呼ぶ設計では、何を確認しますか。”
回答と解説 レート制限、料金、応答速度、入力待ち時間、リクエスト取消、キャッシュ、短すぎる検索語、アクセス集中等を確認します。

Q3. 予約登録APIがタイムアウトしました。すぐ同じ内容を再送してよいでしょうか。

Section titled “Q3. 予約登録APIがタイムアウトしました。すぐ同じ内容を再送してよいでしょうか。”
回答と解説 提供側では登録済みの可能性があるため、無条件再送は危険です。識別子による重複防止や状態照会を使います。

Q4. API提供側の検証環境がない場合、どのような対策が考えられますか。

Section titled “Q4. API提供側の検証環境がない場合、どのような対策が考えられますか。”
回答と解説 モックAPI、ダミーアカウント、本番で影響しないデータ、操作制限、試験時間、削除手順、提供側立会い等を合意します。

Q5. API仕様変更の見落としを防ぐには何をしますか。

Section titled “Q5. API仕様変更の見落としを防ぐには何をしますか。”
回答と解説 共有メールで通知を受け、バージョン・廃止日を台帳管理し、保守担当と改修予算を決め、検証環境で事前確認します。