当前位置: 首页 > news >正文

Python FastApi(2):基础使用

1 最简单的程序

        最简单的 FastAPI 文件可能像下面这样:

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

        进入文件所在目录,运行实时服务器。

uvicorn Test:app --reload

   uvicorn main:app 命令含义如下:

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

        打开浏览器访问 http://127.0.0.1:8000。

1.1 交互式 API 文档

        跳转到 http://127.0.0.1:8000/docs。你将会看到自动生成的交互式 API 文档(由 Swagger UI 提供):

1.2 可选的 API 文档¶

        前往 http://127.0.0.1:8000/redoc。你将会看到可选的自动生成文档 (由 ReDoc 提供):

1.3 OpenAPI

        FastAPI 使用定义 API 的 OpenAPI 标准将你的所有 API 转换成「模式」。

  • 「模式」:是对事物的一种定义或描述。它并非具体的实现代码,而只是抽象的描述。
  • API「模式」:在这种场景下,OpenAPI 是一种规定如何定义 API 模式的规范。定义的 OpenAPI 模式将包括你的 API 路径,以及它们可能使用的参数等等。
  • 数据「模式」:这个术语也可能指的是某些数据比如 JSON 的结构。在这种情况下,它可以表示 JSON 的属性及其具有的数据类型,等等。

        OpenAPI 为你的 API 定义 API 模式。该模式中包含了你的 API 发送和接收的数据的定义(或称为「模式」),这些定义通过 JSON 数据模式标准 JSON Schema 所生成。如果你对原始的 OpenAPI 模式长什么样子感到好奇,其实它只是一个自动生成的包含了所有 API 描述的 JSON。

        你可以直接在:http://127.0.0.1:8000/openapi.json 看到它。

{
    "openapi": "3.1.0",
    "info": {
        "title": "FastAPI",
        "version": "0.1.0"
    },
    "paths": {
        "/": {
            "get": {
                "summary": "Root",
                "operationId": "root__get",
                "responses": {
                    "200": {
                        "description": "Successful Response",
                        "content": {
                            "application/json": {
                                "schema": {

                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

        驱动 FastAPI 内置的 2 个交互式文档系统的正是 OpenAPI 模式。并且还有数十种替代方案,它们全部都基于 OpenAPI。你可以轻松地将这些替代方案中的任何一种添加到使用 FastAPI 构建的应用程序中。你还可以使用它自动生成与你的 API 进行通信的客户端代码。例如 web 前端,移动端或物联网嵌入程序。

2 步骤概括

2.1 导入 FastAPI

from fastapi import FastAPI

    FastAPI 是一个为你的 API 提供了所有功能的 Python 类。FastAPI 是直接从 Starlette 继承的类。你可以通过 FastAPI 使用所有的 Starlette 的功能。

2.2 创建一个 FastAPI「实例」

app = FastAPI()

        这里的变量 app 会是 FastAPI 类的一个「实例」。这个实例将是创建你所有 API 的主要交互对象。这个 app 同样在如下命令中被 uvicorn 所引用:

uvicorn main:app --reload

2.3 创建一个路径操作

        这里的「路径」指的是 URL 中从第一个 / 起的后半部分。路径」也通常被称为「端点」或「路由」。开发 API 时,「路径」是用来分离「关注点」和「资源」的主要手段。所以,在一个这样的 URL 中:

https://example.com/items/foo

        路径会是:

/items/foo

        @app.get("/") 这里的「操作」指的是一种 HTTP「方法」。分别是:

  • POST
  • GET
  • PUT
  • DELETE

        以及更少见的几种:

  • OPTIONS
  • HEAD
  • PATCH
  • TRACE

        在 HTTP 协议中,你可以使用以上的其中一种(或多种)「方法」与每个路径进行通信。在开发 API 时,你通常使用特定的 HTTP 方法去执行特定的行为。  因此,在 OpenAPI 中,每一个 HTTP 方法都被称为「操作」。通常使用:

  • POST:创建数据。
  • GET:读取数据。
  • PUT:更新数据。
  • DELETE:删除数据。

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

  • 请求路径为 /
  • 使用 get 操作

        你也可以使用其他的操作:

  • @app.post()
  • @app.put()
  • @app.delete()

        以及更少见的:

  • @app.options()
  • @app.head()
  • @app.patch()
  • @app.trace()

2.4 路径操作函数

这是我们的「路径操作函数」:

  • 路径:是 /
  • 操作:是 get
  • 函数:是位于「装饰器」下方的函数(位于 @app.get("/") 下方)。
@app.get("/")
async def root(): # 路径操作函数
    return {"message": "Hello World"}

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

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

        async / await 在执行操作函数中将等待 await 返回结果。 

    2.5 返回内容

    @app.get("/")
    def root():
        return {"message": "Hello World"} # 返回内容

            你可以返回一个 dictlist,像 strint 一样的单个值,等等。还可以返回 Pydantic 模型。还有许多其他将会自动转换为 JSON 的对象和模型(包括 ORM 对象等)。尝试下使用你最喜欢的一种,它很有可能已经被支持。

    相关文章:

  • 【SpringBoot】MorningBox小程序的完整后端接口文档
  • 第3章 Internet主机与网络枚举(网络安全评估)
  • Python 爬取 1688 详情接口数据返回说明
  • Mysql架构理论部分
  • github代理 | 快速clone项目
  • 简单理解机器学习中top_k、top_p、temperature三个参数的作用
  • 前端开发:Vue以及Vue的路由
  • AsyncHttpClient使用说明书
  • Android Compose 切换按钮深度剖析:从源码到实践(六)
  • SpringBoot @Scheduled注解详解
  • SQL宏-代替UDF
  • JSONPath 的介绍
  • 搭建主从DNS、nfs、nginx
  • 【MySQL】undo日志页结构
  • 智能遥感新质生产力暨DeepSeek、Python、OpenCV驱动的空天地数据识别与计算及15个行业标杆案例
  • linux 之 查看进程运行时长
  • C# SerialPort 使用详解
  • Linux中修改文件的权限用什么命令?
  • 前端项目完结--上线打包发布步骤和方法
  • MySQL 中,查看执行频次、慢查询日志、SHOW PROFILE和 EXPLAIN性能分析和优化
  • 中国至越南河内国际道路运输线路正式开通
  • 多家外资看好中国市场!野村建议“战术超配”,花旗上调恒指目标价
  • 宇树科技王兴兴:第一桶金来自上海,欢迎上海的年轻人加入
  • 巴基斯坦称回应挑衅,对印度发起军事行动
  • 850亿元!2025年中央金融机构注资特别国债(一期)拟第一次续发行
  • 蔡达峰:推动食品安全法全面有效实施,为维护人民群众身体健康提供有力法治保障