在開始編碼之前,請確保已完成以下準備工作:
接著,創建一個名為 diary_app 的 PostgreSQL 數據庫:
CREATE DATABASE diary_app;
你也可以使用 pgAdmin 或其他管理工具來完成此步驟。
在項目根目錄下創建 diary_api 文件夾,并在其中創建 .env 文件:
DB_HOST=localhost
DB_PORT=5432
DB_USER=your_username
DB_PASSWORD=your_password
DB_NAME=diary_app
JWT_SECRET=your_jwt_secret
然后創建 .env.local 用于本地開發環境:
cp .env .env.local
我們將為應用程序創建兩個主要模型:User 和 Entry。
在 model/user.go 文件中定義:
package model
type User struct {
ID uint gorm:"primaryKey"
Username string gorm:"unique"
Password string
}
在 model/entry.go 文件中定義:
package model
type Entry struct {
ID uint gorm:"primaryKey"
Title string
Content string
UserID uint
}
在項目根目錄下創建 main.go:
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.Run(":8080")
}
運行:
go run main.go
訪問 http://localhost:8080 可查看是否啟動成功。
在 helper/jwt.go 文件中:
package helper
import (
"github.com/dgrijalva/jwt-go"
"time"
)
var jwtKey = []byte("your_jwt_secret")
func GenerateJWT(userID uint) (string, error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"user_id": userID,
"exp": time.Now().Add(time.Hour * 24).Unix(),
})
return token.SignedString(jwtKey)
}
在 controller/authentication.go:
package controller
import (
"github.com/gin-gonic/gin"
"net/http"
)
func Login(c *gin.Context) {
// 實現登錄邏輯
c.JSON(http.StatusOK, gin.H{"message": "登錄成功"})
}
在 middleware/jwtAuth.go 文件中:
package middleware
import (
"github.com/gin-gonic/gin"
"net/http"
)
func JWTAuthMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
token := c.GetHeader("Authorization")
if token == "" {
c.JSON(http.StatusUnauthorized, gin.H{"error": "未提供令牌"})
c.Abort()
return
}
// 驗證令牌邏輯
c.Next()
}
}
在 controller/entry.go 文件中:
package controller
import (
"github.com/gin-gonic/gin"
"net/http"
)
func CreateEntry(c *gin.Context) {
// 實現創建日記條目的邏輯
c.JSON(http.StatusOK, gin.H{"message": "日記條目創建成功"})
}
在 main.go 更新路由:
package main
import (
"github.com/gin-gonic/gin"
"your_project/controller"
"your_project/middleware"
)
func serveApplication() {
r := gin.Default()
r.POST("/login", controller.Login)
r.POST("/entries", middleware.JWTAuthMiddleware(), controller.CreateEntry)
r.Run(":8080")
}
本文詳細演示了如何使用 Golang 和 Gin 框架構建 RESTful API,包括:
你可以在此基礎上擴展更多 API 端點,或集成前端界面以構建完整的應用。
完整代碼示例可在 GitHub 上獲取,歡迎參考并進行定制。
原文鏈接: https://www.twilio.com/en-us/blog/build-restful-api-using-golang-and-gin