สร้าง GO API ด้วย Echo Framework

wave
มานพ กองอุ่น 5 ก.ย. 2019 15:53:13 12,086

ในบทเรียนรู้นี้เรามาสร้าง 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


ความคิดเห็น

หากบทเรียนรู้มีความผิดพลาดประการใด หรือมีข้อเสนอแนะกรุณาแจ้ง contact@programmerthailand.com

เขียนบทเรียนรู้ของคุณ

รายละเอียด
  • ดู 12,086
  • รักเลย 0
  • หมวดหมู่ GO Lang
  • เขียนเมื่อ
  • แก้ไขเมื่อ
  • Tags golang echo framework api
ข้อมูลผู้เขียน
มานพ กองอุ่น

มานพ กองอุ่น

เป็นสมาชิกเมื่อ: 18 ธ.ค. 2009

เนื้อหาที่เกี่ยวข้อง