学习杂谈

FastAPI 快速入门

2020-03-20  本文已影响0人  HassGy
FastAPl.png

FastAPI framework, high performance, easy to learn, fast to code, ready for production

FastAPI框架,高性能,易于学习,快速编码,准备投入生产。

文档入口: https://fastapi.tiangolo.com.

框架源码: https://github.com/tiangolo/fastapi.


FastAPI是一个现代的、快速的(高性能的)web框架,用于基于标准Python类型提示用Python 3.6+构建api。

主要特点如下:

Typer, the FastAPI of CLIs

如果您正在构建一个在终端中使用的CLI应用程序,而不是web API,请查看Typer

开发环境

安装

pip install fastapi

您还需要一个ASGI服务器,用于生产,如UvicornHypercorn

pip install uvicorn

Demo例子

新建文件main.py
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: str = None):
    return {"item_id": item_id, "q": q}

️如果你的代码使用 async / await, 使用 async def:

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: str = None):
    return {"item_id": item_id, "q": q}

运行(本地服务器)

uvicorn main:app --reload

命令解析:

测试功能

打开浏览器 复制它:http://127.0.0.1:8000/items/5?q=somequery.

您将看到JSON响应如下:

{"item_id": 5, "q": "somequery"}

你已经创建了一个API:

交互式API文档

那么,现在改变地址为:[http://127.0.0.1:8000/docs]
(http://127.0.0.1:8000/docs).

index-01-swagger-ui-simple.png

你会看到自动化的用于交互的API文档(由Swagger UI提供):

其他的API文档

现在,转到http://127.0.0.1:8000/redoc

你会看到另一个自动文档(由ReDoc提供):

index-02-redoc-simple.png

进阶版-例子(Example)

现在修改文件main.py,以便从PUT请求接收主体。

使用标准Python类型声明主体,这得益于Pydantic

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    price: float
    is_offer: bool = None


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


@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = 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}

服务器会自动重新加载(因为您添加了--reload到上面的uvicorn命令)。

进阶版-交互式文档

现在,前往http://127.0.0.1:8000/docs

index-03-swagger-02.png index-04-swagger-03.png index-05-swagger-04.png

进阶版-其他可选的API文档

然后现在,转到:http://127.0.0.1:8000/redoc

index-06-redoc-02.png

知识回顾

总之,只需将参数、主体等类型声明为函数参数,使用标准的现代Python类型就可以做到这一点。

您不必学习新的语法、特定库的方法或类,等等。

只需要标准的Python 3.6+版本。

item_id: int

或者对于更复杂的Item模型:

item: Item

..有了这种声明,你就可以这样:

回到前面的代码示例,FastAPI会执行以下操作:


我们只是学到了一些最基础最表面的东西,但是您已经了解了它是如何工作的。

你可以尝试着改变某一些行的代码:

return {"item_name": item.name, "item_id": item_id}

从以下这个:

... "item_name": item.name ...

到这些:

... "item_price": item.price ...

…看看你的编辑器将如何自动完成这些属性,并知道他们的类型:

有关包含更多特性的更完整示例,请参阅 教程-用户指南

本教程 -- 用户指南包括:

性能 (Performance)

独立的TechEmpower基准测试显示,在Uvicorn下运行的FastAPI应用程序是可用的最快的Python框架之一,仅低于StarletteUvicorn本身(由FastAPI内部使用)。(*)

要更多地了解它,请参阅“基准测试”一节。


可选依赖(Optional Dependencies)

使用Pydantic:

使用Starlette:

FastAPI / Starlette使用:

您可以用pip install fastapi[all]安装所有这些东西。

上一篇下一篇

猜你喜欢

热点阅读