当前位置: 首页 > article >正文

Python Flask 构建REST API 简介

Python Flask 构建REST API

  • Python Flask 构建REST API 简介
    • 将 Flask 用于 REST API
      • 资源
      • API 端点
      • 路由
      • 参数解析(Argument parsing)

Python Flask 构建REST API 简介

REST 或 ReST 是 Representational State Transfer(表征状态传输)的首字母缩写,是客户端机器请求远程机器上存在的资源信息的一种架构。API 是应用编程接口(Application Programming Interface)的缩写,是一套与运行在不同机器上的应用软件进行交互的规则和协议。不同软件实体之间的交互并非新要求。在过去的几十年中,已经提出和发明了许多技术,以实现软件级交互的无缝和便捷。其中值得注意的技术包括远程过程调用(RPC)、远程方法调用(RMI)、CORBA 和 SOAP 网络服务。这些技术都有局限性,比如与某种编程语言绑定(如 RMI),或与专有传输机制绑定,或仅使用某种类型的数据格式。RESTful API(即通常所说的 REST API)几乎完全消除了这些限制。

HTTP 协议的灵活性和简单性使其成为 REST API 的传输机制的有利候选。使用 HTTP 的另一个好处是,它允许使用多种数据格式(如文本、XML 和 JSON)进行数据交换,而不会受限于一种格式,如 XML 是基于 SOAP 的 API 的唯一格式。REST API 与任何一种特定语言无关,这使它成为构建网络交互 API 的实际选择。下图展示了从 REST 客户端到使用 HTTP 的 REST 服务器的 REST API 调用的架构视图:

flowchart LR
    A[REST 客户端(移动应用程序、网页应用程序、网页浏览器)] -->| HTTP 请求| B[REST 服务器]
    B -->|HTTP 回应(XML、JSON、HTML 等等)| A

REST API 依赖于 HTTP 请求,并使用其本地方法,如 GET、PUT、POST 和 DELETE。从应用程序接口设计的角度来看,HTTP 方法的使用简化了客户端和服务器端软件的实施。开发 REST 应用程序接口时要牢记 CRUD 操作概念。CRUD 代表创建(Create)、读取(Read)、更新(Update)和删除(Delete)。这就是 HTTP 方法与 CRUD 操作一一对应的地方,例如,GET 表示 ReadPOST 表示 CreatePUT 表示 UpdateDELETE 表示 Delete 操作。

在使用 HTTP 方法构建 REST API 时,我们必须根据方法的幂等性能力谨慎选择正确的方法。在数学中,如果一个操作即使重复多次也能得到相同的结果,那么这个操作就被认为是幂等的。从其余 API 的设计角度来看,POST 方法不具有幂等性,这意味着我们必须确保 API 客户端不会为同一组数据多次发起 POST 请求。GETPUTDELETE 方法是幂等的,不过如果我们第二次尝试删除相同的资源,很可能会得到 404 错误代码。不过,从等价性的角度来看,这种行为是可以接受的。

将 Flask 用于 REST API

可以使用不同的库和框架构建 Python REST API。构建 REST API 的最流行框架是 Django、Flask(使用 Flask-RESTful 扩展)和 FastAPI。这些框架各有优缺点。如果网络应用程序也使用 Django 构建,那么 Django 是构建 REST API 的合适选择。不过,如果只使用 Django 开发应用程序接口,那就有点矫枉过正了。Flask-RESTful 扩展可与 Flask 网络应用程序无缝协作。Django 和 Flask 都拥有强大的社区支持,这有时是选择库或框架时的一个重要因素。FastAPI 被认为是性能最好的,如果目标只是为应用程序构建 REST API,那么它是一个不错的选择。但是,FastAPI 的社区支持与 Django 和 Flask 的支持水平不同。

我们选择了用于 REST API 开发的 Flask RESTful 扩展,以继续我们在网页应用程序开发方面的讨论。请注意,我们只需使用 Flask 就能构建一个简单的API,在本节中,我们将重点使用 REST 架构风格来构建 API。这意味着我们将使用 HTTP 方法对资源执行操作,该资源将由 Python 对象表示。

Flask-RESTful 支持的独特之处在于,它提供了一种方便的方法来 设置响应代码和响应头作为返回语句的一部分。

要使用 Flask 和 Flask-RESTful 扩展,我们需要安装 Flask-RESTful 扩展。我们可以使用以下 pip 命令将其安装到虚拟环境中:

pip install Flask-RESTful

在讨论如何实现 REST API 之前,最好先熟悉一下与 API 相关的一些术语和概念。一些与 API 相关的术语和概念。

资源

资源是 REST 应用程序接口的关键元素,而 Flask-RESTful 扩展库为其提供了支持。资源对象是通过从基本资源类(Resource 类)(可从 Flask-RESTful 扩展库中获取)扩展我们的类来定义的。基础资源类(Resource 类)提供了几个神奇的函数来帮助 API 开发,并自动将 HTTP 方法与资源对象中定义的 Python 方法关联起来。

API 端点

API 端点是客户端软件与服务器软件之间建立通信的入口点。简单来说,API 端点是服务或服务器 URL 的替代术语,程序在该服务或 URL 上监听 API 请求。通过 Flask-RESTful 扩展,我们可以将某个 URL(或多个 URL)与资源对象关联起来,从而定义 API 端点。在 Flask 实现中,我们通过从基本资源类(Resource 类)扩展来实现资源对象。

路由

应用程序接口路由的概念与 Flask 中的网络应用程序路由相似,唯一不同的是,在应用程序接口中,我们需要将资源对象(Resource Object)映射到一个或多个端点 URL 上。

参数解析(Argument parsing)

使用查询字符串或 HTML 表单编码数据可以解析 API 的请求参数。不过,这种方法并不可取,因为查询字符串或 HTML 表单都不是为了与 API 配合使用而设计的。推荐的方法是从 HTTP 请求中直接提取参数。为便于实现这一目的,Flask-RESTful 扩展提供了一个特殊的类 reqparse。这个 reqparse 类类似于 argparse,后者是解析命令行参数的常用选择。

<完>


http://www.kler.cn/a/582583.html

相关文章:

  • 通用验证码邮件HTML模版
  • 【推荐项目】 043-停车管理系统
  • Next+React项目启动慢刷新慢的解决方法
  • c++20 Concepts的简写形式与requires 从句形式
  • MySQL 入门笔记
  • DNAGPT:一个用于多个DNA序列分析任务的通用预训练工具
  • Pytorch 第十回:卷积神经网络——DenseNet模型
  • 图论Day2·搜索
  • 大模型安全新范式:DeepSeek一体机内容安全卫士发布
  • JS—闭包:3分钟从入门到放弃
  • 数据结构:排序详解(使用语言:C语言)
  • 赶紧白P这款免费神器!
  • 差分数组题目
  • 机器学习(吴恩达)
  • 有关MyBatis的缓存(一级缓存和二级缓存)
  • 【第四节】windows sdk编程:windows 中的窗口
  • 基于Python+SQLite实现校园信息化统计平台
  • java校验String是否符合时间格式 yyyy-MM-dd HH:mm:ss
  • vs2022用git插件重置--删除更改(--hard)后恢复删除的内容
  • Qt 6.6.1 中 QPixmap::grabWindow() 的用法与替代方案