RESTful API设计基础知识

作者 | Damon 爱数AnyShare引擎研发部-开发经理

本篇内容是对《RESTful Web Services》书中内容的精要摘录

目录

REST与Web

《RESTful Web Services》

《Java RESTful Web Service实战》

《架构风格与基于网络的软件架构设计》

面向资源的架构

如何实现REST式的API

极限面向对象

ROA的3个概念

资源(resource)

URI(Universal Resource Identifier)

表示(representations)

ROA的4大特性

可寻址性

统一接口

无状态性

连通性

统一接口

GET、HEAD

PUT、DELETE

POST(append)

POST(process)

安全性

幂等性

新建资源:PUT vs. POST

重载POST

        两个无可争议的用途

        不要丢失面向资源的设计

ROA设计

步骤

规划数据集

把数据集划分为资源

用URI为该资源命名

暴露一个统一接口的子集

设计来自客户端的表示

设计发给客户端的表示

用超链接和表单把资源与已有资源联系起来

考虑有哪些典型的事件经过

考虑可能出现哪些错误情况

资源设计

资源分类

        预定义的一次性(one-off)资源

        大量(或无数个)对应于各数据项的资源

        大量(或无数个)对应于一个可能的算法输出结果的资源

资源之间的关系

异步操作

        注意

        201状态码实现方式

        202状态码实现方式

批量操作

事务

URI设计

路径变量:父子关系

路径变量:并列关系

查询变量

要点说明

误区

深入理解

可寻址性的重要性

无状态性的重要性

统一接口的重要性

连通性的重要性

参考资料


REST与Web

《RESTful Web Services》

Web基础技术

  • HTTP应用协议、URL命名标准、XML标记语言。

Web背后的一套设计原则

  • 表示性状态转移(Representational State Transfer),或简称为REST。

REST这个词的由来

  • 客户端通过“在PUT或POST请求里附加一个表示(representation)”来对资源状态进行处理(DELETE请求也差不多,只是没有表示而已),而服务器通过“在响应客户端的GET请求时附上表示”来处理应用状态。

《Java RESTful Web Service实战》

REST

  • REST是一种分布式应用的架构风格,也是一种大流量分布式应用的设计方法论。REST是由(构成了Web基础架构的)HTTP、URI等规范的主要设计者Roy Fileding博士在其2000年的博士论文(《架构风格与基于网络的软件架构设计》)中提出的。

REST的实现

  • REST就是Web本身的架构风格,是设计、开发Web相关规范、Web应用、Web服务的指导原则。不符合REST风格要求的架构和技术,很难在Web这个生态系统中得到繁荣发展。
  • HTTP本身就是一种REST风格的应用协议,以REST风格来使用HTTP,才是最高效的使用方式。
  • HTTP+URI+XML是REST的基本实现形式,但不是唯一的实现形式。

《架构风格与基于网络的软件架构设计》

开发 REST 的动机

  • 为 Web应该如何运转创建一种架构模型,使之成为 Web 协议标准的指导框架。

REST这个词的由来

  • REST 的第一版开发于 1994 年 10 月和 1995 年 8 月之间,起初是作为当我编写 HTTP/1.0规范和最初的 HTTP/1.1 建议时,用来沟通各种 Web 概念的一种方法。它在随后的 5 年中以迭代的方式不断改进,并且被应用于各种 Web 协议标准的修订版和扩展之中。
  • REST 最初被称作“HTTP 对象模型”,但是那个名称常常引起误解,使人们误以为它是一个 HTTP 服务器的实现模型。
  • 这个名称“表述性状态转移”是有意唤起人们对于一个良好设计的 Web 应用如何运转的印象:一个由网页组成的网络(一个虚拟状态机),用户通过选择链接(状态转移)在应用中前进,导致下一个页面(代表应用的下一个状态)被转移给用户,并且呈现给他们,以便他们来使用。

面向资源的架构

如何实现REST式的API

 

极限面向对象

  

ROA的3个概念

资源(resource)

  • 任何事物,只要具有被引用的必要,他就是一个资源(resource)。如果你的用户“想为它创建一个超文本链接,关于它作一些断言,获取或缓存它的表示,在其他表示里包含它的一部分,标注它,等等”,那么你应该将它作为一个资源。
  • 通常,一个资源就是某个可以存放在计算机上并体现为比特流的事物,比如:一个文档、数据库里的一条记录,或者运行某算法的结果,等等。

URI(Universal Resource Identifier)

  • 统一资源标识符(Universal Resource Identifier)
  • URI既是资源的名称,也是资源的地址。如果一则信息没有URI,它就不能算是一个资源,也不能算真正在Web上,而只能算作描述另一个资源的一些数据。

表示(representations)

  • 资源是表示(representations)的来源,表示只是关于资源当前状态的一些数据。因为大多数资源本身就是一些数据项(就像“待解决bug列表”一样),所以对一个资源来说,最容易想到的一个表示就是这些数据本身。服务器可以采用XML文档、网页或逗号分割文本(comma-separated text)格式来表达“待解决bug列表”。“2004年第4季度的销量”可以采用数字或图表的形式来表达。许多新闻网站在发布文章时,既提供富含广告的格式,也提供简单、便于打印的格式。它们是同一资源的不同表示。

ROA的4大特性

可寻址性

  • 如果一个Web服务将其数据集里有价值部分作为资源(resource)发布出来,那么该应用就是可寻址的(addressable)。每个资源都有唯一的URI——其实,URI正是“统一资源标识符(Universal Resource Identif

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值