Home  >  Article  >  Backend Development  >  How to build a Golang RESTful API and use middleware for authentication?

How to build a Golang RESTful API and use middleware for authentication?

WBOY
WBOYOriginal
2024-06-04 14:16:56818browse

This article describes how to build a Golang RESTful API. First, build a RESTful API by importing the necessary libraries, defining the data model, and creating routes. Second, create and apply middleware for authentication using go-chi/chigot and go-chi/chi/middleware. The article further gives a practical case example to demonstrate the practical application of the solution.

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

How to build a Golang RESTful API and use middleware for authentication

1. Build a RESTful API

Import required Library:

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/mux"
)

Define data model:

type Product struct {
    ID    int    `json:"id"`
    Name  string `json:"name"`
    Price float64 `json:"price"`
}

Create 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")

Definition Controller:

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) {
    // ...
}

2. Use middleware for authentication

Install middleware:

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

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

Practical case

Example:

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

The above is the detailed content of How to build a Golang RESTful API and use middleware for authentication?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn