FastAPI自定义接口参数
fastapi接口定义:
- 首先需要定义一个参数类Item,其只有一些基本属性,代表接口所需要的各个参数,继承Basemodel是为了更方便的处理参数,如将参数转化成字典或json类型;如果参数较少,可以不用特地封装一个类,可以参考test_next_api接口,Optional[]的作用是为可选参数限定类型,Query()的作用可以自行了解,参考连接如下:
Query: FastAPI入门篇一Query参数与字符串验证 - 启动fastapi服务:uvicorn模块是一个基于asyncio开发的一个轻量高效的web服务器框架,使用起来比较方便
import uvicorn
import json
from fastapi import FastAPI
app = FastAPI()
# ----------------fastapi接口定义----------------
class Item(BaseModel): # 定义一个参数类
name: str
age: int
message: dict
@app.post("/testapi")
def send_message(info: Item):
result = {
"code": "",
"message": "",
"error": None,
"data": ""
}
try:
print(f'收到参数:{info}')
print(info.name)
print(info.age)
cases = info.message
case1 = cases['case1']
print(case1['round'])
result["code"] = "0000"
result["message"] = "成功接收参数"
result["data"] = info
except Exception as e:
result["code"] = "0001"
result["message"] = "未接收到参数"
result["error"] = f'{e}'
# indent表示缩进为4,ensure_ascii=False防止中文乱码
return json.dumps(result, indent=4, ensure_ascii=False)
@app.get("/test_bext_api")
def next_api(pc_status: bool = Query(...),
pc_ip: Optional[str] = None):
print(pc_status)
print(pc_ip)
return 'ok'
if __name__ == "__main__":
uvicorn.run(app, host='127.0.0.1', port=8000) # 启动服务
访问服务器接口
- 请求参数较少时,可以直接将参数放在url中
- 请求参数较多时,根据我们自定义的参数类来定义参数类型,以json格式发送
import requests
import json
import socket
# ----------------访问接口----------------
if __name__ == "__main__":
#test_next_api接口
pc_ip = socket.gethostbyname(socket.gethostname()) # 获取PC自身ip的方法
get_url = f'http://127.0.0.1:8000/test_next_api'
get_resp = requests.get(f'{url}?pc_status=1&pc_ip={pc_ip}').content
print(get_resp)
# testapi接口
p = {'name': 'aaa',
'age': 3,
'message': {
'case1': {
'round': 500,
'delay_time': 60
},
'case2': {
'round': 400,
'delay_time': 90
}
}
}
url = f"http://127.0.0.1:8000/testapi"
param = json.dumps(p)
headers = {'content-type': 'application/json'}
resp = requests.post(url, data=param, headers=headers).json
print(json.loads(resp)) # 返回的结果也是json类型