馬とテニスのIT革命
馬とテニスとリラックマが好きな IT 系のエンジニアです。
エンジニア

楽天APIでサーバエラーやアクセス制限(503 AccessForbidden)

楽天 API で商品データが取得できない時が時々あるので、レスポンスデータをログに残してみました。

結果的には、API サーバ側でエラーが発生しているようでした。

サーバエラーの内容

※XXXXXXXXXXは数字

<Status>ServerError</Status>
<StatusMsg>
APIサーバー内部でのエラーのため、レスポンスを返せません。エラーコード=20091018223256086-XXXXXXXXXX
</StatusMsg>

PHP の simplexml_load_file() でレスポンスデータを取得した場合、<header:Header> のタグ内のデータが取得されないので、エラーコードでの判定ができないです。

結果的に Body の有無で判定しているのですが、サーバエラーが頻発すると困ります。

どのようなサーバエラーが発生しているのか、具体的な内容も知りたいところですね。

まあ、知ったところでこっちではどうにもならないのですが・・・。

コミュニティでも報告されている

楽天 API のデベロッパーズコミュニティに同じような状況報告があり、楽天側からも正式回答がされていました。

どうやらサーバの負荷みたいですね。

API からの結果は 1 時間の間はキャッシュするようにしているのですが、毎回リクエストしているユーザーもいるでしょうね。

キャッシュした方が明らかに効率的ですが、商品情報の鮮度を考えるとキャッシュ時間もそれほど長くない方がいいかもしれません。

この度はお客様にご迷惑をおかけしております。
ただいま、楽天APIのうち、市場系APIにおきまして、
リクエスト数の増加に伴い、弊社システムの負荷が増え、検索がしにくい状態が続いております。
現在、システム増強などの対応方針を検討中でございます。

後日、今度は 503(AccessForbidden)のエラーが返ってくるようになりました。

気付いたのがこの日だったので、もう少し前からなのかも。

API からの結果は自分のサーバ側で 1 時間キャッシュしているので、多くても 1 時間(3600秒)に 100 回くらいの問い合わせになります。

楽天側では 1 秒間に 1 アクセス以上が制限対象なので謎です。

今のところ、こちらの実装の問題とは思えないですが、様子を見ることにします。

API のリクエスト時にすべてログに残すようにしたので、成功・失敗を時間軸で追えると思います。このログを元に問い合わせてみようかな。

[エラーメッセージ]
アクセス数上限を超えたため、楽天ウェブサービスへのアクセスを制限させて頂いております。
この制限は、一定時間アクセスを中止いただくことで解除されます。
恐れ入りますが、しばらく経ってからご利用いただけますようお願い致します。

なんだかんだで、サンプルソースを渡していた人のサイトでアクセス過多になっていただけでした。

ID を差し替えてもらっていたと思ったのですが、行き違いがあったようです。

なので、2009 年 11 月の対応以降は、アクセス増加の制御はまともになっていると思って良さそうです。

サポートメールの対応もいいです。失礼いたしました。

Web API The Good Parts

オライリーの「Web API」に特化した本です。最近の多くの Web サービスは API が活用されていますが、その技術はこれまでの Web サイトとそれほど大きく変わりません。

今後、マイクロサービス化が進む中で知っておいて損はない内容が詰め込まれており、現場のエンジニアやこれから Web 系のエンジニアを目指す人にもオススメの一冊です。

created by Rinker
¥2,376
(2018/10/17 13:48:20時点 Amazon調べ-詳細)

あなたにオススメ