本文へ移動

ホーム / PdM / 第2部 Web サービスの仕組み

第2部 Web サービスの仕組み・第3章

API と外部連携

★★☆ 重要6トピック・面接 3問

自社の画面とサーバーの間、自社と外部サービスの間をつなぐ API について、PdM が仕様で決めること・確かめることを押さえる。

3.1API と後方互換

用語★★☆ 重要
ひとことで

サービス同士が決まった形でデータをやりとりする窓口。仕様の変更は使っている側を壊すことがある。

API は、サービス同士が決まった形でデータをやりとりする窓口です。自社の画面とサーバーの間にも、自社と外部サービス(決済・地図・メールなど)の間にもあります。窓口の形を変えると、それを使っている側が壊れることがあります。

古いアプリは「name」を読み続けるAPI が返すデータの形を変えたとき項目を足すid・name・price・tag(追加)名前を変えるid・title(元は name)・price古いアプリ v1name を表示古いアプリ v1name を表示動く壊れる知らない項目は無視name が無い
後方互換:足すのは安全、消す・名前を変えるは古い利用者を壊す

後方互換とは、古い使い方のままでも動き続けることです。項目を足すのはたいてい安全ですが、項目の削除・名前の変更・意味の変更・必須にするは使う側を壊します。特にスマホアプリは古い版を使い続ける人がいるので、サーバーは何か月も古い形に対応し続ける必要があります。「この変更は互換を壊しますか?古い版はいつまで残りますか?」は仕様の段階で確認します。

Web の「バージョニングと後方互換」

SRE の「タイムアウトの種類と設定の考え方」

面接ではこう答える

API は、サービス同士が決まった形でデータをやりとりする窓口で、使う側との約束のようなものです。項目を足すのはたいてい安全ですが、項目を消す・名前や意味を変える・必須にする変更は、使っている側を壊します。特にスマホアプリは古い版が長く残るので、サーバーは古い形にも対応し続ける必要があります。PdM としては、仕様の段階で「この変更は互換を壊すか、古い版はいつまで残るか」を確認しています。

API の仕様書には、どの URL に・何を送ると・何が返るかが書かれています。OpenAPI という形式で書かれていることが多く、画面で一覧を見られるようにしているチームもあります。

GET /orders?status=shipped&limit=20
→ 200 OK
{ "orders": [ { "id": 101, "total": 3000, "status": "shipped" } ],
  "next_cursor": "abc" }
読むところPdM が確かめること
項目と型画面に出したい情報がそろっているか。足りなければ API の変更が要る
一度に返す件数(ページング)一覧を「全部」出す仕様は、件数が多いと作れない・遅い
エラーの種類失敗したときに画面でどう見せるか
認証・権限誰が呼べるか、他人のデータが返らないか

仕様書が読めると、「この画面を作るのに API の変更は要る?」を自分で見当をつけてから聞けるので、見積もりの会話が速くなります。

3.3外部サービスへの依存

用語★★☆ 重要
ひとことで

外部サービスは早く作れる代わりに、止まる・遅くなる・制限・値上げ・終了の影響を受ける。そのときの体験を仕様で決めておく。

決済・地図・メール・AI など、外部のサービスを使うと早く作れますが、相手が止まる・遅くなる・値上げする・終わることの影響も受けます。企画の段階で、そのときの体験を決めておきます。

外部サービスが止まると、自社の機能も止まる自社の画面自社のサーバー決済地図メール配信AI の API止まった止まったとき:代わりの表示・後でやり直す流れ・告知を事前に決めておく
外部サービスへの依存
リスク例仕様で決めておくこと
止まる決済サービスが落ちて購入できない代わりの表示、後でやり直す流れ、告知
遅い地図の表示に10秒かかる待つ上限(タイムアウト)と、その後の見せ方
料金・回数制限利用が増えて請求が急に増える、上限で止められる利用量の見込みと予算、上限を超えたときの動き
仕様変更・提供終了古い API が使えなくなる移行の期限と工数を計画に入れる
データの受け渡し個人情報を外部に送る契約・同意・送る項目の最小化

面接ではこう答える

外部サービスを使うと自社で作るより早く出せますが、相手が止まったり遅くなったりすると自社の機能も止まります。料金や回数の制限、仕様変更や提供終了の影響も受けます。PdM としては、企画の段階で止まったときの代わりの表示、待つ上限、利用量と費用の見込み、送る個人情報の範囲を決め、契約の確認も法務と進めるようにしています。

ひとことで

待つ上限(タイムアウト)とやり直し(リトライ)を決め、取れないときは代わりの表示にして全体を守る考え方。

画面を出すために、サーバーは決済・地図・おすすめ・社内の別システムなど、ほかのサービスを呼んでいます。呼んだ先が遅い・止まっているときにどうするかは、エンジニアの設定であると同時に、そのとき利用者に何を見せるかという仕様の問題でもあります。ここは PdM が決めに加わる場面です。

タイムアウトは「何秒待って返事がなければあきらめるか」の上限、リトライは失敗したときに自動でやり直すことです。上限がないと、相手の遅れで自社のサーバーまで詰まり、関係のない画面も遅くなります。

待つ上限(タイムアウト)がないと、1つの遅れが全体に広がる画面購入ボタン自社のサーバー注文を受ける外部の決済応答しない上限あり3秒で打ち切り → 代わりの表示上限なし画面が固まる・サーバーが詰まる
タイムアウトの有無で影響の広がり方が変わる
決めること例
待つ上限おすすめ表示は1秒であきらめる。決済は長めに待つ
あきらめたときの見せ方おすすめ欄を出さない・「後でもう一度お試しください」
やり直してよい処理か検索はやり直してよい。決済は二重請求にならない作りが先
後で自動でやり直すか通知・連携は裏で数回やり直し、だめなら担当者に知らせる

「なくても困らない部分」(おすすめ・レビュー件数など)は、取れなければ省いて画面を出す、と決めておくと、外部の障害でもサービス全体は使えます。

下の「ブラウザで試す」の図は、スマホのアプリが注文を送る例です。返事が届かないままタイムアウトしたあと、1秒・2秒・4秒と間をあけてやり直し、同じ「冪等キー」(この操作を見分ける番号)を付けて送り直すので、注文が2つできずに前回の結果が返るところまでを追えます。上の表の「やり直してよい処理か」で、決済を「二重請求にならない作りが先」としているのは、この仕組みがあって初めて安全にやり直せるからです。

面接ではこう答える

タイムアウトは返事を待つ上限で、リトライは失敗したときのやり直しです。上限がないと、外部サービスの遅れで自社のサーバーまで詰まり、関係ない画面まで遅くなります。PdM としては、機能ごとに何秒まで待つか、あきらめたらどう見せるか、やり直して二重にならないかを仕様で決めます。おすすめのように無くても困らない部分は、取れなければ省いて画面を出すようにします。

別のページで開く →

ネットワーク図を読み込んでいます…

「変わった?」と聞き続けるか、変わったら知らせてもらうかポーリング自社外部サービス「変わった?」を数分ごとに多くは「変化なし」。反映は次に聞くまで遅れるWebhook自社外部サービス変わったら知らせる(支払い完了など)速いが、届かなかったときの備えが要る
ポーリングと Webhook

Webhook は、外部サービスで何かが起きたとき(支払いが完了した、など)に、相手から自社へ知らせてもらう仕組みです。自分から定期的に聞きに行くポーリングより反映が速く、無駄な問い合わせも減ります。

方式反映の速さ注意
Webhook速い(数秒)届かない・2回届く・順番が入れ替わることがある
ポーリング聞く間隔しだい(数分など)回数制限や費用にかかりやすい
ファイルで一括(CSV など)1日1回など取り込み失敗に気づく仕組みが要る

「支払い完了の知らせが届かなかったら注文はどうなるか」は、仕様で決めておくべき大事なエッジケースです。

3.6回数制限と従量課金

用語★★☆ 重要
ひとことで

外部 API には一定時間に呼べる上限と、使った量に応じた料金がある。利用量の見込みで試算しておく。

外部 API の多くには、回数制限(一定時間に呼べる上限。超えると 429 が返る)と、従量課金(呼んだ回数や量に応じた料金)があります。利用者が増えたり、画面を開くたびに呼ぶ作りにしていたりすると、ある日急に止まる・請求が跳ねる、ということが起きます。

利用量が増えると、ある日上限に当たる回数制限(例:1分に 600 回)ここから 429 エラー利用者の増加呼ぶ回数
利用量と回数制限
企画のときの試算例
1人が1日に呼ぶ回数画面を開くたび × 1日5回
利用者数の見込み今は1万人、1年後に5万人
月の回数と費用回数 × 単価。上限のプランに収まるか
ピークキャンペーン時の1分あたりの回数が制限を超えないか

