Giter VIP home page Giter VIP logo

go_todo_app's Introduction

go_todo_app

このリポジトリは書籍「詳解Go言語Webアプリケーション開発」のサンプルコードリポジトリです。

項目 データ
書籍名 詳解Go言語Webアプリケーション開発
URL https://www.c-r.com/book/detail/1462
ISBN 978-4-86354-372-0
正誤表 https://github.com/budougumi0617/go_todo_app/blob/main/errata.md

作成するアプリについて

このリポジトリで作成するWebアプリケーションは認証付きのTODOタスクを管理するAPIサーバーです。

最終的には次のエンドポイントを実装します。

HTTPメソッド パス 概要
POST /regiser 新しいユーザーを登録する
POST /login 登録済みユーザー情報でアクセストークンを取得する
POST /tasks アクセストークンを使ってタスクを登録する
GET /tasks アクセストークンを使ってタスクを一覧する
GET /admin 管理者権限のユーザーのみがアクセスできる

Docker Composeを利用してAPIサーバー、MySQL、Redisを起動します。
主に実行するであろうコマンドは Makefile に事前定義されています。

$ make
build                Build docker image to deploy
build-local          Build docker image to local development
up                   Do docker compose up with hot reload
down                 Do docker compose down
logs                 Tail docker compose logs
ps                   Check container status
test                 Execute tests
dry-migrate          Try migration
migrate              Execute migration
generate             Generate codes
help                 Show options

動作確認方法

このリポジトリのコードがローカルで実行できるか確認する手順です。

サーバを起動する

事前にDockerイメージを作成しておきます。

$ make build-local

Docker Composeを使って各サービスを起動します。

$ make up

MySQLにマイグレーションを実行します。

$ make migrate

ユーザーを作成します。

$ curl -X POST localhost:18000/register -d '{"name": "budou", "password":"test", "role":"admin"}'
{"id":37}

ユーザーの認証情報を使っていくつかタスクを登録します。

$ curl -i -XPOST -H "Authorization: Bearer $(curl -XPOST localhost:18000/login -d '{"user_name": "budou", "password":"test"}' | jq ".access_token" | sed "s/\"//g")" localhost:18000/tasks -d @./handler/testdata/add_task/ok_req.json.golden
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1023  100   982  100    41   7756    323 --:--:-- --:--:-- --:--:--  8525
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Wed, 20 Jul 2022 17:21:03 GMT
Content-Length: 9

{"id":76}%

$ curl -XPOST -H "Authorization: Bearer $(curl -XPOST localhost:18000/login -d '{"user_name": "budou", "password":"test"}' | jq ".access_token" | sed "s/\"//g")" localhost:18000/tasks -d @./handler/testdata/add_task/ok_req.json.golden
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1023  100   982  100    41   8634    360 --:--:-- --:--:-- --:--:--  9560
{"id":77}%

タスクを表示して、登録済みのタスクが表示されれば期待通り動いています。

$ curl -XGET -H "Authorization: Bearer $(curl -XPOST localhost:18000/login -d '{"user_name": "budou", "password":"test"}' | jq ".access_token" | sed "s/\"//g")" localhost:18000/tasks | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1023  100   982  100    41   8158    340 --:--:-- --:--:-- --:--:--  9133
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   113  100   113    0     0  13450      0 --:--:-- --:--:-- --:--:-- 28250
[
  {
    "id": 76,
    "title": "Implement a handler",
    "status": "todo"
  },
  {
    "id": 77,
    "title": "Implement a handler",
    "status": "todo"
  }
]

各エンドポイントの仕様の詳細は書籍を参照ください。

リポジトリの構成について

書籍ではCHAPTER 13からハンズオン形式でAPIサーバを実装します。
本リポジトリのルートディレクトリにあるサンプルコードはハンズオンを最後まで実施した状態のコードです。
なお、指摘や修正があった場合はコードも修正されます。

_chapterNで始まるディレクトリとその中にあるsectionNディレクトリは該当CHAPTER/SECTION完了時のコード状態を保存しています。
紙面上の断片的なコードで理解が難しい場合はご利用ください。既知の紙面上のコードの不備も修正済みです。

書籍・コードの内容について

go_todo_app's People

Contributors

budougumi0617 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.