PublicAPIのエラーハンドリング / PublicAPI error handling
by
freee
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
PublicAPIのエラーハンドリング hyudai 2024年5⽉31⽇
Slide 2
Slide 2 text
2 hyudai 2022年9月〜API基盤チーム 2023年7月〜外部連携サービス部 クレジットカードとの連携や同期体 験改善に従事 外部連携サービス部エンジニア
Slide 3
Slide 3 text
コスパよくPublicAPIを運⽤したい
Slide 4
Slide 4 text
PublicAPIの定義 運⽤負荷の低いPublicAPIを提供する エラーにおけるセキュリティ ⽬次
Slide 5
Slide 5 text
(この登壇における)PublicAPIの定義 会社外に向けて発信するAPI全般 PublicAPIに該当するもの
Slide 6
Slide 6 text
(この登壇における)PublicAPIの定義 会社外に向けて発信するAPI全般 PublicAPIに該当するもの ● freee会計などの不特定多数に向けて提供されるAPI freee Developers Community https://developer.freee.co.jp/
Slide 7
Slide 7 text
(この登壇における)PublicAPIの定義 会社外に向けて発信するAPI全般 PublicAPIに該当するもの ● freee会計などの不特定多数に向けて提供されるAPI ● ⼀般公開していないが、外部の企業との通信に使⽤するAPI
Slide 8
Slide 8 text
(この登壇における)PublicAPIの定義 PublicAPIに該当しないもの
Slide 9
Slide 9 text
(この登壇における)PublicAPIの定義 PublicAPIに該当しないもの ● ⾃社内での利⽤のみを想定した通信 ○ private API ○ マイクロサービス間の通信 ● プログラム間の通信以外の⽬的で作られたもの ○ UIを提供するHTML
Slide 10
Slide 10 text
PublicAPIに該当するもの ● freee会計などの不特定多数に向けて提供されるAPI ● ⼀般公開していないが、外部の企業との通信に使⽤するAPI PublicAPIに該当しないもの ● ⾃社内での利⽤のみを想定した通信 ○ private API ○ マイクロサービス間の通信 ● プログラム間の通信以外の⽬的で作られたもの ○ UIを提供するHTML
Slide 11
Slide 11 text
⼀般公開されていないAPIをPublicAPIに含める理由 コミュニケーションコストが無視できない
Slide 12
Slide 12 text
⼀般公開されていないAPIをPublicAPIに含める理由 コミュニケーションコストが無視できない 社内の場合 ● 問題が発⽣した時にslackなどのツールですぐに連絡を取れる ● 内部だからこそ機密情報を使ったやりとりができる ○ このAPIは N + 1が潜んでいるのであんまり叩かないで欲しいなど
Slide 13
Slide 13 text
⼀般公開されていないAPIをPublicAPIに含める理由 コミュニケーションコストが無視できない 社外の場合 ● mailでのやり取りになる ○ ビジネス⽂書に慣れていない場合は内部レビューが⼊ることも ● 機密情報を伝えることは難しいので情報伝達の粒度が荒くなる ○ 粒度が荒くなるのに正確性を要求される ● 連絡を送ったとしても返信がいつになるのかわからない ○ 返信が1,2週間遅れることも...
Slide 14
Slide 14 text
⼀般公開されていないAPIをPublicAPIに含める理由 コミュニケーションコストが無視できない 問い合わせ時の対応について API利⽤者側 ○ 社内である程度調べ上げて確からしいという仮説が⽴った状態 ○ 調べ上げた結果何にもわからなかった時... API提供者側 ○ 精度の⾼い状態で返信を送らなければならない ○ アクセスログとかまで⾒に⾏く必要があるかもしれない
Slide 15
Slide 15 text
⼀般公開されていないAPIをPublicAPIに含める理由 この問題は⼀般公開されているAPIであっても同じですよね?
Slide 16
Slide 16 text
運⽤負荷の低いPublicAPIを提供する ユーザーに⾃⼰解決をしてもらうことが重要 ● エラーを充実させる ● チュートリアルを含めたドキュメントの整備 ○ 最初にAPIを叩くまでの時間が⼀番挫折しやすい(IMO) ● SDKやライブラリを提供する
Slide 17
Slide 17 text
運⽤負荷の低いPublicAPIを提供する ユーザーに⾃⼰解決をしてもらうことが重要 ● エラーを充実させる ● チュートリアルを含めたドキュメントの整備 ○ 最初にAPIを叩くまでの時間が⼀番挫折しやすい(IMO) ● SDKやライブラリを提供する
Slide 18
Slide 18 text
運⽤負荷の低いPublicAPIを提供する エラーを充実させる 問題の特定 ● ステータスを充実させることで提供者と利⽤者のどちらに問題があるの かを明確にする ● 状況に合わせた対応策を提⽰ ● ステータスコード200,400,500をちゃんと使い分けることが⼤事
Slide 19
Slide 19 text
運⽤負荷の低いPublicAPIを提供する エラーを充実させる 問題の特定 ● ステータスを充実させることで提供者と利⽤者のどちらに問題があるの かを明確にする ● 状況に合わせた対応策を提⽰ ● ステータスコード200,400,500をちゃんと使い分けることが⼤事 問題が発⽣した際のユーザーのアクションを案内 ● ⼊⼒データ形式をXYZに修正してください ● rate limitです
Slide 20
Slide 20 text
もしエラーが整備されていないAPIだと? APIの仕様 常に200okでレスポンスされるAPI 成功しても失敗しても200、⼆つの違いはresponseのみ シナリオ 会計ソフトに登録している固定資産の数を調べたくてindexのAPIを叩いた ら200okで返ってきた!ただしbodyは空っぽ この時のデータは次のうちどちらの解釈をすればいい? ● 本当に固定資産が何もない時 ● ⼊⼒値が間違えてエラーになった時
Slide 21
Slide 21 text
もしエラーが整備されていないAPIだと? APIの仕様 成功すると200, 失敗すると500が返ってくる。 エラーメッセージは常に「エラーが発⽣しました」 シナリオ すでに運⽤に乗っているサービスで、とある会社との通信に使⽤している APIが急に500エラーを返してきた。
Slide 22
Slide 22 text
もしエラーが整備されていないAPIだと? シナリオ すでに運⽤に乗っているサービスで、とある会社との通信に使⽤している APIが急に500エラーを返してきた。 まずどっちの問題...? ● 先⽅のサーバーが落ちた? ● リクエストの形式が不正...?でも今まで動いてたし...
Slide 23
Slide 23 text
もしエラーが整備されていないAPIだと? シナリオ すでに運⽤に乗っているサービスで、とある会社との通信に使⽤している APIが急に500エラーを返してきた。 調査に難航したため問い合わせをしたところ ● 「実装時からリクエストの形式が不正だったが、内部でvalidationする ようにした」 ○ 利⽤者側: 先⽅の都合はわからない ○ 提供者側: バグを修正したら問い合わせが増えた... どちらも幸せにならない結末になるかもしれません
Slide 24
Slide 24 text
もしエラーが整備されていないAPIだと? 先ほど例に出したAPIはフィクションです。 ただ、エラーメッセージがないと⾏える調査にも限界があります。2つ⽬に紹介 したものはどちらかというとAPI利⽤者側の実装ミス起因ですが、それすらも⾃ ⼰解決することは難しいです。 不適切なエラーを提供しているAPIは結果として⾃らの保守運⽤コストが犠牲に なります。
Slide 25
Slide 25 text
エラーにおけるセキュリティ エラーを整備する壁は⼤きく分けて2つ ● 内部のエラーとは異なる ● セキュリティ
Slide 26
Slide 26 text
エラーにおけるセキュリティ PublicAPIのみを提供しているサービスは少ない ⼤体は⼤元のサービスから切り出して、PublicAPI「でも」使えるように している 内部のエラーを流⽤している結果、ユーザーフレンドリーじゃないものが 出来上がる可能性も ● PublicAPIを使うのは職業エンジニアだけではない ● そもそも内部のエラーは⾒られていい状態になってますか?
Slide 27
Slide 27 text
エラーにおけるセキュリティ エラーを詳細に書きすぎるリスク ● 内部情報の漏洩 ○ 現在のCPU使⽤率が80% overなので使⽤をやめてください ● セキュリティレベルが極めて⾼い情報を出してしまった では何を返せばいいの?
Slide 28
Slide 28 text
エラーにおけるセキュリティ ユーザーに何をして欲しいのかを明確にすることが大事 freee会計のAPIでcompany_idを不正なパラメータの時の例 { "message": "この事業所にアクセスする権限がありません", "code": "invalid_authorization_company_id" } 何を確認すればいいのかはわかりますよね? ただし情報漏洩には気をつけてください
Slide 29
Slide 29 text
終わりに コスパ良いPublicAPIの提供を⾏うために気を付けること ● エラーの原因が提供者か利⽤者のどちらにあるかわかりますか? ● エラーのメッセージはユーザーのアクションにつながりますか? ● そのエラーはユーザーアクションに不必要な情報はだしてないですか?
Slide 30
Slide 30 text
No content