Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@yukpiz
Last active September 8, 2018 08:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yukpiz/d74333d452f1ab503df09aef6e89407f to your computer and use it in GitHub Desktop.
Save yukpiz/d74333d452f1ab503df09aef6e89407f to your computer and use it in GitHub Desktop.

golang-hands-on(解なし)

※計画中の資料ですので、内容が変わる事があります。

  • 全体で50分で達成することを目標とします
  • 各テーブルでのサポーター(3人)

Introduction

Go言語では非常に簡単にWebAPIサーバーを構築する事ができます。
基本的にはnet/httpパッケージを利用し、他にも有志によって開発された外部パッケージを使いながら、
色んな機能を持ったAPIサーバーを構築していきます。

ここでは、課題を通していくつかの機能を実装してもらいます。

  • Go言語の構文に慣れる事
  • 課題を通してGo言語のWebAPIサーバーの実装方法を知ること

APIサーバーとは?

http(s)://から始まるのURLでアクセスされるリモートに存在するマシンです。
本来Webサーバーと呼ばれるマシンは静的、または動的なWebページを返しますが、
バックエンドにAPIサーバーを用意して、RESTと呼ばれる形式でJSONデータをやり取りしてWebページを表示するページも多く存在します。

今回作るAPIサーバーはまさにそのリクエストに応じてJSONデータを返したりする、WebAPIサーバーです。
コードを書いてコンパイルすると、http://localhost:8080 でアクセスできるようにして開発を進めていきます。

課題1: FizzBuzz API

  • GET localhost:8080/fizzbuzz/:num
  • 1~:numまでの数値で3で割り切れる場合Fizz、5で割り切れる場合Buzz、両者で割り切れる場合はFizzBuzz!と出力してみましょう。
  • 整数・正数でないパラメータが渡された場合400エラーにしましょう!
  • julienschmidt/httprouterを使いましょう

外部パッケージをインストールする

$ go get github.com/julienschmidt/httprouter

外部パッケージのドキュメントを見る

$ godoc github.com/julienschmidt/httprouter

課題2: プロフィールを返すAPIを作る

  • GET localhost:8080/profile/:name
  • BobとAliceならプロフィールをJSON形式で返しましょう、それ以外は404エラーにしましょう
  • BobとAliceのプロフィールは以下です
Name: Bob
Age: 25
Gender: Man
Favorite Foods: Hamburger, Cookie, Chocolate
Name: Alice
Age: 24
Gender: Woman
Favorite Foods: Apple, Orange, Melon

課題3: プロフィールを保存するAPIを作ろう

  • POST localhost:8080/profile
  • データベースなんてありません!
  • 同じ名前のユーザーは登録してはいけません、400エラーを返しましょう
  • リクエストで受け付けるBodyパラメーターは以下です
name string
age int
gender string
favorite_foods: []string
$ curl -XPOST -d "{\"name\": \"yukpiz\", \"age\": 28, \"gender\": \"Man\", \"favorite_foods\": [\"Curry\"]}" http://localhost:8080/profile

課題4: 保存したプロフィールを返すAPIを作ろう

  • GET localhost:8080/profile/:name
  • 課題3で201が返るようになったはずです
  • でも保存されているプロフィールを見ることができません。
  • 課題2と課題3を組み合わせて保存したプロフィールを取得してみましょう

課題5: プロフィールAPIのクライアントを作る

  • プロフィール取得API(GET)を呼び出すAPIクライアント
  • プロフィール保存API(POST)を呼び出すAPIクライアント
  • flagパッケージ
  • 以下のように呼び出せるようにしてみましょう
$ go run main.go -name yukpiz
$ go run main.go -name yukpiz -age 28 -gender Man -favorite-foods "Apple Orange"

番外編: HTMLを返してみる

  • html/templateパッケージ
  • 以下のようなページ構成でWebページを返すサーバーを立ててみましょう

Indexページ

Image from Gyazo

Aliceプロフィールページ

Image from Gyazo

Bobプロフィールページ

Image from Gyazo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment