21
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

HameeAdvent Calendar 2016

Day 11

外部サービスと連携するときのゆる心得

Posted at

初めて外部サービスのAPIを使って自分のシステムと連携するとき、
慣れている人には当たり前だけど見落としがちなことをまとめてみます。

リクエスト・レスポンスのログをとる

普段、私たちはログの存在を忘れています。
必要になるのは、何か予期せぬことが起こったときです。

外部サービスへのリクエストについての問い合わせをする際には、
十中八九リクエストIDなどの情報が必要になります。

どこかのサービスと連携する時、そのサービスの全てを知ることはできません。
最低限「どんなリクエストを送り、何が返ってきた(あるいは返ってこなかった)」ということを
後からトレースできるようにしておきましょう。

ログローテーションは忘れずに

ログローテーションを適切に行なっておきましょう。
Disk Fullでログが書き込めなくなって処理が止まる...
なんてことは無いだろうと思っても意外と起こるものです。

タイムアウト時の挙動を決めておく

APIリクエストとは、いろんな理由で失敗するものです。
リクエスト側のサービスの問題の場合もあるし、API提供側の問題もあるし、
その間のネットワークの問題もあります。
エラーレスポンスが返ってくればいいですが、リクエストしたまま何も返ってこない
なんてことも時には起こります。

レスポンスは何秒まで待つのか、その後はどう処理するのか
といったことは、リクエスト側でポリシーをもっておくよいでしょう。

レファレンスにないレスポンスが返っても問題ないようにしておく

XMLで返ってくるはずなのに、とあるエラーだけはHTMLが返ってきたりとか
レファレンスのエラーコードのリストには乗っていないエラーコードが返ってきたとか、
そういうことも少なからずあります。
自分のサービス側で新しくリリースされたAPIの機能に追随していなかった、なんてこともあるかもしれません。
何が返ってきても、処理が中断しないような実装にしておくことが重要です。

リトライする

色々気をつけていても、理由がよく分からずリクエストが失敗することはあります。
HTTPステータスコードで500番台(サーバーエラー)が返ってきた場合などは、
リクエストの再試行(リトライ)を行なうと、リクエストの成功率が上がります。

exponential backoffのメモ

わからないことは聞く

どこまで情報が開示されていても、外部サービスはよそのサービスです。
中の人にしかわからないことだってあります。
聞ける窓口がある場合はさっさと聞いてみましょう。
どうしても情報が得られないときは「多分こうだろう」と見切りをつけることもありますが
不安要素はなるべく減らしたいものです。

終わりに

いかがでしたでしょうか。
リクエストする側のサービスの規模や性質によって、気をつける観点が変わってくるかもしれませんが、
大体上記のようなことを気をつけておくと、ストレスが少なく外部サービスとの連携ができるのではないかと思います。
それでは、楽しいAPIライフを。

21
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?