Vue.js を用いて HTTP Get や Post を発行する方法はいくつか存在しますが、 本記事では Fetch を用いて Vue CLI プロジェクト から HTTP Get / Post を発行する方法について整理していきます。
@vue/cli 4.5.13 npm: 7.24.0 node: v14.17.0
Get 発行処理の実装
Vue CLI プロジェクトの作成
まずは、 Vue CLI プロジェクト を作成していきます。今回は Vue 3 で作成した プロジェクト を用いることにします。
Vue CLI v4.5.12 ┌───────────────────────────────────────────┐ │ │ │ New version available 4.5.12 → 4.5.13 │ │ │ └───────────────────────────────────────────┘ ? Please pick a preset: Default ([Vue 2] babel, eslint) ❯ Default (Vue 3 Preview) ([Vue 3] babel, eslint) Manually select features
続いて、今回 Get / Post を実装する Fetch.vue という名称の コンポーネント を準備します。 Get / Post のテスト先として httpbin.org という テスト サイト を利用することにします。
こちらの サービス では、5種類の HTTP Method を提供していますが、 今回は以下の 2 つを利用させていただくことにします。
- /get
- /post
引用元: https://httpbin.org/#/HTTP_Methods
Fetch.vue Template 部分の作成
今回は Get パラメータ として 名前 (name) と 年齢 (age) の2つを持つ Get Request を発行してみます。
<template> <div> <h2>Get</h2> <label >Name<input class="form-control" type="text" placeholder="name" v-model="name" /></label> <br /> <label >Age <input class="form-control" type="number" placeholder="age" v-model="age" /> </label> <br /> <!-- Exec button and show result --> <input class="btn btn-primary" type="button" value="Get" @click="execGet" /> {{ resGet }} </div> </template>
npm run serve を用いて実行すると 以下の UI が表示されます。
Fetch.vue Script 部分の作成
続いて、Get ボタン を クリック することで Fetch を使って Get を発行する部分を実装します。
- Get パラメータ には UI の Name, Age の値をそれぞれ用います
- API の レスポンス を resGet に、 ステータスコード を statusGet に格納していきます。
<script> export default { data() { return { name: "David", age: 25, resGet: null, statusGet: 0, } }, methods: { execGet() { let url = new URL("https://httpbin.org/get") let params = { name: this.name, age: this.age, } url.search = new URLSearchParams(params).toString() fetch(url) .then((response) => { this.statusGet = response.status return response.json() }) .then((data) => { this.resGet = data }) }, }, } </script>
これで、 Get を発行する準備が整いましたので、早速実行してみます。
Vue.js プロジェクト から Get 発行
この状態で実行します。 レスポンスの値が取得され、表示することができました。
なお、 レスポンス には IP アドレス を 含むため、 一部割愛しています。
それでは、引き続き Post 発行処理を実装していきます。
Post 発行処理の実装
Fetch.vue Template 部分の作成
先程作成した Template に 以下の Post 発行用の UI を追加します。
<h2>Post</h2> <label >Description <input type="text" name="description" value="Hi! This is John." /></label> <br /> <!-- Exec button and show result --> <input class="btn btn-primary" type="button" value="Post" @click="execPost" /> {{ resPost }}
追加後の UI は以下のようになります。
Script 部分の作成
先程作成した execGet 同様 methods に execPost を追加していきます。 また data にも 必要な要素をあわせて追加します。
execPost() { let url = new URL("https://httpbin.org/post") fetch(url, { method: "POST", body: this.description, }) .then((response) => { this.statusPost = response.status return response.json() }) .then((data) => { this.resPost = data }) },
Post ボタンをクリックすると以下を表示します。data 部分に 意図通り値がセットされていることがわかります。
Vue 開発ツール上で確認すると、 ステータスコード も 取得することができています。
まとめ
今回は Localhost から 簡易的に API を発行するといったことを実施しましたが、 httpbin.org 以外の 多くの API サービス では No ‘Access-Control-Allow-Origin’ として http://localhost が許容されていないため、fetch が COR エラー となってしまう点に注意してください。
- Vue.js から Fetch を用いて API に Get / Post リクエスト を発行可能
- httpbin.org を用いて、 簡易的な APIテスト が可能
関連記事
参照情報
Fetch API + Vue.js でGoogle Books APIから取得した書籍情報を表示する
Postman Echo – Published Postman Templates