FastAPI 基础知识——使用 FastAPI 更快
FastAPI 基础知识——使用 FastAPI 更快
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于基于标准 Python 类型提示使用 Python 3.7+ 构建 API。
什么是 API?
API 是的首字母缩写词 应用程序接口 ,这是一个软件中介,允许两个应用程序相互通信。
在 API 的上下文中,接口可以被认为是两个应用程序之间的服务契约。该合约定义了两者如何使用请求和响应相互通信,这些响应消息可以是任何受支持的格式,如 XML、JSON、CSV 等。
想象一下,你和你的伴侣去一家餐馆吃饭,你想下订单。你会怎么做?打电话给服务员并下订单。现在,后端会发生什么?服务员去找厨师并提供订单详情。菜做好了,他就拿给你。这就是 API 通常的工作方式。 API 允许客户端访问后端或服务器的特定资源。
credit : https://www.analyticsvidhya.com/
为什么选择 FastAPI?
我不会告诉你我们为什么喜欢 FastAPI 是因为它是
- 快速地
- 快速编码
- 更少的错误
- 直觉的
- 简单的
- 短的
- 强大的
- 基于标准
你已经知道了,这就是你阅读这篇文章的原因对吗??
如何安装它?
Installation via pip
Uvicorn是一个 地理信息系统 ( 异步服务器网关接口 ) 用于 Python 的 Web 服务器实现。 ASGI 是 WSGI 的精神继承者,旨在提供支持异步的 Python Web 服务器、框架和应用程序之间的标准接口。
让我们创建一个基本的 fastAPI
创建一个基本的python脚本,我们来命名它 主要的.py。 在其中,我们将导入 fastAPI 并创建一个函数,该函数在通过端点调用时将返回“Hello World”。这将确保我们已成功安装 fastAPI 并且它已启动并运行 - 通用目标 “你好世界”
现在为了运行服务器,我们需要按照以下语法在终端中运行 uvicorn。
**uvicorn main:app — 重新加载**
“ 主要的 ” → 是模块/脚本名称,即 main.py(我们不必在这里写 .py 扩展名)&“ 应用程序 ” → 是类的实例变量 快速API 我们在上面的代码片段中创建的。
[ http://127.0.0.1:8000/](http://127.0.0.1:8000/) 在浏览器(本地机器)中运行它会获取上述 API 的响应。
FastAPI 提供称为 Swagger UI 的交互式 API 文档。对于运行 Swagger UI 运行 → http://127.0.0.1:8000/docs **** 在浏览器中。您将看到自动交互式 API 文档。
Swagger UI
所以我们的 API 正在返回正确的消息✅,但请稍等一下这里发生了什么⁉️⁉️
了解路径操作
什么是路径?
这个网址的最后一部分 http://127.0.0.1:8000/ 在 8000 之后开始。所以在这里 “/” 也是一条路。它也被称为 端点/路由/api .
什么是操作?
操作指的是 HTTP 方法 .它们有很多,但最常用的 HTTP 方法如下:
**邮政 :** 创建数据。 **得到 :** 检索/读取数据。 **放 :** 更新数据。 **删除 :** 删除数据。
这些操作组合在一起称为 ** CRUD** 操作。
回到我们的应用程序。这 ” ** @app.get('/')”** 装饰师 ** __** 给 快速API 两条信息。 1. 这是一个 ** 得到** 手术。 2.路径参数为 ** “/”。** 一个 ** 装饰师** 总是在函数之上定义的,该函数接受该函数并对其进行处理。这里,函数 ** 根据** 将被调用 快速API 每当它收到对 URL 的请求时 ** “/”** 使用 GET 操作。
现在我们知道了如何创建端点/路径以及如何在任何函数上装饰它,让我们使用 GET 和 POST 方法探索一些示例。
路径参数
路径参数是我们通过路径/端点传递的参数/变量/值。我们需要在里面声明参数 ** {}** 并且需要在函数中将相同的变量声明为参数。因此端点/路径处的变量将作为参数传递给函数。
FastAPI 集成了 Pydantic,因此我们可以使用 Python 类型注释获得类型验证的所有好处。我们只需要定义类型,无需担心幕后的数据验证。
让我们创建一些端点/api 并查看响应以证明上述陈述。
示例 1:
API documentation — Swagger UI
Request URL & Response Body
注意到一些东西 即使我们将 1234 作为路径参数传递,它也被解析为字符串,但当我们在 python 脚本中输入输入时会发生什么?是的,我们在这里面临同样的问题。但在这里,它们是 URL 的一部分,它们是“自然”的字符串。如果我们传递一个浮点数或日期对象会发生什么?好奇的??自己测试一下——学习的唯一方法!!!
现在让我们看看我们处理了类型的第二个示例。
示例 2:
API documentation — Swagger UI
Request URL & Response Body
结果如预期。这是因为当我们声明数据的类型时,首先将它们转换为该类型,然后对其进行验证。但是如果我们传递除了 int 之外的任何东西会发生什么。让我们来看看。
When passed a float
When passed a string
查询参数
您是否曾经在搜索引擎上键入一个地址,只是为了返回一些冗长而复杂的内容,带有等号和问号?
查询参数可以定义为出现在 “?” 在由分隔的 URL 中 “ &” 人物。
问号用于分隔路径和查询参数。
路径和查询参数之间的区别?
- 路径参数出现在 “?” 在 URL 中,而 Query 参数紧随其后。
- 路径参数标识特定资源/资源,而查询参数用于对资源进行排序/过滤。
- 您不能在查询中省略路径参数中的值。
Query parameters example
我们定义了两个端点 “/添加” 这需要两个查询参数 x 和 y,我们已经使用类型注释处理了类型,另一个是 “/乘” 这也是相同的,只是它有一个默认值,我们也可以使用 None 定义一些可选参数,但我们将在 邮政 方法。
当我们用 Python 类型声明参数时,它们会转换为该类型并针对它进行验证。
让我们测试一下 迅雷客户端 .
Query with type validation
“/add”的网址是: http://127.0.0.1:8000/add?x=4&y=6
Query with default values
& “/multiply” 的 URL 是: http://127.0.0.1:8000/乘 , 这里的网址不同,没有“?”或“&”符号,这要归功于在不传递任何查询时使用的默认值,如果我们提供一个它会覆盖默认值。请参阅下面的查询
Overriding default values
请求正文
Antipodal of Response 是客户端需要通过 API 向服务器端发送数据的请求。要发送数据,我们通常使用 POST 方法。再次进行数据验证,我们使用 pydantic 的 基本模型 .使用 ** 基本模型** 我们定义一个类/模型并声明所有必需的数据/字段及其类型。如果某些值已初始化,则不需要其他值,我们可以通过使用使值可选 没有任何。 阅读更多关于 Pydantic 这里 .
Model Class using BaseModel
这里:
- user_id 是必需的,并且必须是整数数据类型。
- user_age 是一个可选值,如果传递需要是一个整数。
- user_name 是必需的,并且必须是字符串数据类型。
- user_nick_name 是必需的,并且在传递时需要是一个字符串,如果没有传递任何内容,它的默认值为“Oreo”。
默认值的类型自动设置字段的类型。
JSON Schema
首先,我们将传递所有字段。
在上面的例子中,只有 user_age 是可选的,所以让我们发送一个丢弃可选值的请求。
因此,这几乎是您开始使用 FastAPI 所需了解的所有基础知识。我希望你喜欢这篇文章。在另一个话题上见
感谢阅读继续学习保持真棒
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明