แนะนำ HTTP Server
สามารถดู video ของหัวข้อนี้ก่อนได้ ดู video
รู้จักกับ HTTP Server
HTTP Server คือ server application ที่ทำการเปิดช่องทางการสื่อสารผ่าน HTTP request ให้สื่อสารผ่าน clients (อย่างพวก web browser, mobile app หรือ web service อื่นๆที่มาขอใช้ Resource) และสามารถตอบกลับผ่าน HTTP Response ไปได้
ซึ่งสามารถทำได้หลายอย่างมากตั้งแต่
- ทำ API (ซึ่งหัวข้อนี้เราจะมาทำ Rest API กัน)
- เปิด web page
- ส่ง file
เป็นต้น
โดย standard library ที่สามารถทำได้ในภาษา Go คือ net/http
มาลองดูตัวอย่างผ่าน code กัน
package main
import (
"fmt"
"log"
"net/http"
)
func helloHandler(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/hello" {
http.Error(w, "404 not found.", http.StatusNotFound)
return
}
if r.Method != "GET" {
http.Error(w, "Method is not supported.", http.StatusNotFound)
return
}
fmt.Fprintf(w, "Hello World!")
}
func main() {
http.HandleFunc("/hello", helloHandler)
fmt.Printf("Starting server at port 8080\n")
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatal(err)
}
}
ทีนี้ ซึ่งอย่างที่ทุกคนเห็นจาก code ทุกคนจะเห็นว่า
- code ก็ต้องมา handle method เอง
- path ก็ต้องมาสร้าง condition แยกเอง
มันส่งผลทำให้ถ้าระบบใหญ่ขึ้น code จุดนี้จะ ซับซ้อนขึ้น และ ควบคุมยากขึ้นมา = เราเลยจำเป็นต้องมี library สักตัวมาช่วยสิ่งนี้
แล้ว Fiber คืออะไร ?
Fiber คือ library ที่ได้แรงบันดาลใจมาจาก Express (ของฝั่ง node.js) ที่ build อยู่บน Fasthttp
- Fasthttp คือ fastest HTTP engine for Go
- เน้นไปที่ความไว และความสามารถในการจัดการ "zero memory allocation" ได้
อย่างแรกสุดเราจำเป็นต้องลง library เพิ่มของ Fiber ก่อน ให้ลง package เพิ่มเติมไป
go get github.com/gofiber/fiber/v2
จาก code ด้านบน (ของ net/http
) เม่ือเปลี่ยนมาสู่ Fiber จะมีหน้าตาเป็นประมาณนี้แทน
package main
import (
"github.com/gofiber/fiber/v2"
)
func main() {
app := fiber.New()
app.Get("/hello", func(c *fiber.Ctx) error {
return c.SendString("Hello World")
})
app.Listen(":8080")
}
Session นี้เราจะทำอะไรบ้าง
ในหัวข้อนี้สิ่งที่เราจะทำ
- เราจะสร้าง CRUD (Create - Read - Update - Delete) ผ่านการทำ Rest API ด้วย Fiber ** แต่จะยังไม่ต่อ Database กัน เราจะยังคงเพิ่มผ่าน struct กันก่อน
- ทำ Upload API
- อ่าน template html และแสดงผลข้อมูลจาก Fiber
- อ่าน env เข้ามา (พื้นฐานสำหรับการแยก Environment)
- รู้จักกับ middleware และลองมาใช้งาน middleware เพื่อกั้นสิทธิ์
- ลองเพิ่ม swagger เพื่อทำ api documents