写点什么

通过 Python FastAPI 开发一个快速的 Web API 项目

作者:宇宙之一粟
  • 2022-11-02
    中国香港
  • 本文字数:2650 字

    阅读完需:约 9 分钟

通过 Python FastAPI 开发一个快速的 Web API 项目

前言

Python 如此受欢迎的众多原因之一是 Python 有大量成熟和稳定的库可供选择:


  • 网页开发有:DjangoFlask,提供了很好的网络开发体验和大量的有用文档

  • 机器学习有:scikit-learnKeras 等,提供了丰富的机器学习的包和数据处理和可视化工具。


FastAPI 是一个快速、轻量级的现代 API,与其他基于 Python 的 Web 框架(如 Flask 和 Django )相比,有一个更容易的学习曲线。FastAPI 相对较新,但它有一个不断增长的社区。它被广泛地用于构建网络 API 和部署机器学习模型。


正是因为大量的库和框架保证了 Python 拥有良好的开发速度和便利性,使 Python、Go 和 Rust 这样的新语言能够并驾齐驱,赢得大量的开发者的喜爱。

什么是 FastAPI ?

FastAPI 是一个用于开发网络 API 的新的 Python 框架,在过去几年中得到了普及。如果你打算使用 Python 进行 Web 开发,熟悉 FastAPI 将对你有好处。



文档: https://fastapi.tiangolo.com


源码: https://github.com/tiangolo/fastapi


从官方文档来看,FastAPI 具有如下几个关键特性:


  • 快速:可与 NodeJS 和 Go 比肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一

  • 高效编码:提高功能开发速度约 200% 至 300%。*

  • 更少 bug:减少约 40% 的人为(开发者)导致错误。*

  • 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。

  • 简单:设计的易于使用和学习,阅读文档的时间更短。

  • 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。

  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。

  • 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema

安装 FastAPI

python -m pip install fastapi uvicorn[standard]
复制代码


有了这些,你已经安装了 FastAPI 和 Uvicorn,并准备学习如何使用它们。FastAPI 是你用来建立你的 API 的框架,而 Uvicorn 是使用你建立的 API 来服务请求的服务器。有了这些,你已经安装了 FastAPI 和 Uvicorn,并准备学习如何使用它们。FastAPI 是你用来建立你的 API 的框架,而 Uvicorn 是使用你建立的 API 来服务请求的服务器。

创建虚拟环境和新建项目

首先,在 Python 项目中创建一个新的文件夹,然后创建一个新的虚拟环境:


mkdir fastwebprojectscd fastwebprojectslspython3 -m venv env/
复制代码


这将确保我们安装的 Python 包与项目保持隔离。


激活虚拟环境


source env/bin/activate
复制代码


现在你可以安装 FastAPI 和 uvicorn,一个 ASGI 服务器。


pip install fastapi uvicorn
复制代码


如下图:


开始 HelloWorld 项目

在深入研究 Web 项目如何开发之前,我们可以在 FastAPI 中建立并运行传统的 "Hello World "应用程序。这可以证明我们的初始设置是正常工作的。


打开 Vim 或其他的 Python 编辑器,把下面的代码粘贴到一个叫做 main.py 的文件中。写入如下代码:


from fastapi import FastAPI # 1. 导入 FastAPI
app = FastAPI() # 2. 创建一个 FastAPI 实例
@app.get('/') # 3. 创建一个路径操作async def root(): # 4. 定义路径操作函数 return {'message': 'Hello World!'} # 5. 返回内容
复制代码


这五行代码中,你已经创建了一个工作的 API 。如果你曾经使用过 Flask ,这看起来应该非常熟悉。



  • 路由 @app.get('/'): 它告诉 FastAPI,当用户请求根/ 路径时,应该运行以下方法。

  • 方法定义 async def root() : 注意这个异步定义,这个方法将作为一个 Python3 协程 运行。如果你想了解更多关于并发性和 async 的信息,FastAPI 官方文档对其有一个很好的解释,以及是什么让 FastAPI 框架变得如此快速。


最后是返回语句,我们将数据发送到浏览器。


    return {'message': 'Hello World!'}
复制代码


正如你所期望的,访问这个端点将返回一个与上述字典相匹配的 JSON 响应数据。


最后,说得够多了,运行服务器看看它的运行情况吧!


uvicorn main:app --reload
复制代码


启动成功如图所示:



uvicorn main:app 命令含义如下:


  • mainmain.py 文件(一个 Python「模块」)。

  • app:在 main.py 文件中通过 app = FastAPI() 创建的对象。

  • --reload:让服务器在更新代码后重新启动。仅在开发时使用该选项。


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


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


该行显示了你的应用在本机所提供服务的 URL 地址。


说了这么多,我们打开浏览器访问 http://127.0.0.1:8000,可以看到如下的 JSON 响应:


{ "message": "Hello World!" }
复制代码


也可以运行 http://127.0.0.1:8000/docs ,运行这个服务器文档,可以看到基于 Swagger UI 自动生成的交互式 API 文档:



本框架还提供了一个可选的 API 文档,在浏览器运行 http://127.0.0.1:8000/redoc,可以看到如下由 ReDoc 自动生成的文档,如图:


OpenAPI

OpenAPI 规范(以前称为 Swagger 规范)是用于描述,生成,使用和可视化 RESTful Web 服务的机器可读接口文件的规范。


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


模式


模式是对事物的一种定义或描述。它并非具体的实现代码,而只是抽象的描述。


API 模式


在这种场景下,OpenAPI 是一种规定如何定义 API 模式的规范。定义的 OpenAPI 模式将包括你的 API 路径,以及它们可能使用的参数等等。


数据模式


模式这个术语也可能指的是某些数据比如 JSON 的结构。在这种情况下,它可以表示 JSON 的属性及其具有的数据类型,等等。


OpenAPI 和 JSON Schema


OpenAPI 为你的 API 定义 API 模式。该模式中包含了你的 API 发送和接收的数据的定义(或称为 Schema,模式),这些定义通过 JSON 数据模式标准 JSON Schema 所生成。

FastAPI 中 OpenAPI 的用途

驱动 FastAPI 内置的 2 个交互式文档系统的正是 OpenAPI 模式。


并且还有数十种替代方案,它们全部都基于 OpenAPI。你可以轻松地将这些替代方案中的任何一种添加到使用 FastAPI 构建的应用程序中。


你还可以使用它自动生成与你的 API 进行通信的客户端代码。例如 web 前端,移动端或物联网嵌入程序。

总结

本文介绍了 Python 中 FastAPI 这一框架,并利用其建立了一个快速的 HelloWorld 项目 API,最后介绍了关于 OpenAPI 的规范和其在 FastAPI 中的作用。希望能引入 Python 爱好者对这一框架的学习。


希望本文能对你有所帮助,如果喜欢本文,可以点个赞或者关注,十分感谢!


这里是宇宙之一粟,下一篇文章见!

宇宙古今无有穷期,一生不过须臾,当思奋争。


灵感来源:


发布于: 23 小时前阅读数: 72
用户头像

宇宙古今无有穷期,一生不过须臾,当思奋争 2020-05-07 加入

🏆InfoQ写作平台-签约作者 🏆 混迹于江湖,江湖却没有我的影子 热爱技术,专注于后端全栈,轻易不换岗 拒绝内卷,工作于外企开发,弹性不加班 热衷分享,执着于阅读写作,佛系不水文 同名公众号:《宇宙之一粟》

评论

发布
暂无评论
通过 Python FastAPI 开发一个快速的 Web API 项目_Python_宇宙之一粟_InfoQ写作社区