Cet article explique comment créer une API Golang RESTful. Tout d'abord, créez une API RESTful en important les bibliothèques nécessaires, en définissant le modèle de données et en créant des routes. Deuxièmement, créez et appliquez un middleware pour l'authentification à l'aide de go-chi/chigot et go-chi/chi/middleware. L'article donne en outre un exemple de cas pratique pour démontrer l'application pratique de la solution.
Importez les bibliothèques requises :
import ( "encoding/json" "fmt" "log" "net/http" "github.com/gorilla/mux" )
Définissez le modèle de données :
type Product struct { ID int `json:"id"` Name string `json:"name"` Price float64 `json:"price"` }
Créez le. route :
router := mux.NewRouter() router.HandleFunc("/products", GetProducts).Methods("GET") router.HandleFunc("/products/{id}", GetProduct).Methods("GET") router.HandleFunc("/products", CreateProduct).Methods("POST") router.HandleFunc("/products/{id}", UpdateProduct).Methods("PUT") router.HandleFunc("/products/{id}", DeleteProduct).Methods("DELETE")
func GetProducts(w http.ResponseWriter, r *http.Request) {
// ...
}
func GetProduct(w http.ResponseWriter, r *http.Request) {
// ...
}
func CreateProduct(w http.ResponseWriter, r *http.Request) {
// ...
}
func UpdateProduct(w http.ResponseWriter, r *http.Request) {
// ...
}
func DeleteProduct(w http.ResponseWriter, r *http.Request) {
// ...
}
go get github.com/go-chi/chi
go get github.com/go-chi/chi/middleware
func AuthMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// ... 检查认证信息 ...
if !authorized {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
// ... 继续处理请求 ...
next.ServeHTTP(w, r)
})
}
router.Use(AuthMiddleware)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!func main() {
// 初始化数据库连接
db, err := sql.Open("sqlite3", "mydb.db")
if err != nil {
log.Fatal(err)
}
// 创建路由器
router := mux.NewRouter()
// 定义路由并应用身份验证中间件
router.HandleFunc("/products", GetProducts).Methods("GET").Use(AuthMiddleware)
router.HandleFunc("/products/{id}", GetProduct).Methods("GET").Use(AuthMiddleware)
router.HandleFunc("/products", CreateProduct).Methods("POST").Use(AuthMiddleware)
router.HandleFunc("/products/{id}", UpdateProduct).Methods("PUT").Use(AuthMiddleware)
router.HandleFunc("/products/{id}", DeleteProduct).Methods("DELETE").Use(AuthMiddleware)
// 启动服务器
http.Handle("/", router)
log.Fatal(http.ListenAndServe(":8080", nil))
}