对于算法工程师来说,语言从来都不是关键,关键是快速学习以及解决问题的能力。大学的时候参加ACM/ICPC一直使用的是C语言,实习的时候做一个算法策略后台用的是php,毕业后做策略算法开发,因为要用spark,所以写了scala,后来用基于storm开发实时策略,用的java。至于python,从日常用hive做数据策略用python写udf,到基于tensorflow深度学习框架写python版的模型网络,再到现在实用pytorch做大模型。眼看着在语言纷争中,python的应用越来越广,开一个单独的专栏用于记录python中常用到的技巧,算是做笔记,没事翻出来看看。
Authorization(鉴权)是商用API的必要模块,通过分配api-key等鉴权方式,为账号及服务计费,以及分配对应的权限。
采用Header函数处理请求头,通过alias指定提取请求头中Authorization对应的值作为api_key。代码如下
from fastapi import FastAPI, HTTPException, Depends, Header
from pydantic import BaseModel
# 创建 FastAPI 应用
app = FastAPI()
# 假设的 API 密钥数据库
api_keys = {
"key1": "user1",
"key2": "user2"
}
# 鉴权依赖项
async def authenticate(api_key: str = Header(..., alias="Authorization")):
if api_key not in api_keys:
raise HTTPException(status_code=401, detail="Unauthorized access")
return api_key
# 示例请求模型
class RequestModel(BaseModel):
prompt: str
# 示例响应模型
class ResponseModel(BaseModel):
result: str
# 示例 API 路由
@app.post("/api", response_model=ResponseModel)
async def api_route(request: RequestModel, api_key: str = Depends(authenticate)):
# 这里可以调用你的 AI 服务,处理 request.prompt 并返回结果
result = "AI response for: " + request.prompt
return {"result": result}
这个代码中,我们定义了一个鉴权依赖项 authenticate
,它检查请求头中的 Authorization
字段是否包含有效的 API 密钥。如果密钥无效,将抛出一个 HTTP 401 Unauthorized 异常。在 API 路由中,我们使用了这个依赖项,确保只有通过鉴权的请求才能访问到 AI 服务。同时,我们定义了请求和响应的模型,以确保数据的正确性和一致性
客户端使用python的requests处理http请求,在请求头headers中加入Authorization:api_key键值对。请求头中的Content-Type: application/json通常不用添加,因为当你使用 json
参数传递数据时,requests
会自动设置这个头。
import requests
import json
# API URL
url = "http://localhost:8000/api"
# API 密钥
api_key = "key1"
# 请求数据
data = {
"prompt": "Hello, AI!"
}
# 构建请求头
headers = {
"Authorization": api_key,
"Content-Type": "application/json"
}
# 发送 POST 请求
response = requests.post(url, headers=headers, data=json.dumps(data))
# 打印响应内容
print(response.json())
本文针对FastAPI的Authorization功能进行详细介绍,详细讲述了FastAPI服务端和客户端Authorization鉴权如何开发,希望对大家有帮助。