様々な分野で用意されている便利なAPIですが、WEBページから利用しようとするとつまずきがちです。
ブラウザはドメインの異なるデータを取得できません(同一生成元ポリシー)。
CORS (Cross-Origin Resource Sharing) ヘッダーのAccess-Control-Allow-Originが「*」とでも設定されていれば使えますが、まずないです。
AWSを使って外部のAPIを使うための方法をいくつかまとめます。
取得方法
サーバー(EC2,Lightsailなど)を使う
ブラウザの制限なので、サーバーやシステムからアクセスする分には問題ないです。
DBに入れる、datにして保存する、ソケット通信で表示するなどができます。
API Gateway
Amazon API GatewayにはAPIをパススルーする設定があります。
これによって自分でAccess-Control-Allow-Originを設定できます。
またリソースにパラメータを設定して渡すこともできる。
Lambda
AWS Lambdaは実行時間単位のサーバ利用ができるサービスです。
これを用いてAPIを叩いてデータ取得ができます。
1 2 3 4 5 6 7 8 9 |
const https = require('https'); exports.handler = (event, context, callback) => { https.get("URL", function(res) { var x=""; res.on("data", function(chunk) {x+=chunk;}).on("end",function(){ context.succeed(JSON.parse(x)); }); }); }); |
この結果をDBに入れたり、API Gateway経由で取得したりします。
ユースケース
通常はAPI Gatewayのパススルーで問題ないと思います。
何らかの処理を挟んだり、複数のAPIをまとめて取得する
API Gateway から Lambda を起動させAPIからデータ取得します。
何かしらの処理を行って、必要なデータを返すようにします。
多少複雑にはなりますが、好きな形のデータを作って渡すことができます。
非常にアクセスの多い機能のAPI
定期的にLambdaを起動させてDBやdatファイルとして保存する。
メリット:API使用量が一定で抑えられます。
デメリット:最新情報でない、全サービスの使用料がかかる。