Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
© - BASE, Inc. Go製APIの Validation error handling . . #gouncon kg Go Un Conference kg - @hgsgtk
Slide 2
Slide 2 text
© - BASE, Inc. このトークで持ち帰れること • Goでのバリデーションハンドリングの実例 • ネット上でなかなか⾒つからない(個⼈談) • UseCase: HTTPリクエスト時‧DB保存時 • Question/Suggestionください • 即時に反映されるかも知れません
Slide 3
Slide 3 text
© - BASE, Inc. ⾃⼰紹介 東⼝和暉 (Kazuki Higashiguchi) Twitter / GitHub : @hgsgtk バックエンドエンジニア BASE BANK, Inc. / Dev Division Go歴: - 趣味:2017.7〜 - 仕事:2018.6〜
Slide 4
Slide 4 text
© - BASE, Inc. 前提:全体パッケージ構成とUseCase バリデーション発⽣箇所 バリデーション発⽣箇所
Slide 5
Slide 5 text
© - BASE, Inc. こんな感じのバリデーションエラーを返したい
Slide 6
Slide 6 text
© - BASE, Inc. バリデーション実装全体像
Slide 7
Slide 7 text
© - BASE, Inc. バリデーション実装STEP >
Slide 8
Slide 8 text
© - BASE, Inc. Step Validatorを作成する > 使⽤ライブラリ • go-playground/validator • https://github.com/go-playground/validator • ginフレームワークで公式採⽤されている • →このライブラリをwrapした validation パッケージ を作成
Slide 9
Slide 9 text
© - BASE, Inc. go-playground/validatorの利⽤例 こんな感じで validate タグ設定できる
Slide 10
Slide 10 text
© - BASE, Inc. Step : Validatorを作成する > validation パッケージ • go-playground/validator を各種import
Slide 11
Slide 11 text
© - BASE, Inc. Step : Validatorを作成する • NewRequestValidator: Request Validator • NewDBValidator: Database Validator
Slide 12
Slide 12 text
© - BASE, Inc. バリデータを作成する NewValidator() Step : Validatorを作成する
Slide 13
Slide 13 text
© - BASE, Inc. カスタムエラーメッセージの定義 デフォルトは構造体名が出る → タグ名に変更 Step : Validatorを作成する
Slide 14
Slide 14 text
© - BASE, Inc. Step : Validatorを作成する > tagNameFuncの作成 • tagNameFuncを作成 • See also: https://github.com/go-playground/ validator/issues/ •
Slide 15
Slide 15 text
© - BASE, Inc. Step : Validatorを作成する > 作成されたValidator
Slide 16
Slide 16 text
© - BASE, Inc. バリデーション実装STEP >
Slide 17
Slide 17 text
© - BASE, Inc. Step : バリデーション実⾏
Slide 18
Slide 18 text
© - BASE, Inc. Step : カスタムタグ登録
Slide 19
Slide 19 text
© - BASE, Inc. Step : カスタムタグを作って利⽤する • “inlist”というタグを作る例
Slide 20
Slide 20 text
© - BASE, Inc. Step : カスタムタグを作って利⽤する • “inlist”というタグを作る例 “Inlist”タグは、 “inStatusList()”というルールを実⾏
Slide 21
Slide 21 text
© - BASE, Inc. バリデーション実装STEP >
Slide 22
Slide 22 text
© - BASE, Inc. Step : バリデーション結果 • error interfaceを満たした独⾃エラー型を作成する • 独⾃エラー型は、GetDetail()をシグネチャに持つ
Slide 23
Slide 23 text
© - BASE, Inc. Step : バリデーション結果 > バリデータが返すバリデーション結果
Slide 24
Slide 24 text
© - BASE, Inc. Step : バリデーション結果 > バリデータが返すバリデーション結果 Detail内に バリデーション結果が含まれる
Slide 25
Slide 25 text
© - BASE, Inc. バリデーション実装STEP >
Slide 26
Slide 26 text
© - BASE, Inc. Step : バリデーション結果を利⽤ > 構造体への設定 • バリデーションしたい構造体に validate タグを設定 • 構造体⾃⾝がvalidatorを実⾏する振る舞いを持つ
Slide 27
Slide 27 text
© - BASE, Inc. Step : バリデーション結果を利⽤ > エラー結果を利⽤ • error 型で返却される • validation.Error interface型か判定
Slide 28
Slide 28 text
© - BASE, Inc. Step : バリデーション結果を利⽤ > エラーレスポンス
Slide 29
Slide 29 text
© - BASE, Inc. Step : バリデーション結果を利⽤ > こんな感じのバリデーションエラーを返る
Slide 30
Slide 30 text
© - BASE, Inc. Step : バリデーション結果を利⽤ > DB保存時のバリデーション
Slide 31
Slide 31 text
© - BASE, Inc. Step : バリデーション結果を利⽤ > DB保存時のバリデーション INSERTのSQL実⾏前に バリデーション
Slide 32
Slide 32 text
© - BASE, Inc. まとめ • ネット上にGoでのバリデーションハンドリングの実 例を晒した • Question/Suggestionください • 即時に反映されるかも知れません
Slide 33
Slide 33 text
Any Question or Suggestion?