GoとVueを使ってREST APIを作成する方法

markdown-img-paste-20210703082154432.webp
目次

はじめに

Goで取得したAPIの結果をVueで表示する方法について解説した記事です。記事内では、バックエンドでのREST APIの実装方法やフロントエンドでのVueプロジェクトの作成方法を詳しく説明しています。以下、記事のタグ情報について記載します。

Go + Vue.js でGETとPOSTをやってみる

わかりやすかったのでこの記事を参考に作り込んでいきましょう。

今回作るフォルダ構成はこんなのになります。

 バックエンド(Go)

今回はGoをREST APIとして動作させます。 echoパッケージをつかうのが簡単そうなのでこちらを利用します。 Github:labstack/echo

go get github.com/labstack/echo

コード解説

記事では、バックエンドでのREST APIの実装方法として、echoパッケージを使った方法を紹介しています。また、フロントエンドでのVueプロジェクトの作成方法やaxiosを使ったREST APIの叩き方も解説しています。 具体的なコード例も掲載しています。

実装コード

echoのサンプルコードをほとんどそのまま使っています。 import パッケージの所で、v4などVersionが記載されていたのですが私の環境では動きませんでした。 なので、V4の記載を取っ払っています。

vueで作ったフロントエンドをGoから立ち上げるので一文追加しています。

e.Static("/", "dist/")
package main

import (
    "net/http"

    "github.com/labstack/echo"
    "github.com/labstack/echo/middleware"
)

func main() {
    // Echo instance
    e := echo.New()
    e.Static("/", "dist/")

    // Middleware
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())

    // Routes
    e.GET("/hello", hello)

    // Start server
    e.Logger.Fatal(e.Start(":1323"))
}

// GETリクエスト
func hello(c echo.Context) error {
    return c.String(http.StatusOK, "hello, world")
}

これで、/helloのアドレスを叩けば、「hello, world」を返すREST APIができました。

フロントエンド(vue)

次はこのREST APIを叩いて結果を表示するVueプロジェクトを作りましょう。

vue create rest
Vue CLI v4.5.9
┌──────────────────────────────────────────┐
│                                          │
│   New version available 4.5.9 → 4.5.13   │
│     Run npm i -g @vue/cli to update!     │
│                                          │
└──────────────────────────────────────────┘

? Please pick a preset:
  Default ([Vue 2] babel, eslint)
> Default (Vue 3 Preview) ([Vue 3] babel, eslint)
  Manually select features

Vue 3を選択肢、パッケージインストーラはyarnを選択します。 yarnでなくとも問題は無いですが、以下yarn前提で進めます。

今回は、axiosを使いREST APIを叩くので追加します。

yarn add axios

実装コード

App.vue

サンプルから不要なものを削ります。 templteの中身を削するだけで良いです。

<template>
  <HelloWorld/>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue'

export default {
  name: 'App',
  components: {
    HelloWorld
  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

HelloWorld.vue

templateの中身はこのようしました。 ボタンが押されたら、sendRequestメソッドを呼び出してバックエンド側のREST APIにアクセスします。 取得した結果を 変数に格納して表示しています。

<template>
  <div class="hello">
    <button @click="sendRequest">リクエスト送信</button>
    <h1>取得結果</h1>
    <p>GET:<br/>{{edinet}}</p>
  </div>
</template>

<script>
import axios from "axios"

export default {
  name: 'App',
  data:()=>{
    return{
      edinet:"",
    }
  },
  methods: {
    sendRequest: async function(){
      const getRequestNoParam = await axios.get("/hello")

      this.edinet = getRequestNoParam.data
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
  margin: 40px 0 0;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>

実行結果

実行するにはvueプロジェクトをビルドして、main.goを立ち上げます。

yarn build
go run main.go

今回はGo側でポート番号を1323に設定しているので http://localhost:1323 にアクセスします。

良くある警告がでることもありますので許可してあげてください。

アクセスしてボタンを押すとこのような画面がでます。

余談

今回作ったアプリは結構汎用性が高く遊びごたえがあります。

別の使いみちとしては、Go側からコマンドプロンプトが実行できてその結果をVueで出力もできます。

textlintを叩いてその結果を表示するようなアプリがあると仕様開発するときとか結構便利です。 echoは配列を返すこともできるため、帰ってきた配列をで表示するみたいな使い方をすれば一台のPCを複数にでシェアしたいようなケースに対応できます。

業務時間にポチポチ作ってましたが1時間ぐらいでそれなりに使えるものができてよかったです。 需要があれば業務に抵触しない範囲で一般化して書きます。

まとめ

本記事では、GoとVueを使ったREST APIの作成方法について解説しました。バックエンドでのREST APIの実装方法やフロントエンドでのVueプロジェクトの作成方法、さらにはaxiosを使ったREST APIの叩き方などを詳しく説明しました。これらの内容を理解すれば、初めてのREST API作成にも挑戦できるようになるでしょう。

Related Post

> GoとVueを使ってREST APIを作成する方法
仮想通貨自動売買システム ~注文編~
> GoとVueを使ってREST APIを作成する方法
Yahoo APIを使って周辺の飲食店を検索しよう
> GoとVueを使ってREST APIを作成する方法
FlutterでJSONを詰め込むための構造体を簡単に作る方法
> GoとVueを使ってREST APIを作成する方法
w3schools.comの紹介
> GoとVueを使ってREST APIを作成する方法
EDINET APIを使って過去5年分の有価証券報告書を取得して株選びに役立てる方法
> GoとVueを使ってREST APIを作成する方法
GolangとGoogle Chartで時系列感情分析グラフを作成

おすすめの商品

>