当我们开发的东西需要做成api接口的时候,可以使用fastapi来快速完成。
首先需要下载需要的包:fastapi,uvicorn,pydantic
做成接口的主要问题就是数据如何传输,如何传参给接口,如何让接口返回数据
首先我们可以看一下数据类型的定义方法
from pydantic import BaseModel
from typing import *
class my_data(BaseModel):
list_data: Optional[List] = None
dict_data: Optional[Dict] = None
str_data: Optional[str] = None
bool_data: Optional[bool] = None
int_data: Optional[int] = None
使用pydantic来帮助我们定义数据类型,这样定义的数据类型,我们传输数据的时候可以用表单的方式进行数据传入,比较方便。
Optional[List]=None的用处就是定义这个参数的数据类型,并且可缺省,缺省值为None
下面我们可以定义我们的接口函数传入参数
#处理数据函数
def test_data(my_data: my_data, float_data: Optional[float] = 0.1):
pass
my_data就是上面定义的数据类,可以传入复杂的数据组合
float_data: Optional[float] = 0.1这样也可以定义传入的数据,数据类型为float,缺省值为0.1,但是传入参数的方式是地址栏的方式
下面给一个完整的测试数据的接口函数,主要用来看参数是否传递成功。
处理数据函数
def test_data(my_data: my_data, float_data: Optional[float] = 0.1):
# 接受数据
list_data = my_data.list_data
dict_data = my_data.dict_data
str_data = my_data.str_data
bool_data = my_data.bool_data
int_data = my_data.int_data
data = {}
data["list_data"] = list_data
data["dict_data"] = dict_data
data["str_data"] = str_data
data["bool_data"] = bool_data
data["int_data"] = int_data
data["float_data"] = float_data
data["list_data_type"] = str(type(list_data))
data["dict_data_type"] = str(type(dict_data))
data["str_data_type"] = str(type(str_data))
data["bool_data_type"] = str(type(bool_data))
data["int_data_type"] = str(type(int_data))
data["float_data_type"] = str(type(float_data))
return data
test_data是我们定义的接口函数,此时我们需要绑定到对应的路由上并设置服务器启动的端口等。
from fastapi import FastAPI
import uvicorn
app = FastAPI()
# 一个函数一条api路径
app.post("/getData",
summary="测试数据传参",
)(test_data)
uvicorn.run(app, host='0.0.0.0', port=8000, workers=1) # 在指定端口和主机上启动应用
此时运行,我们就能够启动服务器了

启动成功就是这样简短的信息。
此时我们可以使用向服务器发送请求进行访问了
import requests
# 请求的 URL
url = "http://127.0.0.1:8000/getData"
data = { # 变量名要一一对应
"list_data":["icyhunter", "icy", "hunter"],
"dict_data":{"name":"icyhunter", "age":18},
"str_data":"icyhunter",
"bool_data":True,
"int_data":20,
}
# 发送 POST 请求
response = requests.post(url, json=data, params={"float_data":0.1})
# 打印响应内容
print(response.status_code)
data = response.json()
print(data)
print("*"*10)
for k, v in data.items():
print(k, v)
url = "http://127.0.0.1:8000/getData"就是之前/getData绑定了test_data接口的访问地址
data就是我们需要传入的数据
float_data就是通过地址栏方式传入数据
然后发送请求,获取返回的结果。
运行后可以看到:

接口正常,数据返回也正常。
那么此时只需要根据甲方的要求传入指定的数据,然后返回指定的数据,我们接口就封装完成了。
完整代码如下:
main.py:
from fastapi import FastAPI
import uvicorn
from pydantic import BaseModel
from typing import *
# 定义数据
class my_data(BaseModel):
list_data: Optional[List] = None
dict_data: Optional[Dict] = None
str_data: Optional[str] = None
bool_data: Optional[bool] = None
int_data: Optional[int] = None
# 处理数据函数
def test_data(my_data: my_data, float_data: Optional[float] = 0.1):
# 接受数据
list_data = my_data.list_data
dict_data = my_data.dict_data
str_data = my_data.str_data
bool_data = my_data.bool_data
int_data = my_data.int_data
data = {}
data["list_data"] = list_data
data["dict_data"] = dict_data
data["str_data"] = str_data
data["bool_data"] = bool_data
data["int_data"] = int_data
data["float_data"] = float_data
data["list_data_type"] = str(type(list_data))
data["dict_data_type"] = str(type(dict_data))
data["str_data_type"] = str(type(str_data))
data["bool_data_type"] = str(type(bool_data))
data["int_data_type"] = str(type(int_data))
data["float_data_type"] = str(type(float_data))
return data
app = FastAPI()
# 一个函数一条api路径
app.post("/getData",
summary="测试数据传参",
)(test_data)
uvicorn.run(app, host='0.0.0.0', port=8000, workers=1) # 在指定端口和主机上启动应用
test.py:
import requests
# 请求的 URL
url = "http://127.0.0.1:8000/getData"
data = { # 变量名要一一对应
"list_data":["icyhunter", "icy", "hunter"],
"dict_data":{"name":"icyhunter", "age":18},
"str_data":"icyhunter",
"bool_data":True,
"int_data":20,
}
# 发送 POST 请求
response = requests.post(url, json=data, params={"float_data":0.1})
# 打印响应内容
print(response.status_code)
data = response.json()
print(data)
print("*"*10)
for k, v in data.items():
print(k, v)
装好必要的包之后,先运行main.py,再运行test.py
这样就可以直接上手了。
276

被折叠的 条评论
为什么被折叠?



