本文阐述了基于FastAPI
实现一个API网关
的详细步骤。这样未来可以不断的在服务端像搭积木一样添加各种服务。
我们即将实现下面的简单的微服务架构,目前它只实现了请求转发功能:
本次实现的API网关非常简单,但是我觉得这样的架构已经能解决80%以上的软件架构问题,尤其是做小型系统时,显然这种架构的综合成本会很低。
代码实现
下面使用FastAPI
的同步和异步两种方式实现http请求转发。
其中services是在本网关中定义的服务名称,path是服务的路径,网关将把这个路径转发到后端服务。
例如:前端使用URL:http://127.0.0.1:8000/translation/trans/v1
访问本网关时,@api_route
将会把server的值填充为translation
,将path的值填充为trans/v1
,这样API网关调用的后端服务的API地址为:http://127.0.0.1:5001/trans/v1
。
- 同步转发
from fastapi import FastAPI, Request,HTTPException
import requests
# 创建一个FastAPI实例
app = FastAPI()
# 定义服务
services = {
"translation": "http://127.0.0.1:5001",
# 可以在这里添加其它服务地址
}
'''
services的key是服务名称,客户端在请求时传入服务名称,本网关再根据服务名称找到对应的服务地址
'''
# 接收客户端请求并转发到后端服务
@app.api_route("/{service}/{path:path}", methods=["GET", "POST", "PUT", "DELETE", "PATCH"])
async def gateway(service: str,