前面幾天介紹完如何使用 GORM 來與 SQL 資料庫進行互動
接下來就要來與 Web Backend API 進行結合了~
這邊我會使用 Gin 這個 Web Framework based on Go 來進行開發
可以從 Gin 官網 看到,Gin 是一個用 Go 開發的 Web Framework 且性能高效
開啟 Terminal,切換到專案的當前目錄,並輸入下面的安裝指令
go get -u github.com/gin-gonic/gin
我們先在當前目錄 (it15th
) 建立一個 routes
的資料夾,並新增一個 routes.go
接著寫一個 SetupRoute
的 function,用來管理整個 Backend Route
package routes
import "github.com/gin-gonic/gin"
func SetupRoute() {
app := gin.Default()
err := app.Run(":8080")
if err != nil {
panic(err)
}
}
在這邊我們將整個 Backend Route 的 URL 都透過 const
來定義好,方便後面使用
type routerRawValue string
const (
createAlbum routerRawValue = "/album/create"
getAlbum routerRawValue = "/album/:id"
getAlbums routerRawValue = "/albums"
updateAlbum routerRawValue = "/album/:id/update"
deleteAlbum routerRawValue = "/album/:id/delete"
deleteAllAlbum routerRawValue = "/albums/delete"
)
透過使用 RouteGroup,就可以更方便管理不同用途的 API
apiRG := app.Group("/api")
{
// Ex:http://{HOST_IP}:8080/api/album/create
apiRG.POST(string(createAlbum), controllers.Create)
// Ex:http://{HOST_IP}:8080/api/album/{ALBUM_ID}
apiRG.GET(string(getAlbum), controllers.Get)
// Ex:http://{HOST_IP}:8080/api/albums
apiRG.GET(string(getAlbums), controllers.GetAll)
// Ex:http://{HOST_IP}:8080/api/album/{ALBUM_ID}/update
apiRG.PUT(string(updateAlbum), controllers.Update)
// Ex:http://{HOST_IP}:8080/api/album/{ALBUM_ID}/delete
apiRG.DELETE(string(deleteAlbum), controllers.Delete)
// Ex:http://{HOST_IP}:8080/api/albums/delete
apiRG.DELETE(string(deleteAllAlbum), controllers.DeleteAll)
}
這邊出現了未知的 controllers,下面就來建立~
我們先在當前目錄 (it15th
) 建立一個 controllers
的資料夾,並新增一個 album.go
並分別新增每個 Route 要執行的 Handler Function (明天再來實際撰寫內容)
func Create(c *gin.Context) {
}
func Get(c *gin.Context) {
}
func GetAll(c *gin.Context) {
}
func Update(c *gin.Context) {
}
func Delete(c *gin.Context) {
}
func DeleteAll(c *gin.Context) {
}
這邊我們以 Create
為例,撰寫以 JSON 回傳
func Create(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "ok",
})
}
實際用 Postman 打看看,很棒,有正常回覆
今天透過 Gin 撰寫了第一支 Web Backend API
明天就要將 API 來結合先前寫的 SQL 資料庫
我們明天見~
Gin 官方開發文件
https://gin-gonic.com/zh-tw/docs/