Giter Site home page Giter Site logo

training-go-httpserver's Introduction

training-go-httpserver

履歴

v0.0.21

  • testclientにperl script を追加

v0.0.20

  • 使用していない model.User.Role を削除

v0.0.19

  • middlewareによるjwtの認証チェックを追加

v0.0.18

  • jwter を追加

v0.0.17

  • login を追加

v0.0.16

  • register を追加

v0.0.14

  • httpserver と service の結合
  • main.go の最低限の動作確認

v0.0.13

  • service の追加
  • httpserver/handler/api の追加
  • common/mock の生成

v0.0.12

  • repository/database/sqlite の追加
  • model の追加

v0.0.11

  • v0.0.6 から再構成
  • go-kit/log の導入
  • パッケージの再構成

v0.0.6

  • ハンドラにDBとのIOをserviceパッケージ経由で紐付け
  • gomockでのモック生成、モックを使ったテスト
  • clockをtime.Timeではなくstringに変更
  • handler は store ではなく、Serviceインターフェイスを利用する

gomock使うために

go install github.com/golang/mock/[email protected]

この辺はもう分かりにくいので書き出すと

handler パッケージ
  service.go に AddTaskService などが interface として定義されており
  これらの実装は service パッケージの add_task.go など

service パッケージ
  interface.go TaskAdder などがinterfaceとして定義されており
  これらの実装は storeパッケージのデータベースI/O


handler.AddTaskService = (service.AddTask)AddTask
service.TaskAddr = (store.Repository)AddTask
となっているけど、

service/add_task.go で
  struct AddTask { store.Execer, TaskAdder } を定義していて
  そのAddTaskのメソッドとして、AddTaskを定義していて、
  メソッド内で TaskAdderつまり store.RepositoryのAddTaskを実行している
    func (a *AddTask) AddTask(){ ... Taskadder.AddTask(ctx,db,..) ... }
  名前の使い方が分かりにくいレベルを超えている
  
mux.go でこうなっているのも重すぎる
  r := store.Repository{}
  at := &handler.AddTask{
    Service: &service.AddTask{ *sqlx.DB, &r }
  }

v0.0.5

  • sqlite3をgolang-migrateでUPする
  • sqlite3にdate/time型がないので調整
  • sqlxをラップするinterfaceの定義
  • clockパッケージの追加
  • DBへのIOを行うメソッドをRepository構造に追加
repository.go にある New() は、*sqlx.DB を返す、
それとは別に Repository構造の定義があり、これは Clocker を持っているだけ

v0.0.4

  • entity.Task でタスク構造の定義
  • handler でタスクを追加する http.HandlerFunc を満たす ServeHTTP を作成
  • タスクの登録時にリクエストボディのJSONを検証するため go-playground/validator を利用
  • handler にJSONを返すヘルパー関数を追加
  • goldenファイルによるテストを追加
  • テストにおけるJSONの検証に go-cmp を利用
  • タスクを一覧するエンドポイントの追加
  • go-chi をルーティングに利用
entity.Task
がタスクの構造で

store.TaskStore = { LastID, map[TaskID]*Task }
               .Add( Task )
               .All() Tasks
がタスク操作の構造

storeに var Tasks で store.TaskStore がある状態

hander には store.TaskStore をさらにラップした
AddTask, ListTask があり、これは
.ServeHTTP をサポートしていて、muxでhandlerとして使われる

v0.0.3

  • シグナルを受け取る
  • Server構造体に機能を分離してserver.goを作成
  • mux.go を作成

v0.0.2

  • 起動ポートを環境変数から読み込み

v0.0.1

  • contextを利用したキャンセル可能なhttpserver起動
  • testの作成

参考

  • 詳解GO言語Webアプリケーション開発 9784863543720

を参考にして始めたが、途中 v0.0.11から全然違う道を進んでしまった

TODO

  • 今回使ったパッケージの使用例部分の抜粋と説明の抜き書き

training-go-httpserver's People

Contributors

inazak avatar

Watchers

 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.