Maison > développement back-end > Golang > le corps du texte

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

WBOY
Libérer: 2024-06-04 14:16:56
original
904 Les gens l'ont consulté

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"
)
Copier après la connexion

Définissez le modèle de données :

type Product struct {
    ID    int    `json:"id"`
    Name  string `json:"name"`
    Price float64 `json:"price"`
}
Copier après la connexion

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")
Copier après la connexion
控 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) {
    // ...
}
Copier après la connexion
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
Copier après la connexion

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)
    })
}
Copier après la connexion

Application Middleware :

router.Use(AuthMiddleware)
Copier après la connexion
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))
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal