fastapi post
背景
最近有个小项目,到第三方下单。第三方下单会有验签,正常下单,下单异常,异常重试等逻辑的验证。服务端根据第三方的返回来做不同的处理,但正常情况下,第三方总是返回成功的,这时我们则无法验证其他逻辑,因此需要本地mock来验证这部分逻辑,这里选用fastapi,几行代码就可以搞定
fastapi post
在之前的文章简单介绍过fastapi,接下来我们来看看怎么构造post请求
参考文档
示例
# Request body + path + query parameters
# mock_server.py
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
app = FastAPI()
@app.post("/items/{item_id}")
async def create_item(item_id: int, item: Item, q: Optional[str] = None):
print(item, type(item))
print(item.dict(), type(item.dict()))
print(item.price, item.tax)
item_dict = item.dict()
if item.tax:
price_with_tax = item.price + item.tax
item_dict.update({"price_with_tax": price_with_tax})
if q:
item_dict.update({"q": q})
return {"item_id": item_id, **item_dict}
- 启动服务
uvicorn mock_server:app --reload
- 针对背景中提到的问题,我们完全可以通过返回不同的json数据,来模拟第三方服务的响应即可,如返回json数据如下来模拟下单失败的场景(具体情况根据第三方服务的api文档即可):
result = {
"code": 4011,
"message": "订单不存在",
"result": "",
"sign": "06f351b34d9b02bc13bc62e66bdab2c8"
}
注:让开发人员修改第三方调用地址到你本地如地址为
192.168.113.6:8080/items
,启动服务:
方式1:命令行方式需要使用uvicorn mock_server:app --host 0.0.0.0 --port 8080 --reload
方式2:if __name__ == '__main__': import uvicorn uvicorn.run("mock_server:app", host="0.0.0.0", port=8080, reload=True, debug=True)