結果をキャッシュして呼ぶ回数を減らす、まとめて呼ぶ、上位のプランに変える、などの対策は、試算の数字があればエンジニアと選べます。

面接ではこう答える

外部 API の多くには、一定時間に呼べる回数の上限と、呼んだ量に応じた料金があります。利用者が増えたり、画面を開くたびに呼ぶ作りだったりすると、上限に当たって 429 エラーで止まったり、請求が急に増えたりします。PdM としては、企画の段階で1人あたりの回数と利用者数の見込みから月の回数と費用を試算し、ピーク時に上限を超えないかをエンジニアと確認します。

この章のまとめ

🖨 まとめシート(印刷・PDF)
  • API は約束(契約)。項目を足すのは安全だが、消す・名前を変えるは使う側を壊す
  • 外部サービスは止まる・遅くなる・制限がある前提で、そのときの体験を仕様で決める
  • Webhook・回数制限・料金など、連携の方式とコストを企画の段階で確かめる
  • API と後方互換:サービス同士が決まった形でデータをやりとりする窓口。仕様の変更は使っている側を壊すことがある。
  • 外部サービスへの依存:外部サービスは早く作れる代わりに、止まる・遅くなる・制限・値上げ・終了の影響を受ける。そのときの体験を仕様で決めておく。
  • タイムアウト・リトライ・代わりの表示:待つ上限(タイムアウト)とやり直し(リトライ)を決め、取れないときは代わりの表示にして全体を守る考え方。
  • 回数制限と従量課金:外部 API には一定時間に呼べる上限と、使った量に応じた料金がある。利用量の見込みで試算しておく。

この章のクイズ

面接ではこう聞かれる

まず答えを見ずに声に出して答え、そのあと開いて比べる。

Q1外部サービスの API を使った機能を企画するとき、何を確認しますか?

模範回答

大きく4つを確認します。1つ目は止まったときで、外部サービスが落ちたり遅くなったりしたときにユーザーにどう見せるか、後でやり直せるかです。2つ目は料金と回数の制限で、利用が増えたときの費用と、上限に達したときの動きを見ます。

3つ目は仕様変更や提供終了の方針で、古い API がいつまで使えるかを確認します。4つ目はデータで、個人情報を外部に送るなら契約や同意、送る項目を最小限にできるかを確かめます。これらを仕様に書いておくと、障害や請求の急増に慌てずに済みます。

深掘りされたら

  • 外部サービスの障害でユーザーに影響が出たら、どう説明しますか?

見られているポイント停止・遅延・費用・仕様変更・データの観点で依存のリスクを見られるか

Q2API の変更で「後方互換を壊す」とはどういうことですか?PdM として何を確認しますか?

模範回答

古い使い方のままでは動かなくなる変更のことです。項目を足すのはたいてい安全ですが、項目を消す・名前や意味を変える・必須にする、は使っている側を壊します。

PdM としては、仕様の段階で「この変更は互換を壊すか」「使っている側は誰か(自社のアプリの古い版、外部の利用者)」「古い形はいつまで残すか」を確認します。壊す変更が必要なら、新しい版を並べて出し、移行の期限と告知を計画に入れます。

深掘りされたら

  • スマホアプリの古い版はいつまで面倒を見ますか?
  • 外部の利用者にはどう告知しますか?

見られているポイント互換を壊す変更の見分けと、移行の計画

Q3外部の決済サービスが止まったとき、ユーザーにどんな体験を出すべきだと考えますか?

模範回答

まず、止まっていることを分かる形で伝え、ユーザーが損をしないようにします。例えば「ただいま決済が混み合っています。カートは保存されています」と出し、何度も押して二重に請求されないようにします。

事前に決めておくことは、待つ上限、あきらめたときの表示、カートや入力内容を残すか、後でやり直す流れ、告知の出し方です。代わりの決済手段があれば案内します。止まったときの売上の影響も試算しておき、どこまで対策に投資するかを判断します。

深掘りされたら

  • 二重請求を防ぐにはどうしますか?
  • 代わりの決済サービスを用意する価値はありますか?

見られているポイント障害時の体験とお金の扱い、事前の準備