どこにでもいるSEの備忘録

たぶん動くと思うからリリースしようぜ

Vue.jsを使ってみた(外部APIからデータを取得する)

この前はこんな感じにやってました。

nogawanogawa.hatenablog.com

状態管理も触れ、routingも体験したので、ちょっとばかし応用編です。 前回検索画面を作ったので、それを使って外部のAPIと連携していきたいと思います。

こういった外部へのアクセスにはaxiosが提供されています。

参考にしたのはこちらとこちら。

Vue.js入門 基礎から実践アプリケーション開発まで

Vue.js入門 基礎から実践アプリケーション開発まで

axios

下の記事を見る限り、こんなaxiosを使って外部APIから情報を取得してレンダリングすることがベーシックなアプローチのようです。

ウェブアプリケーションを構築するとき、 API からデータを取得して表示することがよくあります。これを行うにはいくつかの方法があり、一般的なアプローチは Promise ベースの HTTP クライアントの axios を使うことです。

jp.vuejs.org

アクセス可能なAPIに対して、jsonを投げたりして、任意のデータをとってこれるようです。

知らなきゃいけないのはこんなもんなんで、早速作ってみます。

上の記事では、こんな感じに CoinDesk API からデータをとってきています。

mounted () {
    axios
      .get('https://api.coindesk.com/v1/bpi/currentprice.json')
      .then(response => (this.info = response))
  }

これで、変数infoに戻り値のjsonが格納されます。

この辺をVuexと組み合わせてやってみます。

Vuexについてはこちら。

nogawanogawa.hatenablog.com

外部から取得情報をとるので、Actionで外部にアクセスして、MutationでStateを更新するという一連の流れが必要になります。

自前REST APIと連携する

APIといっても大したものではなく、とりあえずGETメソッドを受け取ったら決まった応答を返すだけです。 前回Flaskをやっていたので、速攻です。

若干違うのは、ブラウザを使用するのでクロスドメイン制約に引っかかるので、そこだけ制約を外してやります。

qiita.com

試しにやってみます。

from flask import Flask, request, jsonify
from flask_cors import CORS
app = Flask(__name__)

CORS(app)

@app.route('/sample.json', methods=['GET'])
def get_json_from_dictionary():
    dic = {
        'foo': 'FOO',
        'bar': 'BAR'
    }

    return jsonify(dic)

応答はこんな感じになるようにしてます。

~ $curl localhost:5000/
{"bar":"BAR","foo":"FOO"}

そんでもって、応答をVue側で受け取って画面表示してみます。

f:id:nogawanogawa:20190328182129g:plain

※Flaskのサーバーは自前で建てないと動かないのでgithub-pagesには公開してないです。

感想

これができれば、JSON形式でのデータのやり取りが一通りできるようになりますね。 だんだんSPAっぽくなってきたと思います。