ข้ามไปยังเนื้อหา

การสร้าง API ด้วย Echo

ถ้าคุณมาจาก Node.js คุณคงคุ้นเคยกับแนวคิดของ HTTP framework แบบเบาอยู่แล้ว: ฟังก์ชันที่แมป path + verb ไปยัง handler, middleware pipeline และวิธี serialize JSON ฝั่ง Go ก็มี Echo เป็น framework แบบนั้น

สิ่งที่ต้องการNode.js / ExpressGo / Echo
หน่วยหลัก(req, res, next) functionsfunc(c echo.Context) error
Routingapp.get('/path', handler)e.GET("/path", handler)
Middlewareapp.use(fn)e.Use(fn)
ตอบกลับ JSONres.json({ … })c.JSON(200, payload)
ส่งต่อ errornext(err)return err

Echo แข่งขันกับ Fastify และ NestJS ในแง่แนวคิด แต่เป็น binary ที่ compile แล้วเพียงตัวเดียว ไม่มี runtime, ไม่มี VM และไม่มี node_modules เวลา cold-start คือไมโครวินาที ไม่ใช่วินาที

Go มีหลาย web framework (Gin, Chi, Fiber, stdlib net/http) Echo อยู่ในจุดที่พอดี:

  • พื้นที่ผิวขนาดเล็ก — อ่าน source code ทั้งหมดได้ในสุดสัปดาห์เดียว
  • Idiomatic — handler คืนค่า error ตรงกับ pattern errors-as-values ของ Go
  • มี built-in ครบ — Logger, Recover, CORS, GZIP, BasicAuth มาพร้อมกัน
  • เสถียร — Echo v4 ผ่านการใช้งาน production มาหลายปี
TypeScript
// Express (Node.js)
import express from 'express';
const app = express();
app.use(express.json());
app.get('/ping', (req, res) => {
res.json({ message: 'pong' });
});
app.listen(1323, () => console.log('listening'));
Go
// Echo (Go)
package main
import (
"net/http"
"github.com/labstack/echo/v4"
)
func main() {
e := echo.New()
e.GET("/ping", func(c echo.Context) error {
return c.JSON(http.StatusOK, map[string]string{
"message": "pong",
})
})
e.Logger.Fatal(e.Start(":1323"))
}

ตลอดบทนี้เราจะสร้าง Books REST API — สร้าง อ่าน อัปเดต และลบหนังสือ — ทีละขั้นตอน:

  1. สร้างโปรเจกต์ด้วย go.mod และ main.go
  2. กำหนด route และฟังก์ชัน handler
  3. เพิ่ม middleware (logging, recovery, CORS)
  4. Bind request body และ validate ด้วย struct tag
  5. จัดรูปแบบ JSON response พร้อม status code
  6. จัดการ error แบบรวมศูนย์ — วิธีแบบ Go
  7. เชื่อมต่อฐานข้อมูลผ่าน database/sql
  8. เขียน handler test ด้วย httptest

แต่ละบทสามารถอ่านได้แยกกัน แต่โปรเจกต์จะเติบโตขึ้นเรื่อย ๆ

ฟังก์ชันใดที่ใช้สร้าง Echo instance ใหม่?
ฟังก์ชัน handler ของ Echo คืนค่าชนิดใด?
method ไหนที่ใช้เริ่ม Echo server บน address ที่กำหนด?