Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

マイクロサービスのためのフレームワークGoaのご紹介

1,005 views

Published on

マイクロサービスのためのgoa

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

マイクロサービスのためのフレームワークGoaのご紹介

  1. 1. マイクロサービスのための フレームワークgoaのご紹介 2017. 06. 23 オレシカナイトVol.2
  2. 2. Self Introduction
  3. 3. 渋江 一晃 MDH アドテク局 基盤グループ サーバーサイドエンジニア 2016年サイバーエージェント中途入社 最近Go始めました(Go歴3ヶ月(実質1ヶ月半))
  4. 4. Introduce goa
  5. 5. APIをどのように設計します か?
  6. 6. 考えることは色々ある - ルーティング - バリデーション - APIドキュメント ...
  7. 7. いざ始めると色々な問題が… - ころころ変わるAPI仕様 - バリデーションどうしよう - 追従できないAPIドキュメント APIの「側」を作るだけでも大変
  8. 8. ビジネスロジックに集中し たい
  9. 9. マイクロサービスのためのフレームワーク https://github.com/goadesign/goa
  10. 10. goa design firstを謳っているgoでマイクロサービスを構築するためのフレームワーク design DSLからコード生成(goagen)してAPIを作る
  11. 11. APIデザインライフサイクル
  12. 12. swagger生成ツール - go-swagger → swaggerが既にあると便利 → EP毎のミドルウェアの設定ができなかった - goa → DSLが読みやすかった → ドキュメントもgo-swaggerと比べて多かった
  13. 13. goaが自動生成してくれるもの - ルーティング - バリデーション - コントローラー - APIドキュメント(swagger)
  14. 14. How to use goa
  15. 15. 0. prepare $ go get -u github.com/goadesign/goa/... $ mkdir $GOPATH/src/goa-adder
  16. 16. 1.design $GOPATH/src/goa-adder/design/design.go
  17. 17. generate $ goagen bootstrap -d goa-adder/design
  18. 18. 2. review APIデザイン→generateした結果、以下が生成される - コントローラー - バリデーション - リクエスト・レスポンスのモデル - swagger定義 インターフェースのレビュー
  19. 19. 3. Implement プロジェクトルート直下にあるoperands.goを開く
  20. 20. 3. Implement operands.goを編集
  21. 21. 4. Run $ go build $ ./goa-adder 2017/06/20 16:51:49 [INFO] mount ctrl=Operands action=Add route=GET /add/:left/:right 2017/06/20 16:51:49 [INFO] listen transport=http addr=:8080
  22. 22. Swagger design/design.goに追記
  23. 23. $ goagen bootstrap -d goa-adder/design swagger.goが生成される main.goに追記してControllerをmountする
  24. 24. 再コンパイル $ go build && ./goa-adder
  25. 25. Tips
  26. 26. 基本的にいじるのは - Controller - main.go 他はgoaが生成するので触らない(上書きされる) 追加したControllerのマウントし忘れがちょくちょくある
  27. 27. ミドルウェア
  28. 28. エラーハンドリング goaが自動生成するエラーではなくアプリ独自のエラーで返したい → issue(#1076)で質問
  29. 29. goaが生成するエラーメッセージに該当のエラーが含まれていたら自前のエラー に置き換えるミドルウェアを実装
  30. 30. gorma goa向けのストレージプラグイン カスタムDSLをgenerateすると、自動でモデルの生成とDaoなどの便利なヘルパ ーも生成してくれる
  31. 31. まとめ - APIを作る上で最低限必要なコードを自動生成してくれる - swagger(json/yaml)も生成してくれる - DSLは読みやすい - 日本語ドキュメントも充実

×