• FastAPI 核心概念:构建高性能的 Python Web 服务


    FastAPI 核心概念:构建高性能的 Python Web 服务

    本文详细解析了如何利用 FastAPI 构建高性能的 Python Web 服务,帮助开发者从零开始创建功能丰富、响应迅速的 API。结合完整的代码示例和分步操作指导,文章深入讲解了 FastAPI 的核心概念,包括路径、操作、装饰器、HTTP 方法等,带来直观清晰的学习体验。通过掌握路径操作装饰器的使用及 Uvicorn 的启动配置,你将能快速构建出强大、可靠的 Python Web 应用,夯实高效 API 开发的基础。

    一 简单的 FastAPI 应用示例

    # 从fastapi库导入FastAPI类,用于创建FastAPI应用实例
    from fastapi import FastAPI
    
    # 创建一个FastAPI应用实例,app将作为应用的入口
    app = FastAPI()
    
    # 使用@app.get("/")装饰器定义一个GET请求的路由
    # 当用户访问根路径 ("/") 时,FastAPI会调用下面的函数
    @app.get("/")
    async def root():
        # 定义返回的响应内容,这里返回一个JSON对象 {"message": "Hello World"}
        return {"message": "Hello World"}
    

    FastAPI 是一个为 API 提供功能的 Python 类,直接从 Starlette 继承。可以通过 FastAPI 使用所有 Starlette 的功能。app 同样会被 uvicorn 所引用。

    $ uvicorn main:app --reload
    

    注释:

    uvicorn main:app 命令含义如下:

    • mainmain.py 文件(Python 模块)。
    • app:在 main.py 文件中通过 app = FastAPI() 创建的对象。
    • --reload:让服务器在更新代码后重新启动,仅在开发时使用该选项。

    二 自定义 FastAPI 的实例对象

    from fastapi import FastAPI
    
    # FastAPI 的实例对象
    my_awesome_api = FastAPI()
    
    @my_awesome_api.get("/")
    async def root():
        return {"message": "Hello World"}
    

    自定义 my_awesome_api 对象,将 app 改为 my_awesome_api,对应的装饰器也改为 @my_awesome_api

    三 自定义 uvicorn 启动

    将代码放入 main.py 文件中,然后可以像下面这样运行 uvicorn

    $ uvicorn main:my_awesome_api --reload
    
    INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
    

    如果代码放入了 chapter01.py 文件中,可以像下面运行 uvicorn

    $ uvicorn chapter01:my_awesome_api --reload
    

    四 术语

    1 路径

    路径:也称为端点或路由,指的是 URL 中从第一个 / 起的部分。例如,URL https://example.com/items/foo 的路径是 /items/foo。开发 API 时,路径用于分离 关注点资源

    2 操作

    操作:指的是一种 HTTP 方法。

    常见操作少见操作
    POSTOPTIONS
    GETHEAD
    PUTPATCH
    DELETETRACE

    在 HTTP 协议中,可以使用上述方法之一(或多种)与每个路径进行通信。在开发 API 时,可以使用特定的 HTTP 方法执行特定行为。

    HTTP 方法特定行为
    POST创建数据
    GET读取数据
    PUT更新数据
    DELETE删除数据

    五 定义一个路径操作装饰器

    from fastapi import FastAPI
    
    app = FastAPI()
    
    # 一个路径操作装饰器
    @app.get("/")
    async def root():
        return {"message": "Hello World"}
    

    @app.get("/") 告诉 FastAPI 下方的函数负责处理如下访问请求:

    • 请求路径为 /
    • 使用 GET 操作
    1 装饰器

    @decorator 语法在 Python 中被称为 装饰器装饰器 告诉 FastAPI 下方的函数对应着 路径 / 加上 GET 操作,是一个 路径操作装饰器。FastAPI 中的装饰器对应 HTTP 方法如下:

    路径操作装饰器HTTP 方法
    @app.get()GET
    @app.post()POST
    @app.put()PUT
    @app.delete()DELETE
    @app.options()OPTIONS
    @app.head()HEAD
    @app.patch()PATCH
    @app.trace()TRACE

    FastAPI 没有强制要求操作有任何特定含义,可以随意使用任何操作(HTTP 方法),但一般在实际项目中习惯使用 GET/POST。

    2 解释说明

    这是一个路径操作函数:

    • 路径/
    • 操作GET
    • 函数:位于装饰器下方的函数
    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/")
    async def root():
        return {"message": "Hello World"}
    

    这是一个 Python 函数,每当 FastAPI 接收一个使用 GET 方法访问 URL / 的请求时,该函数会被调用。在这个例子中,这是一个 async 函数,也可以将其定义成常规函数而不使用 async def

    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/")
    def root():
        return {"message": "Hello World"}
    

    有关 async defdef 的更多信息可以查看 官方文档

    六 返回内容

    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/")
    async def root():
        return {"message": "Hello World"}
    

    可以返回 dictlist,或者单个值,如 strint 等。当前示例返回 JSON

    七 完整代码示例

    from fastapi import FastAPI
    
    # 启动命令:uvicorn chapter01:app --reload 
    app = FastAPI()
    
    @app.get("/")
    async def root():
        return {"message": "Hello World! app"}
    
    # 启动命令:uvicorn chapter01:my_awesome_api --reload 
    my_awesome_api = FastAPI()
    
    @my_awesome_api.get("/")
    async def root():
        return {"message": "Hello World!my_awesome_api"}
    

    八 源码地址

    详情见:GitHub FastApiProj

    引用: FastAPI 文档

  • 相关阅读:
    dotnet new cli 以及Abp-cli命令的简单使用
    搜索服从幂律分布的网络 论文阅读
    基于SpringBoot的教师工作量管理系统
    20哈希表-三数之和
    为什么审计平台不适合进行数据库变更管理?
    【arm实验1】GPIO实验-LED灯的流水亮灭
    智能驾驶供应商更替潮开启,行泊一体玩家如何“稳赢”?
    JDBC中的Connection的sql语句
    torch_cluster、torch_scatter、torch_sparse三个包的安装
    【PXIE301-211】青翼科技基于PXIE总线的16路并行LVDS数据采集、1路光纤数据收发处理平台
  • 原文地址:https://blog.csdn.net/u014394049/article/details/143405176