Skip to main content

Introduction

1. Basic Application Architecture

การทำ web application แบบเบื้องต้นจะมีภาพรวมเป็นประมาณนีครับ

gdsc_1.png

แต่หากเรามองให้กลงไปจะเจอกับงานมากมายที่ต้องทำเพื่อให้เป็น application 1 ขึ้นมาหนึ่งตัว

งั้นก่อนอื่นเรามาทำดูระบบที่เรากำลังจะสร้างก่อนครับว่ามีอะไรบ้างที่เราต้องทำเพื่อให้ง่ายต่อการ implement มากขึ้น

gdsc_2.png

Server

  1. Database - เพื่อเก็บข้อมูล ซึ่งในที่นี้เราจะเก็บข้อมูลของ user นันเอง
  2. Business Logic - ส่วนที่ประมวณผลข้อมูลทีเพือให้ได้เป็นสิ่งที่เราต้องการ ในทีได้แกนี้คือ การ Hash password, การทำ TOTP, การแปลงข้อมูล user เป็น token และ อื่น 
  3. HTTP Handler - เพื่อรับ API request จาก Client

Client

  • Staff - สามารถกดตรข้าลิ้งค์นยมให เพื่อดาวน์โหลดได้ทางนี้เลย (“github link”)<link>

2. Basic Authentication

โดยทั่วไเมื่อมีติเวลทำระบบ authentication เราจะใช้สิ่งที่เรียกว่า Json Web Token หรือ JWT มาป้นตัวพื่อเก็บข้อมูลของ user แล้วส่งไปให้ Client เพื่อเอาไว้ยืนยันตัวตนในภายหลัง ซึ่งจะเก็บกันใน Cookie รูปแบบของ Cookieในฝั่ง Client นันเอง

Example Login Flow:

Screenshot 2565-11-09 at 13.18.50.png

ตัวอย่กรูป เป็นการใช้เชน การทำ request ที่ต้องให้ user login ก่อน อย่างการสร้าง Post โพสใน Facebook ก็โดยจะส่งตัว JWT Token ผ่าน Authorization Header ของ API request ไปด้วยเพื่อเป็นตัวบ่งบอกว่า user คนไหนเป็นคนส่ง request

แต่ไม่อยากให้ยึดติดกับ flow แบบนี้เสมอไปเพราะ application flow สามารถต่างกันได้แล้วแต่ที่เกาออกแบบ โดยซึ่งรวมไปถึงสิ่งที่เรากำลังจะทำใน session นี้ด้วยซึนัก็คือการเพิ่มระบบ OTP เข้าไปด้วยนันเอง

3. Hexagonal Architecture

เป็นวิธีการเขียน program แบบหนึ่งที่ใช้คอนเซ็ปต์ concept “Port and Adapter pattern”pattern ซึ่งทำให้การเขียนนั้นดูยุ่งยากมากขึ้นแต่จะทำให้ในอนาคตเราเหนื่อยน้อยลงครับ

gdsc_4.png

จากภาพจะสังเกตได้ว่าทุก  อย่างจะเข้ามาที่ส่วนกลางซึ่งก็คือ Business Logic และจะมี Port เพื่อรอ Adapter เข้ามาเชื่อม ซึ่งตัวที่จะมาเชื่อมจำเป็นต้แค่มี interface เหมือนกันก็จึงจะสามารถเชื่อมต่อกันได้ flow รูปแบบนี้ทำให้เราสามารถ implement การ test ได้ง่ายขึ้น แถมยังสามารถจำกัดการมองเห็นของ HTTP handler หรือ user ได้อีกด้วย เพราะ user จะสามารถรับรู้ได้แค่ตัว service เท่าน้ัน และโค้ดของเราก็จะเป็นระเบียบมากขึ้นอีกด้วย

4. Basic Golang

เขียนแบบ introduction เลย มีเรื่อง pointer ด้วยก็ดี

5. Basic SQL

แค่เขียนบอกว่าเอาไว้ทำอะไรก็พอ เดียว example ที่เป็น query ไปทำในหัวข้ออื่น