“
1
简介
当运行在不同计算机上的客户端与服务器进行通信时,就需要使用中间件。通过本文,读者将会了解什么是中间件、中间件使用场景以及它们是如何在 Go 语言中构建的。
“
2
什么是 HTTP 中间件
为了更好理解 HTTP 中间件是什么,先要解释一些基本概念。假如一个开发者想要建立两台计算机之间的通信(其中一台计算机为另一台提供资源或服务),他将会构建一个 client/server 系统来实现。服务器等待客户端请求资源或服务,并将请求的资源转发给客户端作为响应。请求的资源或服务可能为:
客户端身份校验
确认客户端对服务器提供的特定服务是否有访问权限
提供服务
保障数据安全,确保客户端无法访问未授权数据,防止数据被窃取
服务器分为无状态和有状态两类,无状态服务器不关心客户端通信状态,而有状态服务器则关心。
中间件是一种将软件或企业应用连接到另一个软件应用,并构成分布式系统的软件实体。HTTP 请求被发送到 API 服务器,而服务器向客户端返回 HTTP 响应。
中间件具备接收请求功能,可以在请求到达处理方法之前对其进行预处理。然后,它将处理具体方法,并将其响应结果发送给客户端。
“
3
中间件使用场景
最常见的使用场景为:
日志记录器,用于记录每个 REST API 访问请求
验证用户 session,并保持通信存活
用户鉴权
编写自定义逻辑以抽取请求数据
为客户端提供服务时将属性附在响应信息
“
4
中间件 Handlers
在 Go 语言中,中间件 Handler 是封装另一个 http.Handler
以对请求进行预处理或后续处理的 http.Handler
。它介于 Go Web 服务器与实际的处理程序之间,因此被称为“中间件”。
middleware_handlers.png
下面是一个基本的中间件 Handler:
package main
import (
"fmt"
"net/http"
)
func middleware(handler http.Handler) http.H