ในบทเรียนรู้นี้เรามาสร้าง API อย่างง่ายเพื่อการเรียนรู้ภาษา GO ที่เขาว่าเร็ว แรง ทะลุนรกกัน เริ่มจากการติดตั้ง Echo Framework เลยแล้วกันครับ ในที่นี้จะใช้ MariaDB เป็นฐานข้อมูล
mkdir my
cd my
go get -u github.com/labstack/echo/...
ติดตั้ง Package ด้านการทำงานกับ Database ในที่นี้ใช้ GORM
go get -u github.com/jinzhu/gorm
ซึ่งต้องติดตั้งอีกตัวเพื่อเรียกใช้งาน MariaDB
go get github.com/go-sql-driver/mysql
จากนั้นสร้างไฟล์ server.go
touch server.go
เปิด Editor ในที่นี้ใช้ Visual Studio Code จากนั้นก็เขียนโปรแกรม
func main() {
e := echo.New()
e.GET("/", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
})
e.Logger.Fatal(e.Start(":1323"))
}
จากนั้นก็ลอง run ไฟล์ ด้วยคำสั่ง go run server.go
go run server.go
____ __
/ __/___/ / ___
/ _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.1.10
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
O\
⇨ http server started on [::]:1323
เปิด browser จากนั้นเปิด URL http://localhost:1323 จะพบ Hello, World! เป็นอันว่า Echo Framework ทำงาน
จากนั้นเขียนโปรแกรมสำหรับทำ API โดยให้สร้างตาราง users (อัตโนมัตินะ)
package main
import (
"log"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
"net/http"
"github.com/labstack/echo"
)
func main() {
e := echo.New()
/*e.GET("/", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
})*/
//กำหนด Route ก่อนเลย พร้อมให้ call ไปยัง func ต่างๆ
h := UserHandler{}
h.Initialize()
e.GET("/users", h.GetAllUser)
e.POST("/users", h.SaveUser)
e.GET("users/:id", h.GetUser)
e.PUT("/users/:id", h.UpdateUser)
e.DELETE("/users/:id", h.DeleteUser)
e.Logger.Fatal(e.Start(":1323"))
}
type UserHandler struct {
DB *gorm.DB
}
//ให้เชื่อมต่อฐานข้อมูลเมื่อ Initialize
func (h *UserHandler) Initialize() {
db, err := gorm.Open("mysql", "root:@tcp(127.0.0.1:3306)/godb?charset=utf8&parseTime=True")
if err != nil {
log.Fatal(err)
}
db.AutoMigrate(&User{})
h.DB = db
}
type User struct {
Id uint `gorm:"primary_key" json:"id"`
FirstName string `json:"firstName"`
LastName string `json:"lastName"`
Age int `json:"age"`
Email string `json:"email"`
}
func (h *UserHandler) GetAllUser(c echo.Context) error {
users := []User{}
h.DB.Find(&users)
return c.JSON(http.StatusOK, users)
}
func (h *UserHandler) GetUser(c echo.Context) error {
id := c.Param("id")
user := User{}
if err := h.DB.Find(&user, id).Error; err != nil {
return c.NoContent(http.StatusNotFound)
}
return c.JSON(http.StatusOK, user)
}
func (h *UserHandler) SaveUser(c echo.Context) error {
user := User{}
if err := c.Bind(&user); err != nil {
return c.NoContent(http.StatusBadRequest)
}
if err := h.DB.Save(&user); err != nil {
return c.NoContent(http.StatusInternalServerError)
}
return c.JSON(http.StatusOK, user)
}
func (h *UserHandler) UpdateUser(c echo.Context) error {
id := c.Param("id")
user := User{}
if err := h.DB.Find(&user, id).Error; err != nil {
return c.NoContent(http.StatusNotFound)
}
if err := c.Bind(&user).Error; err != nil {
return c.NoContent(http.StatusBadRequest)
}
if err := h.DB.Save(&user).Error; err != nil {
return c.NoContent(http.StatusInternalServerError)
}
return c.JSON(http.StatusOK, user)
}
func (h *UserHandler) DeleteUser(c echo.Context) error {
id := c.Param("id")
user := User{}
if err := h.DB.Find(&user, id).Error; err != nil {
return c.NoContent(http.StatusNotFound)
}
return c.NoContent(http.StatusNoContent)
}
จากนั้นทำการ run ด้วยคำสั่ง go run server.go
go run server.go
____ __
/ __/___/ / ___
/ _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.1.10
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
O\
⇨ http server started on [::]:1323
เมื่อเปิด localhost/phpmyadmin จะพบตาราง users ใน ฐานข้อมูล godb
จากนั้นทดลองใช้ Postman เรียก API
จะเห็นว่ามีรายการข้อมูลในตาราง
https://echo.labstack.com/guide
ความคิดเห็น