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”)
2. Basic Authentication
ปกติเวลาเราทำระบบ authentication เราจะใช้สิ่งที่เรียกว่า Json Web Token หรือ JWT มาเป้นตัวเก็บข้อมูลของ user แล้วส่งไปให้ Client เพื่อเอาไว้ยืนยันตัวตนในภายหลังซึ่งจะเก็บกันใน 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” ซึ่งทำให้การเขียนนั้นดูยุ่งยากมากขึ้นแต่จะทำให้ในอนาคตเราเหนื่อยน้อยลงครับ
จากภาพจะสังเกตุได้ว่าทุกๆอย่างจะเข้ามาที่ส่วนกลางซึ่งคือ Business Logic และจะมี Port เพื่อรอ Adapter เข้ามาเชื่อม ซึ่งตัวที่จะมาเชื่อมขอแค่มี interface เหมือนกันก็จะสามารถเชื่อมต่อกันได้ ทำให้เราสามารถ implement การ test ได้ง่ายขึ้น แถมยังสามารถจำกัดการมองเห็นของ HTTP handler หรือ user ได้อีกด้วยเพราะ user จะสามารถรับรู้ได้แค่ตัว service เท่าน้ัน และโค้ดของเราก็จะเป็นระเบียบมากขึ้นอีกด้วย
4. Basic Golang
เขียนแบบ introduction เลย มีเรื่อง pointer ด้วยก็ดี
5. Basic SQL
แค่เขียนบอกว่าเอาไว้ทำอะไรก็พอ เดี่ยว example ที่เป็น query ไปทำในหัวข้ออื่น