FastAPI学习-2.访问路径(路由)

2023-08-22 12:04:20 浏览数 (3)

路径也通常被称为端点或路由

简单demo

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

代码语言:javascript复制
from fastapi import FastAPI

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

将其复制到 main.py 文件中。 启动服务

代码语言:javascript复制
uvicorn main:app --reload

uvicorn main:app 命令含义如下:

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

在输出中,会有一行信息像下面这样:

代码语言:javascript复制
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL C to quit)

该行显示了你的应用在本机所提供服务的 URL 地址。 打开浏览器访问 http://127.0.0.1:8000

代码语言:javascript复制
{"message": "Hello World"}

在这个例子中,它是一个 async 异步函数。 你也可以将其定义为常规函数而不使用 async def:

代码语言:javascript复制
from fastapi import FastAPI

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

分步概括

步骤 1:导入 FastAPI

代码语言:javascript复制
from fastapi import FastAPI

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

步骤 2:创建一个 FastAPI「实例」

代码语言:javascript复制
app = FastAPI()

这里的变量 app 会是 FastAPI 类的一个「实例」。

这个实例将是创建你所有 API 的主要交互对象。这个 app 同样在如下命令中被 uvicorn 所引用:

代码语言:javascript复制
uvicorn main:app --reload

如果你创建的实例不是app,如下

代码语言:javascript复制
api = FastAPI()

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

代码语言:javascript复制
uvicorn main:api --reload

步骤 3:创建一个路径操作

这里的「路径」指的是 URL 中从第一个 / 起的后半部分。 所以,在一个这样的 URL 中:

代码语言:javascript复制
https://example.com/items/foo

路径会是 /items/foo

「路径」也通常被称为「端点」或「路由」。

开发 API 时,「路径」是用来分离「关注点」和「资源」的主要手段。

操作 这里的「操作」指的是一种 HTTP「方法」。 下列之一:

  • POST
  • GET
  • PUT
  • DELETE 以及更少见的几种:
  • OPTIONS
  • HEAD
  • PATCH
  • TRACE

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

通常使用:

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

因此,在 OpenAPI 中,每一个 HTTP 方法都被称为「操作」。我们也打算称呼它们为「操作」。

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

代码语言:javascript复制
@app.get("/")

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

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

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

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

以及更少见的:

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

步骤 4:定义路径操作函数

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

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

这是一个 Python 函数。

每当 FastAPI 接收一个使用 GET 方法访问 URL「/」的请求时这个函数会被调用。 在这个例子中,它是一个 async 函数。

你也可以将其定义为常规函数而不使用 async def:

代码语言:javascript复制
@app.get("/")def root():
    return {"message": "Hello World"}

步骤 5:返回内容

代码语言:javascript复制

    return {"message": "Hello World"}

你可以返回一个 dictlist,像 strint 一样的单个值,等等。

你还可以返回 Pydantic 模型(稍后你将了解更多)。

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

总结

  • 导入 FastAPI
  • 创建一个 app 实例。
  • 编写一个路径操作装饰器(如 @app.get("/"))。
  • 编写一个路径操作函数(如上面的 def root(): ...)。
  • 运行开发服务器(如 uvicorn main:app --reload)。

0 人点赞