• Stars
    star
    187
  • Rank 206,464 (Top 5 %)
  • Language
    Go
  • License
    MIT License
  • Created over 2 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

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完了時のコード状態を保存しています。
紙面上の断片的なコードで理解が難しい場合はご利用ください。既知の紙面上のコードの不備も修正済みです。

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

More Repositories

1

layer

Analyzer: Checks whether there are dependencies that illegal cross-border the layer structure.
Go
43
star
2

blog-kpi-collector

`clasp`コマンドを使ってKPIを取得するgoogleスプレッドシートを生成するスターターキット
TypeScript
22
star
3

leetgode

LeetCode CLI for Gophers. This CLI can generate a skeleton code with test code.
Go
17
star
4

cmpmock

Readable & Flexible matcher for https://github.com/golang/mock
Go
17
star
5

nrseg

Insert function segments into any function/method for Newrelic APM.
Go
17
star
6

lgen

Generate boilerplates for layered architecture by your templates.
Go
12
star
7

nrzap

Go
11
star
8

lambda-go-dynamodb-local

Lambda and DynamoDB by SAM CLI
Go
9
star
9

gopl

Study Golang by use of "The Go Programming Language" in 2015-2016.
Go
8
star
10

php-go

W.I.P. A Go Interpreter written in PHP 7.4
PHP
8
star
11

action-pr-size-checker

Verify pull request size without specified files by file name.
Shell
7
star
12

regexponce

Analyzer: Verify that regular expression compilation just called at once.
Go
6
star
13

mysql-sakila

Dockerfiles for MySQL pre-loaded sample database "Sakila Sample Database".
PLpgSQL
6
star
14

gsp

Learning System Programing by Go.
Go
6
star
15

terraform-provider-pixela

Terraform Provider for Pixela( https://pixe.la/ )
Go
5
star
16

simple-json-api-by-chi

RESTful JSON API by Go.
Go
4
star
17

importcheck

Analyzer for validate package relationships.
Go
4
star
18

isucon-cheatsheet

Shell
4
star
19

lsas

List view of aws autoscaling group.
Go
4
star
20

go-sql-sample

技術書典6のサンプルコード
Go
4
star
21

sandbox-grpc

Study gRPC framework
Go
4
star
22

pronami_php

Study PHP by "気づけばプロ並みPHP"
PHP
3
star
23

waiig

Study the interpreter by "Writing An Interpreter In Go"
Go
3
star
24

sample_tbls_actions

Makefile
3
star
25

dkl

Shows containers(or pods), and exec(login) selected it.
Go
3
star
26

gigi

Verify pull request size without specified files by file name.
Go
3
star
27

leetcode

My leetcode answers written by Go.
Go
2
star
28

Testable

Allows test code to call methods and properties even if non public.
C#
2
star
29

go-testing

Practice using testing pkg.
Go
2
star
30

reveal.js-myMaster

presentation by use of reveal.js
JavaScript
2
star
31

gas-typescript

TypeScript
2
star
32

cimg_go

Continuous Integration for Go by the by CircleCI 2nd generation image(cimg/go)
Go
2
star
33

caww

W.I.P. Clean Architecture with Wire
Go
2
star
34

action-newrelic-segment-lint

Verify that the segment of New Relic is created in the function/method with reviewdog
Shell
2
star
35

pixela

Pixela (https://pixe.la/) API library for Go.
Go
1
star
36

sandbox_goswagger

Try https://goswagger.io/
Go
1
star
37

isucon11f-20220710

Vue
1
star
38

actions-filter-branch

Sandbox for GitHub Actions
HCL
1
star
39

list_func

Python
1
star
40

autorelease-by-release-it-on-actions

the demo repository of auto release
1
star
41

budougumi0617.github.io

HTML
1
star
42

redmine

Java Program with Redmine REST API
Java
1
star
43

til

Today, I Learned.
PHP
1
star
44

errors-example

Go
1
star