Maison  >  Article  >  développement back-end  >  Comment créer une API Golang RESTful et utiliser un middleware pour l'authentification ?

Comment créer une API Golang RESTful et utiliser un middleware pour l'authentification ?

WBOY
WBOYoriginal
2024-06-04 14:16:56818parcourir

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.

如何构建 Golang RESTful API,并使用中间件进行身份验证?

Comment créer une API Golang RESTful et utiliser un middleware pour l'authentification

1 Créer une API RESTful

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")
控 Contrôleur de définition :

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) {
    // ...
}
e2. Utiliser le middleware pour la vérification d'identité

Installation du middleware :

go get github.com/go-chi/chi
go get github.com/go-chi/chi/middleware

Créer un 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)
    })
}

Application Middleware :

router.Use(AuthMiddleware)
E Cas pratique

Exemple :

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))
}

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn