SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

EclipseでGoプログラミング! GoClipseのインストールとGojiフレームワークを使ったWeb APIの作成

  • X ポスト
  • このエントリーをはてなブックマークに追加

Web APIアプリケーションを構築する

 ここまでの説明で、「Gojiを利用したWebアプリケーションのルーティングとハンドラの書き方」「構造体とJSONフォーマットのマッピング」「gorp によるデータベース操作」という、Webアプリケーション構築に必要な3つの要素がそろいました。最後に、これらの要素を組み合わせてシンプルなWeb APIアプリケーションを作成してみます。

 完成したコードはGistのこのページにアップロードしています。簡易的なものとはいえども、データベース操作を伴うWeb APIアプリケーションが100行に満たないコードで実現できました。

 Eclipseに新しいプロジェクト「goji_api」を作成して、完成したコードをビルドしてみましょう。「src」の下に「goji_api」フォルダを作成し、その下に「main.go」ファイルを作成して、完成したコードの内容をコピーして貼り付けます。MySQL接続文字列の usernamepassword などの部分は、各自の環境に合わせて書き換えてください。

goji_api
新しいプロジェクト「goji_api」を作成して完成したコードをビルド

 

 実行ファイル「goji_api.exe」が生成されれば成功です。さっそく実行してみましょう。データベースへの接続情報に問題がなければサーバ処理が開始されます。

start goji
生成された「goji_api.exe」を実行

 

 まずはユーザの情報を取得するAPIを呼び出します。ID = 1 であるユーザの情報を取り出す場合のURLは下記のようになります。

http://localhost:8000/user/1

 

 GET メソッドでアクセスするAPIなので、Webブラウザ上から直接参照することができます。

getUser API
getUser APIでWebブラウザ上から直接参照

 

 JSONデータが正しく返されることが確認できました。

 次に新規ユーザの情報を登録するAPIを呼び出すのですが、こちらは POST メソッドが前提であるため、Webブラウザからの単純なアクセスが難しくなっています。そこで curl コマンドを使ってアクセスします。Git for Windowsを導入しているのであれば、そのオマケとしてコマンドプロンプトから呼び出せるようになっているはずです。今回は curl コマンドを下記のような形式で使用します。

C:¥> curl -d "name=Yamada Hanako" -d "email=hanako@example.com" http://localhost:8000/user

 

 -d オプションを複数個並べて、APIが要求するパラメータ nameemail をAPIのパス「/user」へ送信しています。ユーザ名を日本語にしたいところなのですが、通常のコマンドプロンプトから「UTF-8」エンコーディングでパラメータを送信することが難しいため、全てASCII範囲の文字のみを使用しています。

postUser API
postUser APIで新規ユーザの情報を登録

 

 成功すると、データベースに保存された内容がJSONフォーマットで出力されます。新しく登録したユーザに ID = 30 が割り当てられたことが確認できました。もう一度、前のAPIに戻って ID = 30 のユーザ情報をWebブラウザから参照しましょう。

getUser API
getUser APIで登録したユーザを確認

 

 正しく登録されていることが確認できました!

完成したコードのポイント

 最後に、完成したコードのポイントをいくつか解説してみます。

 User 構造体の定義では、テーブルへのマッピングのための db タグと、JSONへのマッピングのための json タグの両方を付加しています。

type User struct {
    Id        int       `db:"id" json:"id"`
    Name      string    `db:"name" json:"name"`
    Email     string    `db:"email" json:"email"`
    CreatedAt time.Time `db:"created_at" json:"created_at"`
    UpdatedAt time.Time `db:"updated_at" json:"updated_at"`
}

 

 POST メソッドで呼び出されるハンドラ内でフォームデータを取得するには、次のように r.ParseForm() を呼び出してから r.FormValue("key") で取り出します。GET メソッドの場合と違って少々複雑な仕組みになっています。

r.ParseForm()
u := User{Name: r.FormValue("name"), Email: r.FormValue("email"), CreatedAt: time.Now(), UpdatedAt: time.Now()}

 

 何らかのエラーが発生した場合には http.Error() を使用して任意のステータスコードを返すことができます。「パラメータで指定されたIDに対応するユーザが存在しない」という意味を表すために 404 のステータスコードを返しています。

if err != nil {
    http.Error(w, "Not found", 404)
} else {
    renderUser(w, &u)
}

 

おわりに

 GoによるWeb APIアプリケーション開発について解説してみましたが、いかがでしたでしょうか。2009年に登場した、まだ年若いこのプログラミング言語は最近著しい成長を遂げています。各所での採用事例も増えており、特にコンテナ型仮想化ツールの「Docker」がGoで書かれていることは有名です。

 今後も、その適用領域を広げていくであろうと思われるGoに、1人でも多くの開発者が触れてほしいと祈りつつ解説を終わります。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

松尾 愛賀(マツオ アイガ)

株式会社ラクーンの技術戦略部で働くエンジニアです。主に新事業系の技術基盤などを担当してます。RubyとGoとAWSとDebian系ディストロが好み。・株式会社ラクーン技術ブログ:http://techblog.raccoon.ne.jp/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8374 2015/01/09 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング