PublicAPIのエラーハンドリング / PublicAPI error handling
by
freee
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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