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

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2024-06-04 14:16:56
Original
1034 people have browsed it

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"
)
Copy after login

Define data model:

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

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")
Copy after login

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

2. Use middleware for authentication

Install middleware:

go get github.com/go-chi/chi
go get github.com/go-chi/chi/middleware
Copy after login

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)
    })
}
Copy after login

Application middleware:

router.Use(AuthMiddleware)
Copy after login

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))
}
Copy after login

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!

Related labels:
Statement of this Website
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
Latest Issues
How to choose golang web mvc framework
From 1970-01-01 08:00:00
0
0
0
Is it necessary to use nginx when using golang?
From 1970-01-01 08:00:00
0
0
0
golang - vim plug-in to write go
From 1970-01-01 08:00:00
0
0
0
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template