入股不亏!五个理由告诉你为什么是时候开始学习FastAPI了

全文共1863字,预计学习时长10分钟

入股不亏!五个理由告诉你为什么是时候开始学习FastAPI了_第1张图片

图源:unsplash

 

凭借着拥有Flask,Django,Falcon等众多出色框架,Python一直是开发轻量级Web应用程序的热门选择,同时作为机器学习第一语言,它对于模型打包并将它们作为web服务公开方面特别方便。

 

多年来,Flask都是完成这项工作的不二选择。但现在,新的选择出现了。FastAPI是一个相对崭新的Python Web框架,它脱胎于之前的框架并修复了许多缺陷,它基于Starlette网络框架,并为表单带来了许多实用的功能。

 

过去的8个月里我每天都在使用它,如果你还没有尝试过,我想给你五个尝试它的理由。

 

简单却出色的界面

 

入股不亏!五个理由告诉你为什么是时候开始学习FastAPI了_第2张图片

图源:websystemer

 

所有Web框架都需要在功能性与给开发人员自由度之间取得平衡。Django功能强大但过于刻板;Flask的配置很灵活,可以提供很大的自由度,但用户却有许多工作要做;在频谱方面,FastAPI比Flask的使用范围更广,但它还要设法达到一种更健康的平衡。

 

让我们看看如何在FastAPI中定义端点:

 

fromfastapiimportFastAPI
            frompydanticimportBaseModel
              classUser(BaseModel):
                email:str
                password: str
              app = FastAPI()
              @app.post("/login")
            deflogin(user:User):
                # ...
                #do some magic
                # ...
              return {"msg":"login successful"}

 

它使用Pydantic定义模式,这是用于数据验证的Python库。这里的操作看着很简单,但是后端却并不简单。

 

将输入验证的责任委托给FastAPI。如果请求不正确则将返回错误代码,例如email字段包含int,而不是因为严重的应用程序内部服务错误(500)而崩溃。

 

这个简单的示例应用程序可以与uvicorn一起使用:

 

uvicorn main:app

 

现在,该应用已准备就绪可以接受请求,请求就会是这样的:

 

curl -X POST "http://localhost:8000/login" -H "accept: application/json" -H "Content-Type: application/json" -d"{\"email\":\"string\",\"password\":\"string\"}"

 

更棒的是它使用交互式Swagger UI根据OpenAPI自动生成文档:

 

入股不亏!五个理由告诉你为什么是时候开始学习FastAPI了_第3张图片

用于FastAPI应用程序的Swagger UI

 

异步

 

与Node.js或Go中相比,Python WSGI Web框架的最大缺点之一是无法异步处理请求。自从引入ASGI以来这一问题就迎刃而解了,FastAPI充分利用了这一点。你要做的就是简单地使用async关键词声明端点,如下所示:

 

 

@app.post("/")
               async def endpoint():
                   # ...
                   # call async functions here with `await`
                  # ...
                   return{"msg":"FastAPI is awesome!"}

 

依赖注入

 

入股不亏!五个理由告诉你为什么是时候开始学习FastAPI了_第4张图片

图源:unsplash

 

FastAPI管理依赖项的方式非常不错。尽管它没有强制开发人员执行,但是我强烈建议你使用内置的注入系统来处理端点中的依赖项。

 

举个例子,让我们写一个端点,用户可以在其中发布对某些文章的评论:

 

fromfastapi import FastAPI, Depends
             from pydanticimport BaseModel
              class Comment(BaseModel):
                 username: str
                 content: str
              app = FastAPI()
              database ={
                 "articles": {
                     1: {
                         "title":"Top 3Reasons to Start Using FastAPI Now",
                         "comments": []
                     }
                 }
             }
              def get_database():
                 return database
              @ app.post(“ / articles / {article_id} / comments”)
             def post_comment(article_id:int,comment:Comment, database =Depends(get_database)):
                 database["articles"][article_id]["comments"].append(comment)
                 return {"msg": "commentposted!"}

 

在调用端点时,FastAPI在运行时会自动评估get_database函数,因此你可以根据需要使用返回值,这么做的原因在于:

 

· 可以通过修改 app.dependency_overrides 字典来重写全局依赖关系。你可以轻松模拟对象,进行测试会十分轻松。

· 依赖项(在我们的例子中是get_database)可以执行更复杂的检查,可以将它们与业务逻辑分开,在很大程度上将复杂的事情简单化。例如轻松实现用户身份验证。

 

与数据库轻松集成

 

你可以选择SQL,MongoDB,Redis或其他任意的,FastAPI不会强迫你围绕它构建应用程序。如果你曾经试用过Django与MongoDB一起工作,那么这种痛苦你一定能懂。

 

使用FastAPI,你无需再经历这些,将数据库添加到堆栈中会变得简单起来。或者更确切地说,要完成的工作量将由你选择的数据库决定,而不是由Web框架增加的复杂性决定。

 

来看看这些美妙的语言吧:

 

fromfastapiimportFastAPI, Depends
              fromsqlalchemyimportcreate_engine
             fromsqlalchemy.ormimport sessionmaker
              engine=create_engine("sqlite:///./database.db")
             Session = sessionmaker(bind=engine)
              def get_db():
                 returnSession()
              app = FastAPI()
              @app.get(“ /”)
             def an_endpoint_using_sql(db =Depends(get_db)):
                 # ...
                 # do some SQLAlchemy
                 # ...
                 return {"msg": "an exceptionally successfuloperation!"}

 

GraphQL支持

当使用复杂的数据模型时,REST可能常常会成为阻碍,前端的微小变化需要更新端点的架构可不是闹着玩的。GraphQL在这些情况下就很有用,尽管它不是唯一的,但是Graphene和FastAPI可以无缝地协同工作,无需为Django安装任何诸如graphene_django 之类的扩展程序就可以在本地运行。

 

出色的文档

 

如果没有出色的文档,好的框架就无法真正发挥作用。Django,Flask在这方面很出色,FastAPI也毫不逊色。由于它面世的时间还很短,市面上还没有关于它的书籍,但这只是时间问题。

 

入股不亏!五个理由告诉你为什么是时候开始学习FastAPI了_第5张图片

图源:unsplash

 

无论你是要寻找一种快速、轻量级的框架来服务于你的深度学习模型还是要寻找更复杂的东西,FastAPI都可以帮到你。尝试一次,你会发现入股不亏。

入股不亏!五个理由告诉你为什么是时候开始学习FastAPI了

一起分享AI学习与发展的干货
欢迎关注全平台AI垂类自媒体 “读芯术”

(添加小编微信:dxsxbb,加入读者圈,一起讨论最新鲜的人工智能科技哦~)

你可能感兴趣的:(热点文章,人工智能,AI,python)