什么是REST API?
AREST API是一种应用程序编程接口(API),它遵循表述性状态转移(REST)模型,用于通过互联网等网络在两个系统(客户端和服务器)之间表示和传输数据。REST API支持内部应用程序与第三方应用程序之间的信息交换,并支持企业将多个端点集成到其应用程序生态系统中。
注意:严格来说,REST指的是一种模型,并非用于描述遵循该模型的API的形容词;此类API的正确术语是RESTful API。不过,REST API的用法更为常见,因此本文采用这一术语。
什么是REST?
如前所述,REST是“表述性状态转移”的缩写,是计算机科学家Roy Fielding于2000年提出的一种架构风格。REST为开发人员提供了灵活性,非常适合在微服务架构中连接应用。
REST定义了6项约束,应用和API必须遵循这些约束,才能被视为符合REST风格:
- 统一接口
- 客户端-服务器架构
- 无状态性
- 分层系统
- 可缓存性
- 按需代码
有关这些限制的更多信息,请参阅Wikipedia。
统一接口
统一接口可简化整体系统架构,并提高交互的可见性。它还规定了具体要求,以确保信息以标准格式传输。
以下四项约束可确保REST接口保持统一:
- 每个资源都有唯一标识符(如URI),并且消息中的资源表示与服务器内部的资源表示相互独立
- 资源表示包含足够的信息,使客户端能够修改或删除资源的状态
- 每条消息都包含足够的信息,用于说明如何处理该消息
- 服务器使用超链接向客户端提供可用资源的信息,使客户端无需了解服务器内部机制
客户端与服务器
客户端-服务器架构由客户端、服务器和资源组成。将客户端控制的用户界面与服务器控制的数据存储分离,可使客户端和服务器组件独立演进,同时也更便于客户端用户界面跨多个平台移植以及服务器扩展。
在互联网上,客户端与服务器通过HTTP进行交互。
无状态性
在客户端与服务器通信中,无状态是指服务器不存储有关客户端或与其建立的会话的任何信息。客户端必须在每条消息中提供会话相关信息,使服务器无需参考之前消息的上下文即可独立理解该消息。这可以减轻服务器负载,提升高流量应用的性能。
分层系统
客户端无需知道(通常也无法判断)自己是直接连接到服务器,还是连接到反向代理或负载均衡器等中间服务器。中间服务器有助于提高可扩展性,还可用于处理安全事务,使服务器只需负责业务逻辑。
可缓存性
HTTP客户端和中间设备可以缓存服务器响应,以减轻服务器负载,并提高向最终用户交付数据的速度。服务器必须指明响应是否可缓存;如果不可缓存,则可确保后续最终用户请求收到的响应正确且为最新版本(而不是可能已经“过期”的响应)。由于客户端通过作为唯一标识符的URL访问资源,因此可以在资源级别确定要缓存的内容。
按需代码
按需代码是指服务器可以发送可执行代码,以临时扩展或自定义客户端功能,而无需客户端自行实现该功能。按需代码约束是可选的。
什么是资源?
REST中最重要的数据表示或抽象是资源。REST资源可以是任何类型的抽象信息,从数字文档到非数字对象。资源在任意给定时间的状态称为资源表示。
资源表示由三部分组成:
- 数据
- 元数据
- 超媒体链接
REST API由一组相互关联的资源(即其资源模型)组成,这些资源可通过唯一URI访问。客户端可通过在响应中链接相关资源和URI,实现灵活的功能。通常,对REST API的请求以HTTP GET请求的形式发送;服务器通常将响应格式化为JSON。
以下HTTP请求方法用于按指定方式操作资源:
- GET:加载资源
- POST:创建新资源
- PUT:修改现有资源
- DELETE,删除资源
资源标识符
在REST架构风格中,资源标识符用于唯一标识参与客户端与服务器交互的每个资源。
超媒体
“媒体类型”即数据格式的表示形式,用于定义资源的处理方式。在REST API中,所有媒体类型都基于JSON,并且属于超媒体(有时也称为超文本,但两者略有不同)。超媒体是指包含其他媒体链接的任何内容。超媒体即应用状态引擎(HATEOAS)是REST架构的独特之处。
注意:根据Roy Fielding的观点,API必须使用超媒体,才能被视为REST API。然而,如今许多API设计者即使不使用超媒体或超文本,也常常将自己的API称为“REST[ful]”,并将其作为一个流行术语。
自描述性
资源表示旨在具备自描述性,即API可在自身上下文中清楚表达其含义。借助自描述性表示,客户端无需了解资源所属的类别,而是根据与该资源关联的媒体类型执行操作。
REST API的优势
如今,大多数企业使用内部开发的API和第三方API,在提供基础、创新和关键功能的应用之间进行通信。其中大多数是REST API,因为REST规定的特定通信标准能够实现安全、高效且可靠的信息交换。REST API还可与任何协议配合使用。
REST API也具有安全性,因为RESTful Web服务会在发送响应前对请求进行身份验证。为验证用户身份,REST API采用HTTP身份验证(包括基本身份验证和持有者令牌)、API密钥和OAuth进行登录访问。
REST API的其他优势包括:
- 系统可扩展性:REST优化了客户端与服务器之间的交互,因此REST API可以高效扩展。RESTful的无状态性约束可降低服务器负载,因为服务器无需保存先前请求中的信息或与先前请求相关的信息。此外,可缓存性可减少可能造成瓶颈的客户端与服务器交互,从而实现可扩展的高性能API。
- 为开发人员提供灵活性:许多企业应用程序需要与内部或第三方API通信。RESTful Web服务支持客户端与服务器分离,使二者能够独立演进。
- 技术独立性:REST API不依赖相应应用所使用的编程语言和框架。客户端和服务器应用无需使用相同的语言或框架,并且可以更改语言或框架,而不会影响API设计或通信过程。
REST API 与 GraphQL 对比
尽管REST仍是连接客户端与服务器应用程序的主流架构,GraphQL(由Facebook于2012年开发,并于2015年开源)旨在作为REST的替代方案。GraphQL API只需一次请求,即可以标准化形式获取所需的全部数据,因此比REST API更高效,但REST在某些方面仍有优势。GraphQL的学习曲线较为陡峭,可缓存性也远低于REST。此外,应用程序通常由资源驱动,并不需要GraphQL这样的查询语言。尽管如此,这两种模式各有优缺点,组织可以选择同时使用二者。
NGINX如何提供帮助?
REST API的灵活性无疑是一项优势。但过于灵活也可能导致设计出的API速度缓慢或无法正常运行,因此许多开发者选择使用OpenAPI Specification来发布和管理API,并生成API文档。
API Connectivity Manager是F5 NGINX Management Suite的一部分,支持适用于REST API的OpenAPI规范。API Connectivity Manager以API开发者体验为核心进行设计,是一款轻量级云原生API管理解决方案,可无缝集成,将API发布到开发者门户和API网关。
开始NGINX Management Suite 30天免费试用,其中包括API Connectivity Manager和Instance Manager。

