LoginSignup
0
4

More than 5 years have passed since last update.

リクルートWEBサービスとContent-Typeについて

Posted at

リクルートWEBサービスでJSONを取得した場合のContent-Typeがなぜかapplication/jsonではなくtext/javascriptになっているという話です。

リクルートWEBサービスについて

リクルートWEBサービスはリクルートが提供しているWeb APIサービスです。
image.png

左上青色欄に記載されているAPIはおそらくリクルート内製のもので、リクエストやレスポンスの形がおおよそ統一されています。
レスポンスの形式にはXML,JSON,JSONPの3種類が選択ができます。
旅行検索やグルメ検索などのAPIが提供されており、
メールアドレスを登録してAPIキーを発行してもらうだけで誰でも簡単に利用できます。

左側灰色欄に記載されているAPIは少し勝手が違うようで、リクエストやレスポンスの形が少し異なります。

本記事では青色欄にあるAPIのレスポンスのContent-Typeを確認していきます。

XMLデータ取得

ここではRestlet Client - REST API TestingというChrome拡張機能を使って青色欄APIにリクエストを投げます。
デフォルトの戻り型がXMLなので、普通にリクエストを投げます。
image.png
APIキーは一応塗りつぶしています。
レスポンスのボディを見ると、XML形式で返ってきていることが分かります。
Content-Typeはapplication/xmlとなっています。
調べてみると、XMLのContent-TypeはRFC7303でapplication/xmlが推奨されているらしいです。

JSONデータ取得

続いてJSON形式の戻り値を取得します。
リクエストの末尾に&format=jsonを追加してJSON形式のレスポンスを要求します。
image.png
まずレスポンス右側のボディを見ると、なにやらJSONらしきデータが返ってきてはいるのですが、ごちゃごちゃとしていて見辛いです。Restlet Clientは通常JSONで返されたデータを整形して表示してくれるのですが、このデータはなぜか整形してくれていません。
レスポンス左側のContent-Typeを見てみると、「text/javascript」となっています。

調べてみると、JSONのContent-TypeはRFC4627で「application/json」と定められているようです。
つまり、Content-Typeが合っていないためにRestlet ClientがJSONとして認識できていないため整形が効いていないようです。

ちなみにリクルートWEBサービスの灰色欄にあるイベントサーチAPI(ATND BETA)なんかはJSONを要求した場合Content-Typeをapplication/jsonにして返してくれているようで、整形もちゃんと効いています。
image.png

JSONPデータ取得

最後に、リクエストの末尾を&format=jsonpにしてJSONP形式のレスポンスを要求します。
image.png
ボディにはJSONPらしきものが入っていて、Content-Typeはtext/javascriptとなっています。
調べてみると、JSONPはRFCではContent-Typeの規定が定められておらずかつてちゃんと規定しようと動きがあったものの結局定まらないままtext/javascriptが巷で使われているという状態のようです。
なのでJSONPのContent-Typeに関しては正しくはないにせよ間違ってはいなさそうです。
整形してくれないのは単にRestlet Clientが対応していないだけでしょう。

まとめ

取得データ型とそのContent-Typeをまとめるとこうなります。

XML JSON JSONP
リクルートWEBサービス(青) application/xml text/javascript text/javascript
RFC application/xml application/json 規定なし

Content-Typeが正しく設定されていないとアプリが想定通りの動作をしてくれないことがあるのでご注意を。

0
4
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
0
4