Python REST API 教程:FastAPI 入门
REST API 是一种用于创建 Web 服务的架构模式。REST 是一组规则,概述了在客户端和服务器之间共享数据的最佳实践。它们使用 HTTP 请求来操作数据并与 Web 服务通信。REST API 具有无状态、可缓存和一致性的特点。它们非常适合构建通用且可扩展的 Web 应用程序。三大主流 Python 框架分别是 Django、Flask 和 FastAPI。
今天,我们将探索 FastAPI,一个用于使用 Python 构建 API 的开源 Web 框架。
让我们开始吧!
我们将介绍:
什么是 FastAPI?
FastAPI 官方网站将 FastAPI 描述为一个基于标准 Python 类型提示,使用 Python 3.6+ 构建 API 的现代高性能 Web 框架。FastAPI 非常快,因为它开箱即用地支持async
Python 3.6+ 的功能。
FastAPI 于 2018 年发布,由 Sebastián Ramírez 创建。Ramírez 对 Flask 和 DRF 等现有框架不满意,因此他使用 Starlette 和 Pydantic 等工具创建了自己的框架。现在,许多大型科技公司,例如 Uber、Netflix 和 Microsoft,都在使用 FastAPI 构建他们的应用程序。
FastAPI 功能
FastAPI 有很多很棒的功能。我们来看看:
-
高性能:顾名思义,FastAPI速度很快。它被认为是目前最快的 Python 框架之一。
-
强大:您可以使用自动交互式文档创建可用于生产的代码。
-
直观:FastAPI 的设计旨在易于使用和学习。它提供了出色的编辑器支持和文档。
-
快速编码:FastAPI 可将您的开发速度提高 200%-300%。
-
更少的虫子:它减少了约 40% 的诱发虫子。
-
兼容性:它与 APIS、OpenAPI(以前称为 Swagger)和 JSON 模式的开放标准配合良好。
-
插件:您可以使用依赖注入轻松创建插件。
-
类型提示:您可以使用类型提示进行数据验证和转换。
Flask 与 FastAPI
在本节中,我们将探索 Flask 和 FastAPI。我们将讨论它们的优点、缺点和用例。
烧瓶
Flask 是一个Python 微框架。它自带 ORM、缓存和身份验证功能。它旨在使用 Python 构建 Web 应用程序。它被认为简单、快速且可扩展。
优点
-
灵活:您可以操作 Flask 的大多数方面。
-
直观:Flask 因其简单性而非常适合初学者。
-
内置开发服务器:此内置功能及其集成支持允许进行无缝单元测试。
缺点
-
没有数据验证:使用 Flask,你可以传递任何数据类型。这可能会导致程序经常崩溃。
-
时间:它有一个单一来源,轮流处理请求,这意味着处理请求可能需要一些时间。
用例
Flask 通常用于以下项目:
- 电子商务系统
- 社交媒体机器人
- 社交网络
- 静态网站
快速API
FastAPI 是一个现代的高性能 Web 框架,用于构建 Web API。
优点
-
数据验证:即使在嵌套的 JSON 请求中,它也会验证您的数据类型。
-
异常处理:使用 FastAPI,可以轻松进行异常处理。
-
异步代码支持:它支持使用
async/await
Python 关键字的异步代码。
缺点
-
请求验证:FastAPI 使用 Pydantic 进行请求验证。此过程并不总是很直观,有时需要您编写自己的自定义验证器。
-
社区较小:由于该框架仍然很新,因此与其他框架相比,其社区较小。
用例
FastAPI 通常用于以下项目:
- 内部危机管理
- 部署机器学习模型
- 为 Web 应用程序创建帐户、登录名和身份验证
FastAPI 你好世界
让我们开始使用 FastAPI 练习吧!我们先来看一个简单的例子Hello World!
,然后逐一分解。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root ():
return {"message": "Hello World!"}
要启动服务器,我们需要运行以下命令:
uvicorn main:app --reload
让我们来分析一下:
main
: 指的是文件名app
FastAPI
:指的是在 hello.py 文件里面创建的对象--reload
:代码更改后使服务器重新启动的参数
让我们分解一下Hello World!
代码:
-
第 1 行:我们导入
FastAPI
,这是一个提供 API 的所有功能的 Python 类。 -
第 3 行:我们创建该类的一个实例
FastAPI
并将其命名为app
。这就是上述命令中app
引用的。uvicorn
-
第 5 行:我们创建一条
GET
路径。 -
第 6 行:我们定义了每当有人访问上述路径时执行的函数。
-
第 7 行:每当访问该路线时,我们都会向客户端返回响应。
基本 FastAPI 构建块
让我们探索 FastAPI 的一些组成部分,包括路径参数、查询参数和请求主体。
路径参数
路径参数有助于将 API 调用范围缩小到单个资源,这意味着您不必为像资源查找器这样简单的东西构建主体。
这些参数括在花括号中{}
,它们为您提供了一种控制特定资源表示的方法。它们位于查询字符串之前和端点路径内。
让我们看看如何使用它们:
from fastapi import FastAPI
app = FastAPI()
@app.get("/courses/{course_name}")
def read_course(course_name):
return {"course_name": course_name}
路径参数的值将作为参数course_name
传递给函数。read_couse()
course_name
查询参数
查询参数是可选的。在 FastAPI 中,未声明为路径参数一部分的函数参数将被自动解释为查询参数。
让我们看一些示例代码:
from fastapi import FastAPI
app = FastAPI()
course_items = [{"course_name": "Python"}, {"course_name": "SQLAlchemy"}, {"course_name": "NodeJS"}]
@app.get("/courses/")
def read_courses(start: int, end: int):
return course_items[start : start + end]
查询是URL 中问号后面的一组键值对,以 &符号分隔。?
&
看一下以下网址:
http://localhost:8000/courses/?start=0&end=10
其查询参数为:
start
其值为0
,end
其值为10
。
在代码的第 8 行,我们传递了 API 所需的两个查询参数。
请求正文
请求主体是客户端发送到 API 的数据。要在 FastAPI 中声明一个,我们可以使用 Pydantic 模型。
让我们看一个例子来了解如何做到这一点:
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
class Course(BaseModel):
name: str
description: Optional[str] = None
price: int
author: Optional[str] = None
app = FastAPI()
@app.post(“/courses/”)
def create_course(course: Course):
return course
让我们来分析一下:
-
第 1-3 行:我们导入所需的包。
-
第 5 行:我们声明请求数据模型。
-
第 11 行:我们创建
FastAPI
该类的一个实例。 -
第 13 行:我们创建一条
POST
路径。 -
第 14 行:我们将请求数据模型添加到路径中。
下一步要学什么
恭喜您迈出了 FastAPI 的第一步!FastAPI 是一个轻量级的 Python Web 框架。它允许您轻松、快速、高效地构建 API。如果您对 Web 应用程序开发感兴趣,学习 FastAPI 将使您领先一步。为了更好地掌握该框架,我们建议您深入研究并参与一些项目。
接下来建议讨论的一些主题是:
- 并行处理
- 使用 GitHub 将 API 部署到云
- 默认和可选参数
- ETC。
要开始学习这些概念及更多内容,请查看 Educative 的课程《使用 Python 构建 REST API 并将其部署到 Microsoft Azure》。在本课程中,您将学习如何使用 FastAPI 在 Python 中构建 REST API,并将其部署到 Microsoft Azure。最终,您将能够将 FastAPI 实现到您自己的项目中。
学习愉快!