您最喜欢成为数据科学家?对于最佳结果,它肯定是建模和微调。但是,如果从未使用过或从未部署过,成为一个好的模型意味着什么?
为了产生机器学习模型,典型的方法是将其包裹在REST API中,并将其用作微服务。用于创建API的最广泛使用的框架之一是烧瓶。
烧瓶被广泛使用的主要原因是它的简单性。通常,我们仅使用API来建模预测,因此我们不需要复杂的体系结构(例如:Django)。另一个原因是烧瓶是用Python编写的,这是用于进行机器学习建模的语言,因此我们熟悉它。
但是,如果要使用已验证的清晰,静态的输入创建一个REST API,则必须包括来自几个第三方的几个不同的软件包,这些软件包彼此之间不合作。您必须创建自定义代码才能使所有内容运行。
这就是我为需求寻找替代方案的原因,最终我找到了一个名为Fastapi的框架,它成为了我最喜欢的框架。这就是我喜欢使用fastapi的原因。
文档
我从Fastapi中注意到的第一件事是文档。 Fastapi拥有非常广泛的文档和丰富的例子,这使事情变得更容易。如果您需要寻找有关Fastapi的东西,通常不需要在其他任何地方寻找。
此外,FastAPI将自动从我们正在运行的程序中生成交互式API文档。这样我们就不需要编写自己创建的API文档。众所周知,编写API文档很烦人,这不仅是因为有很多细节要详细介绍,而且当最终用户正在实施但不符合文档时,还没有更多令人沮丧的。因此,随着自动生成的API文档,它将非常有用
下面是API文档的显示示例(Swagger UI提供)
还提供了替代自动文档(由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滞后。
是的,它速度非常快。
异步
烧瓶的缺点之一是缺乏异步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,那里有一些很棒的资源。这是您可以探索的。