Fastapi对我来说永远毁了烧瓶
#python #fastapi #flask

您最喜欢成为数据科学家?对于最佳结果,它肯定是建模和微调。但是,如果从未使用过或从未部署过,成为一个好的模型意味着什么?

为了产生机器学习模型,典型的方法是将其包裹在REST API中,并将其用作微服务。用于创建API的最广泛使用的框架之一是烧瓶。

烧瓶被广泛使用的主要原因是它的简单性。通常,我们仅使用API​​来建模预测,因此我们不需要复杂的体系结构(例如:Django)。另一个原因是烧瓶是用Python编写的,这是用于进行机器学习建模的语言,因此我们熟悉它。

但是,如果要使用已验证的清晰,静态的输入创建一个REST API,则必须包括来自几个第三方的几个不同的软件包,这些软件包彼此之间不合作。您必须创建自定义代码才能使所有内容运行。

这就是我为需求寻找替代方案的原因,最终我找到了一个名为Fastapi的框架,它成为了我最喜欢的框架。这就是我喜欢使用fastapi的原因。

文档

我从Fastapi中注意到的第一件事是文档。 Fastapi拥有非常广泛的文档和丰富的例子,这使事情变得更容易。如果您需要寻找有关Fastapi的东西,通常不需要在其他任何地方寻找。

此外,FastAPI将自动从我们正在运行的程序中生成交互式API文档。这样我们就不需要编写自己创建的API文档。众所周知,编写API文档很烦人,这不仅是因为有很多细节要详细介绍,而且当最终用户正在实施但不符合文档时,还没有更多令人沮丧的。因此,随着自动生成的API文档,它将非常有用

下面是API文档的显示示例(Swagger UI提供)

http://127.0.0.1:8000/docs

还提供了替代自动文档(由REDOC提供)

http://127.0.0.1:8000/redoc

为了定义创建的模式,它使用了Pydantic,这是另一个很棒的Python库,用于数据验证。其目的是验证FastApi的输入。如果输入/请求不正确,则将返回适当的错误代码。

# Source: https://medium.com/@tiangolo/introducing-fastapi-fdc1206d453f

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 create_item(item_id: int, item: Item):
    return {"item_name": item.name, "item_id": item_id}

表现

顾名思义,这确实是Fastapi。基于Techempower基准测试的数据,FastApi在性能方面都击败了每个框架。最常用的框架,例如烧瓶和django滞后。

Framework performance — techempower

是的,它速度非常快。

异步

烧瓶的缺点之一是缺乏异步I/O支持。异步对于HTTP端点非常重要,它倾向于等待I/O和网络聊天,这使其成为使用Async的同时候选者。

与烧瓶不同,FastAPI使用异步/等待Python关键字支持框中的异步代码。 FastApi默认支持异步,这意味着我们不需要使用第三方框架进行异步。

您要做的就是用这样的异步关键字声明端点:

@app.get('/book')
async def read_book():
    book = await get_book()
    return book

总而言之,FastApi是一个快速的Web框架,支持异步代码。此外,这是一个非常完整的文档和集成验证系统,使其更容易使用。

您有兴趣使用fastapi吗?如果您想开始使用FastApi,那里有一些很棒的资源。这是您可以探索的。