理解RESTfulAPI架构设计规范与实

摘要

本文介绍了REST的由来,对REST的风格架构设计指导原则做了详细的说明。同时举例了过往开发中若干细节的考虑和实现方案。

文字略长,预计需要10~20分钟读完。也可以收藏起来,在需要的时候查阅。

RESTful架构是目前流行的一种互联网应用架构。如果把网站,移动应用从服务器到前端,从整体上看作是一个软件,它就是一个层次清楚,功能强,扩展方便,适宜通信的架构规范。

·01·

什么是REST

REST是“RepresentationalStateTransfer”的缩写,直译过来就是“表述性状态转移”。这是一个很奇怪的名词,刚看到的时候,不知其所以然。这个名词来源于RoyThomasFielding博士著名的论文《ArchitecturalStylesandtheDesignofNetwork-basedSoftwareArchitectures》(架构风格与基于网络的软件架构设计)。

论文发表于年,作者在基于REST的约束上设计了HTTP协议。设计REST的目的,就是为了指导现代Web架构的设计与开发。他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。

论文的第六章,作者解释了这个名词的由来:

REST最初被称作“HTTP对象模型”,但是那个名称常常引起误解,使人们误以为它是一个HTTP服务器的实现模型。这个名称“表述性状态转移”是有意唤起人们对于一个良好设计的Web应用如何运转的印象:一个由网页组成的网络(一个虚拟状态机),用户通过选择链接(状态转移)在应用中前进,导致下一个页面(代表应用的下一个状态)被转移给用户,并且呈现给他们,以便他们来使用。

第四章描述了设计REST的动机:“为Web应该如何运转创建一种架构模型,使之成为Web协议标准的指导框架”。第五章从一个没有约束的空架构开始,不断的添加约束,从而使此架构进化为Web所需要的架构。

所以,REST是一组架构约束。

REST约束包括:客户-服务器,无状态,缓存,统一接口,分层系统,按需代码。如果一个架构符合REST原则,就称它为RESTful架构。

为实现统一的接口,REST由四个接口约束来定义:

资源的识别(identificationofresources)、通过表述对资源执行的操作(manipulationofresourcesthroughrepresentations)、自描述的消息(self-descriptivemessages)、应用状态引擎的超媒体(hypermediaastheengineofapplicationstate,HEOAS)。

当我们用这个原则来设计服务器端的接口,为前端或者外部提供数据时,就称它为RESTfulAPI。目前观察到,业内在实践中有下面这些指导原则:

用统一资源标识符来标识资源应用状态引擎的超媒体(HEOAS)使用标准的HTTP方法安全性和幂等性无状态性

在实际开发过程中,我们还会涉及下面几个方面:

版本鉴权常见场景状态码和错误处理返回结果文档

在REST出现之前,程序间的网络通信架构采用的是远程过程调用(RemoteProcedureCall,RPC),而后又在RPC基础上发展出来简单对象访问协议(SimpleObjectAccessProtocol,SOAP),此后,出现了REST。

REST是一种面向资源的架构,它能更好的适应分布式下的系统架构设计。对于开发者来说,越来越简单,越来越灵活。

·02·

什么是资源

资源是一种概念上的映射。

任何能够被命名的信息都能够作为一个资源,它是对信息的核心抽象:一份文档、一张图片、一个与时间相关的服务(例如:“我现在城市的天气”)、一个包含其他资源的集合、一个非虚拟的对象(例如:用户)等等。它是到一组实体的概念上的映射,而不是实体本身。

更精确地说,资源R是一个随时间变化的成员函数MR(t),该函数将时间t映射到等价的一个实体或值的集合,集合中的值可能是资源的表述和,或资源的标识符。

资源不是存储对象,也不是单个文件,更不是某个文本、音频、视频等具体事物。

在设计具体API的时候,资源是业务系统里,抽象出来的一个业务对象。例如:用户(User),订单(Order),令牌(Token)等等。它允许随时间变化,输出不同值。

一个资源具有一个或者多个标识。这里说的标识就是统一资源标识符(UniformResourceIdentifier,URI)。统一资源定位符(UniformResourceLocator,URL)则是URI的一种具体实现,是URI的子集。在通常的API设计中,直接使用URL来标示应用系统中的资源。

例如:




转载请注明:http://www.aierlanlan.com/tzrz/5233.html