API 设计是有风格的,RPC
、REST
、GraphQL
是当前比较流行的三种设计风格。在后面的文章中,我们会采用 REST
风格,对 API 进行设计和实现,所以本文就和大家一起认识一下 REST
.
REST
是 Representational State Transfer
的缩略词表示,直译过来就是表征状态传输,具象状态传输,表述性状态转移,表现状态传输等,这也是网络上常见等译法。这种直译,让人有种知道每个词的意思,但不知道这些词组合起来在说什么的感觉。
所以,我们先来了解一下 REST
的产生,再尝试解释一下这个术语。
2000年,Roy Thomas Fielding 在他的博士学位论文——《Architectural Styles and the Design of Network-based Software Architectures》——中提出了 REST 架构风格,并在论文的第五章,CHAPTER 5 Representational State Transfer (REST),详细阐述了 REST
架构风格。与此同时,论文的作者正在进行 HTTP 1.1 协议的开发工作。正是这项工作,促成了 REST 架构风格的产生。
REST 架构风格的目标就是帮助构建高效的、可扩展的、可靠的分布式系统。分布式系统也是一个比较抽象的词,在这里,我们可以理解为由许多位于不同计算机上的软件组成,相互之间靠网络连接和通信,协同完成工作的系统。
论文作者提出,REST 架构风格的设计要满足下面六个约束(constraint)要求:
REST(Representational State Transfer)
译成中文的关键是对 Representational
这个词的理解。
文章开头已经给出了一些网络常见翻译,现在我们从论文里找找线索。在论文的第五章里,Representational
出现了 4 次,都是以 Representational State Transfer
的组合方式使用的。他的名词形式 Representation
出现了 53 次。下面是一些相关的摘抄。
A representation is a sequence of bytes, plus representation metadata to describe those bytes.
representation 是一串有序字节及其描述它的元数据。
Other commonly used but less precise names for a representation include: document, file, and HTTP message entity, instance, or variant.
为了帮助大家理解这个词语,作者还列举了几个相似的词语:文档(document),文件(file),HTTP 消息体(HTTP message entity),实例(instance),或变量(variant)。
A representation consists of data, metadata describing the data, and, on occasion, metadata to describe the metadata (usually for the purpose of verifying message integrity).
representation 包括数据,元数据(描述数据的数据),描述元数据的数据
。
The data format of a representation is known as a media type.
representation 的数据格式是大家所熟知的媒体类型。
大家可以把认为合理的词放入句子里,讲的通,能明白就行。当然,也可以去原文中研读更多的语境。
这里,比较合适的词可以是表示,描述,相应的 REST
可以翻译为:
甚至是把 Representational
这个词忽略掉,到更让人容易理解。Representational
这个词强调的应该是资源的状态是可以通过某种形式让客户端识别的。不管怎样,到底是僧敲月下门
,还是僧推月下门
,请大家见仁见智吧。