Introduction
1. Basic Application Architecture
การทำ web application แบบเบื้องต้นจะมีภาพรวมเป็นประมาณนีั้ครับ
แต่หากเรามองให้เล็ึกลงไปจะเจอกับงานมากมายที่ต้องทำเพื่อให้เป็น application 1 ขึ้นมาหนึ่งตัว
งั้นก่อนอื่นเรามาทำดูระบบที่เรากำลังจะสร้างก่อนครับว่ามีอะไรบ้างที่เราต้องทำเพื่อให้ง่ายต่อการ implement มากขึ้น
Server
- Database - เพื่อเก็บข้อมูล ซึ่งในที่นี้เราจะเก็บข้อมูลของ user นั
้่นเอง - Business Logic - ส่วนที่ประมวณผลข้อมูล
ทีเพื่อให้ได้เป็นสิ่งที่เราต้องการในทีได้แก่นี้คือการ Hash password, การทำ TOTP, การแปลงข้อมูล user เป็น token และ - 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:
ตัวอย่จางกรูป เป็นการใช้เชส่น การทำง 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 ซึ่งทำให้การเขียนนั้นดูยุ่งยากมากขึ้นแต่จะทำให้ในอนาคตเราเหนื่อยน้อยลงครับ
จากภาพจะสังเกตุได้ว่าทุก ๆ อย่างจะเข้ามาที่ส่วนกลางซึ่งก็คือ Business Logic และจะมี Port เพื่อรอ Adapter เข้ามาเชื่อม ซึ่งตัวที่จะมาเชื่อมขจำเป็นต้อแค่งมี interface เหมือนกันก็จึงจะสามารถเชื่อมต่อกันได้ flow รูปแบบนี้ทำให้เราสามารถ implement การ test ได้ง่ายขึ้น แถมยังสามารถจำกัดการมองเห็นของ HTTP handler หรือ user ได้อีกด้วย เพราะ user จะสามารถรับรู้ได้แค่ตัว service เท่าน้ัน และโค้ดของเราก็จะเป็นระเบียบมากขึ้นอีกด้วย
4. Basic Golang
เขียนแบบ introduction เลย มีเรื่อง pointer ด้วยก็ดี
5. Basic SQL
แค่เขียนบอกว่าเอาไว้ทำอะไรก็พอ เดี่๋ยว example ที่เป็น query ไปทำในหัวข้ออื่น