浅谈RESTful

一、解读REST

REST翻译为表述性状态转移,源自某个博士发表的一篇论文。REST具有跨平台、跨语言的优势。从诞生开始,就得到了许多语言的快速支持,JAVA也不甘示弱。

REST不是一种技术、也不是一个标准或者协议而是一种架构风格,在这种风格中,对象被视为一种资源,通常使用概念清晰的名词命名。

二、REST与JAVA

JAX-RS是java领域的REST风格的Web服务的标准规范,是JAVA完成REST服务的基本约定。JSR339 名为The Java API for RESTful Web Service 既 JAX-RS2.0, 其参考实现是Glassfish项目中的Jersey2.0

Java领域的其他实现

  1. Jboss的RESTEasy
  2. Apache的CXF

没有遵循JAX-RS规范的REST风格的项目

  1. Restlet
  2. LinkedIn
  3. Rest.li
  4. Springmvc

三、REST与JSON

完全没有关系,有人一提到REST,就想到只要返回的数据是JSON格式,那就是REST API。不对,HTTP+URI+XML是REST的基本实现形式。

四、REST API设计

REST使用HTTP协议的通用方法作为统一接口的标准,REST服务所提供的方法信息都在HTTP的方法里。

每一种HTTP请求方法都可以从 安全性幂等性 两个方面考虑。要定义严谨的REST接口,就需要正确理解HTTP方法的安全性和幂等性

安全性:外系统对接口的访问,不会是服务器的资源状态发生变化。
幂等性:外系统对同一REST接口的多次访问,得到的资源状态是相同的。

常用的HTTP方法:
  1. GET:安全性和幂等性, 读取一个数据应该设计成GET请求,因为读取一个资源,无论你多少次请求,得到的数据总是一样的,遵循幂等性,读取资源不会对其他状态做改动,遵循安全性。
    举个例子,读取一个A资源时,要和B资源进行对比,如果不同,要同步A资源到B资源,从表面看是读取操作,但是有可能对资源进行修改,不具有安全性, 所以不应该设计成GET请求。
  2. PUT:幂等性,不安全性。用于更新数据,多次更新同一个资源。对资源状态的改变是相同的。所以遵循幂等性。更新资源应该设计成PUT请求
  3. DELETE:幂等性,删除一个资源,多次删除, 服务器产生相同的变化。 其返回中可以定义为 void 因为删除以前对改资源已经充分了解,没有必要再将其从服务器上传递回来,HTTP状态码应为 204
  4. POST:不幂等、也不安全。REST风格应该使用POST请求添加资源。
资源命名和资源定位

应该使用名词的单数或者复数作为资源的名称,一旦使用动词,资源从一个主语变成了宾语。从面像资源的角度上看,已经不再是面向资源,而是面向动作了。

REST使用URI实现资源定位,对外提供的REST服务就是公布一系列URI及其参数,资源地址是用来表达逻辑上的层次结构的, 可以从整体到局部,也可以是从一般到具体,使用 “/” 来分隔逻辑上的层次结构。

资源地址应该是全小写字母或者数字,多个单词使用“-”分隔。

参考资料:

Java RESTful Web Service 实战(第二版)韩陆著

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值