Building API Server-side Architecture for beginners

Building API Server-side Architecture for beginners

It is the material presented in GopherCon 2019 Lightning Talk
 

88964b936e864ca7d326272eaa70fa9a?s=128

Kazuki Higashiguchi

July 24, 2019
Tweet

Transcript

  1. © - BASE, Inc. Building API server-side architecture for Beginners

    GopherCon . . - @hgsgtk
  2. © - BASE, Inc. Talk abstract • A practical approach

    to build server-side architecture in a Go project • Especially for teams who do not have Go experience in business
  3. © - BASE, Inc. Kazuki Higashiguchi / Backend engineer in

    Japan! About me @hgsgtk BASE BANK, Inc. / Dev Division / Tech lead
  4. © - BASE, Inc. Problem of building architecture for beginners

    Approach to build architecture Summary Talk structure
  5. © - BASE, Inc. Problem of building architecture for beginners

    Approach to build architecture Summary Talk structure
  6. © - BASE, Inc. Why I need server-side architecture .Keep

    a design easy to change • -> Separate external input/output and business logic .Reach common understanding of implementation policies in a team • -> To make readable and maintainable code
  7. © - BASE, Inc. • No absolute answer for any

    projects • We should determine a suitable architecture for the project Reality of building architecture
  8. © - BASE, Inc. • We should consider various things

    • Service requirements • Team member ability • Service scale • etc To determine a suitable architecture
  9. © - BASE, Inc. Problem of building architecture for beginners

    • We should consider various things • Service requirements • Team member ability • Service scale • etc For beginners, “Team member ability” is a factor that can not be ignored
  10. © - BASE, Inc. Go beginners have a lot of

    questions How to implement API server by net/http package How to write an unit test How to use interface type - Go basic questions -
  11. © - BASE, Inc. If we determine complicated architecture from

    the beginning How to implement API server by net/http package How to write an unit test - Go basic questions - ex. “Adopt clean architecture!” How to use interface type
  12. © - BASE, Inc. How to implement API server by

    net/http package How to write an unit test - Go basic questions - ex. “Adopt clean architecture!” - Architecture questions - What’s clean architecture? How to apply Dependency Inversion Principle in Go? What should we write in use case layer? How to use interface type If we determine complicated architecture from the beginning
  13. © - BASE, Inc. How to implement API server by

    net/http package How to write an unit testing - Go basic questions - ex. “Adopt clean architecture!” - Architecture questions - What’s clean architecture? How to apply Dependency Inversion Principle in Go? What should we write in use case layer? How to use interface type If we determine complicated architecture from beginning There are many questions in team members’ mind
  14. © - BASE, Inc. If we determine complicated architecture from

    beginning How to implement API server by net/http package How to write unit testing How to use interface type - Go Basic Questions - ex. “Adopt Clean Architecture!” - Architecture Questions - What’s clean architecture? How to apply Dependency Inversion Principle in Go? What we should write in use case layer? When it gets worst, Confusing
  15. © - BASE, Inc. Why I need server-side architecture .Keep

    a design easy to change • -> Separate external input/output and business logic .Common understanding of implementation policies in a team • -> To make readable and maintainable code We are not able to achieve “common understanding”
  16. © - BASE, Inc. Problem of building architecture for beginners

    Approach to build architecture Summary Talk structure
  17. © - BASE, Inc. Approach to build architecture Architectural complexity

    Go Skills/Knowledge
  18. © - BASE, Inc. Approach to build architecture Architectural complexity

    the final architecture . Define “the final architecture” that seems to be good for the project Go Skills/Knowledge
  19. © - BASE, Inc. Approach to build architecture Architectural complexity

    the final architecture . Set intermediate goals to “the final architecture” Go Skills/Knowledge
  20. © - BASE, Inc. Example of my team • The

    team have few Go experience in business • The Team has backend engineers • usually use PHP in work
  21. © - BASE, Inc. Example of my team Architectural complexity

    Layered Architecture + DIP Simple Model-Controller Model-Controller + DIP . . Go Skills/Knowledge
  22. © - BASE, Inc. Architectural complexity Layered Architecture + DIP

    Simple Model-Controller Model-Controller + DIP . . Go Skills/Knowledge . Define Layered Architecture + DIP as “the final architecture” Example of my team
  23. © - BASE, Inc. Layered Architecture + DIP • Refer

    to Layered Architecture • Apply DIP (Dependency Inversion Principle) to isolate domain logic from infrastructure implementations(ex. database handling)
  24. © - BASE, Inc. Architectural complexity Layered Architecture + DIP

    Simple Model-Controller Model-Controller + DIP . . Go Skills/Knowledge . Set intermediate goals Example of my team
  25. © - BASE, Inc. st goal: Simple Model-Controller • Simple

    design only with controller and model • Model includes implementations such as handling a database • To get used to Go API development
  26. © - BASE, Inc. At st goal, team will acquire

    How to implement API server by net/http package How to write an unit test How to use interface type - Go Basic Questions - Got it!
  27. © - BASE, Inc. At st goal, team will acquire

    How to implement API server by net/http package How to write an unit test How to use interface type - Go Basic Questions - Got it! Acquire Go Basic from simple design code
  28. © - BASE, Inc. nd goal: Model-Controller + DIP •

    Separate infrastructure implementations from model • Prepare repository package and move database handling implementation to datastore package. (apply DIP) • Get used to how to use interface in Go
  29. © - BASE, Inc. - Go Basic Questions - Final

    goal: “Layered Architecture + DIP” - Architecture Questions - What’s layered architecture? How to apply Dependency Inversion Principle in Go? What should we write in application layer? How to use interface type At nd goal, team will acquire How to implement API server by net/http package How to write an unit test Got it!
  30. © - BASE, Inc. Got it! - Go Basic Questions

    - Final goal: “Layered Architecture + DIP” - Architecture Questions - What’s layered architecture? How to apply Dependency Inversion Principle in Go? What should we write in application layer? How to use interface type At nd goal, team will acquire How to implement API server by net/http package How to write an unit test Acquire Basic of Go and Archictecture from more complicated design
  31. © - BASE, Inc. Final goal: Layered Architecture + DIP

    • Introduce service package corresponding to “service application layer” in DDD as processing becomes more complicated
  32. © - BASE, Inc. - Go Basic Questions - Final

    goal: “Layered Architecture + DIP” - Architecture Questions - What’s layered architecture? How to apply Dependency Inversion Principle in Go? What should we write in application layer? How to use interface type At final goal, team will reach How to implement API server by net/http package How to write an unit test Got it!
  33. © - BASE, Inc. - Go Basic Questions - Final

    goal: “Layered Architecture + DIP” - Architecture Questions - What’s layered architecture? How to apply Dependency Inversion Principle in Go? What should we write in application layer? How to use interface type At final goal, team will reach How to implement API server by net/http package How to write an unit test Got it! Reach common understanding of implementation policies
  34. © - BASE, Inc. Go Skills/Knowledge Architectural complexity Layered Architecture

    + DIP Simple Model-Controller Model-Controller + DIP . . Approach to build architecture To acquire Go skills and knowledge rapidly
  35. © - BASE, Inc. To acquire Go skills and knowledge

    rapidly .Use standard package as much as possible • To learn Go language itself • ex. use net/http package to serve HTTP .Write a test • To get feedback on the code design (such as testability) • For quick refactoring
  36. © - BASE, Inc. Problem of building architecture for beginners

    Approach to build architecture Summary Talk structure
  37. © - BASE, Inc. Summary • In my approach, an

    architecture grew with team members’ ability growth • Set a final goal and intermediate goals • To grow rapidly, use standard package as much as possible and write a test
  38. © - BASE, Inc. Feel free to ask me any

    Q GopherCon . . - @hgsgtk