🤔

どう答える?「xxxのAPIで500エラーが出ましたが、リトライしてもよいですか?」

2023/01/20に公開

はじめに

私は普段ほぼ技術サポートをしている感じなのですが、ある時、所属組織で提供しているAPIに対して次のような質問が来ました。

「xxxのAPIで500エラーが出ましたが、リトライしてもよいですか?」

質問自体にツッコミも必要な感じではありますが、色々考えて回答しました。その中で一般化できるノウハウもありそうな気がするので、プロセスを含めてidea記事にしてみることにしました。

結論

「よい」という旨を返す。
ただし、できるだけ補足情報を入れる。

この時の状況

  • 質問内容
APIの500エラーが出ましたが、リトライしてもよいですか?
  • 自分はAPIのサポート窓口を担当している
    • 参照系APIを新規に正しくシステムインテグレーションしてほしい
  • ご質問いただいた相手のスキルやご経験などは不明
  • チームで流用できるナレッジはまだない
  • 仕様書等で対処すべき方針は明確になっていない

課題

  • お客様は、一般的な500エラーとしてリトライすることは当然というご認識はない可能性があるゆえ、回答者はジュニアクラスのエンジニアである可能性がある
  • リトライして欲しいが、もし500エラーがリクエストの集中により発生するものでかつ再現性がある場合に、間隔が十分に確保されていないと時間が立っても問題解決しない
  • 固定で2秒、3秒という間隔を取るよりも指数関数的バックオフのような効率的な方式を採用してほしいので、ワードだけ出しておく。
  • 時間の問題で解決できない問題が発生している可能性はある
    • その場合は一旦例外として対応する

回答

A. はい。
ただし、可能な限りリトライ間隔は十分に確保してください
例えば、固定秒数の待機処理を入れる事や、指数関数的バックオフなどの方式をご利用ください
なぜなら、もしリトライ先のAPIが高負荷により500エラーを返すことになった可能性があるためです

また、リトライにより問題が解決しない場合には、お手数ですが再度お問い合わせください

工夫した点

  • ジュニアクラスと思われる方へはなるべく具体的な方法を例示する
  • わからないことは回答しない
    • もしAPIが遅延処理を呼び出す場合、状態が確定するまでN時間かかるという仕様もよくあるので、その場合にはN時間待ってからリトライするように伝えるとよい
    • さらに、500エラーの場合はサーバの設定ミスやアプリケーションロジックのバグなど、時間の問題で解決できないものがあるので、把握できていないのであれば再度お問い合わせください、とエクスキューズしておく
    • 一応、チームで特殊な仕様や、自社起因での失敗事例がなかったか確認した
    • こちらの問題かどうか不明なので、安易に「申し訳ありません」などと謝らない

さいごに

これはあくまで一時回答で、その後追加回答が必要かと思ったらこれで終了しました。場合によってはきっと追加回答もいただけるでしょうね、そしたら、回答を元に相手の技術レベルや目的をさらに精度あげて考えられそうですね。

Discussion