在现代 web 开发中,使用 RESTful API 已经成为了一个标准。它可以帮助前端工程师和后端工程师更好地协同工作,提高应用程序的可扩展性和可维护性。而 FastAPI 则是一个快速(fast)且简洁(API)的 web 框架,它使用 Python 语言编写,支持异步编程,可以让我们更加高效地实现 RESTful API。下面,我们就来看看如何使用 FastAPI 实现 RESTful API。
安装 FastAPI
在开始之前,我们首先需要安装 FastAPI。可以通过以下命令来安装:
pip install fastapi[all]
创建一个简单的 RESTful API
在介绍如何使用 FastAPI 来实现 RESTful API 之前,我们先来看一个简单的示例,看看 FastAPI API 看起来是什么样子的。下面是一个非常简单的示例,用于创建、更新、删除和获取用户数据:
-- -------------------- ---- ------- ---- ------- ------ ------- ---- -------- ------ --------- --- - --------- ----- ---------------- ----- --- ------ --- -------- - -- ------------------- ----- --- ----------------- ------ --------------------- ------ ---------- ----- ----------------------- ----- --- -------------------- ---- ----- ------ -- ------------- - -------- ------ ---------- ---- ------- ----------------- - ---- ------ ---------- ----- -------------------------- ----- --- -------------------- ----- -- ------------- - -------- ------ ---------- ---- ------- --------------------- ------ ---------- ----- ------------------ ----- --- ------------ ------ --------- ---------
我们来逐行分解代码:
- 首先,我们导入了 FastAPI 和 pydantic(用于数据验证)。
- 接下来,我们实例化了一个 FastAPI 实例。
- 我们创建了一个名为 User 的简单数据模型。它具有两个字段:一个名为 name 的字符串和一个名为 email 的字符串。
- 我们定义了一个空列表 users_db 来存储所有的用户数据。
- 我们定义了一个名为 create_user 的路由,它接受一个名为 user 的 User 模型作为输入,将其添加到 users_db 列表中,并返回一个 JSON 格式的响应。
- 我们定义了一个名为 update_user 的路由,它接受一个名为 user_id 的编号和一个名为 user 的 User 模型作为输入。如果编号对应的用户不存在,则返回一个 JSON 格式的“not found”响应;否则,我们将 users_db 中的用户数据更新为传入的 User 模型中的数据,并返回一个 JSON 格式的“ok”响应。
- 我们定义了一个名为 delete_user 的路由,它接受一个名为 user_id 的编号。如果编号对应的用户不存在,则返回一个 JSON 格式的“not found”响应;否则,我们从 users_db 中删除该用户数据,并返回一个 JSON 格式的“ok”响应。
- 最后,我们定义了一个名为 get_users 的路由,它会返回 users_db 中所有用户的数据。
通过以上示例,我们可以看到使用 FastAPI 构建 RESTful API 非常简单且易于阅读,同时 FastAPI 还提供了很多有用的工具来加速我们的开发工作。
实现数据验证
除了实现路由,FastAPI 及其依赖 pydantic 还使得数据验证成为了一个非常简单的事情。上面的示例已经展示了如何定义一个数据模型,但需要注意的是,我们还可以在定义数据模型时添加一些验证器来确保数据的正确性。例如,我们可以使用 MaxLength 和 EmailValidator 来验证 email 字段:
-- -------------------- ---- ------- ---- -------- ------ --------- ----- ---------------- ----- --- ------ --- ------------------- --- -------------------------------- ------- -- --- --- -- ------ ----- ----------------- ---- ------- -- --- -------- ------ ----- ------------------ --- ---------------- ------- -- ---------- - -- ----- ---------------- ---- -- -- ----- - ---------- ------ -- ---------- - --- ----- ---------------- ----- -- ------ ---- -- ------------ ------ -----
在上面的代码中,我们添加了两个 validator——email_must_contain_atsymbol 和 name_length——来确保 email 字段中必须包含“@”符号,name 字段的长度必须在 3 到 50 个字符之间。如果数据不符合验证器的要求,会抛出一个 ValueError 异常。
实现异步处理
FastAPI 还支持异步处理,也就是异步编程。在传统的 web 开发模型中,每个请求都是同步处理的,只有当请求处理完毕,服务器才会返回响应。但在异步开发模型中,请求的处理过程是异步的,服务器可以在等待请求处理完毕的同时处理其他请求。这种处理方式可以大大提高 web 应用程序的吞吐量。
要在 FastAPI 中实现异步处理很简单,只需在路由和函数定义前面加上 async 关键字,就可以将其定义为异步处理。
例如,我们可以将创建新用户的路由改为异步处理:
@app.post("/users") async def create_user(user: User): await asyncio.sleep(1) # 模拟一个耗时的操作 users_db.append(user) return {"status": "ok"}
在上面的代码中,我们在函数体内使用 asyncio.sleep(1) 来模拟一个耗时的操作。由于函数被定义为异步处理,因此在执行 sleep 函数时,我们可以将控制权交给主事件循环,允许其他请求也有机会被处理。
结论
在本文中,我们已经学习了如何使用 FastAPI 实现 RESTful API。FastAPI 是一个快速、简洁且易于使用的 web 框架,特别适用于构建高效和可靠的 RESTful API。与其他 Python web 框架相比,FastAPI 的性能和效率得到了显着提高,它是 Python web 开发的新趋势。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/676f456ae9a7045d0d713da4