FastAPI基本, 2022-10-30

2022-10-30  本文已影响0人  Mc杰夫

(2022.10.30 Sun)
FastAPI是基于Python3.7或更高版本的、带有Python标准类型提示(type hints)的、用于构建API的高性能网络框架。

核心特征

系统要求

需要安装fastapi和uvicorn

$ pip3 install fastapi
$ pip3 install uvicorn

最小可用案例 Minimal Viable Product, MVP

同步模式。创建入口文件main.py如下

from typing import Union
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

其中的Union用于标识变量的类型,如下面写法标识变量a可以是 intstr类型

from typing import Union
a: Union[int, str] # or a: [int or str]
a = 1 

第二行声明变量a的可能类型,但如果后面赋值在选定类型之外,依然可以赋值。命令Union仅用于声明类型用,不会影响赋值。

异步模式。代码保存于文件app_fastapi.py

from typing import Union
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

注意到代码中,两个路由都使用了GET方法。

使用uvicorn启动fastapi服务

>> uvicorn app_fastapi:app --host 127.0.0.1 --port 8888

INFO:     Started server process [84364]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8888 (Press CTRL+C to quit)

指令说明

在浏览器中调用http://127.0.0.1:8888/items/10?q=somecompany,页面返回结果

{"item_id":10,"q":"axaim"}

可交互API文档 Interactive API docs

浏览器中输入http://127.0.0.1:8888/docs,看到有Swagger UI提供的API交互式文档,或http://127.0.0.1:8888/redoc,看到有redoc提供的API交互文档

API doc by Swagger
API doc by Redoc

案例升级

在同步版本中加入PUT方法

from typing import Union

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float
    is_offer: Union[bool, None] = None

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    return {"item_name": item.name, "item_id": item_id}

Reference

1 git, fastapi, tiangolo

上一篇 下一篇

猜你喜欢

热点阅读