RESTful风格WebService简介
RESTful是一种设计风格不是标准,关注核心是要处理的资源,通过RUL触发执行。是一种比RPC(远程调用)更轻量级、更安全的服务端和客户端交互方式,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。可有多种实现方式,如java中spring
一、幂等性和安全:
1.幂等性
数学概念: f(f(x)) = f(x),x被函数f作用一次和无限次结果一样,即幂等,反之非幂等。
软件系统:某个函数或接口使用相同的参数调用一次或无限次,造成影响相同,不会产生灾难性后果
2.HTTP的幂等性(常用):
GET方法,用于获取资源,不管调用多少次接口,不会导致服务器状态改变(日志和访问计数器外),幂等。
PUT它直接把实体部分的数据替换到服务器的资源,我们多次调用它,只会产生一次影响幂等
DELETE 调用一次和多次对资源产生影响是相同的,幂等
POST每次调用都会产生新的资源,非幂等
调用HTTP幂等方法(GET/PUT/DELETE)是安全的,打个比方,GET方法内的逻辑,不能对资源进行非幂等操作(i++)。幂等约束对于服务安全性很重要
二、RPC和RESTful:
1.RPC (远程调用)样式的 Web 服务的客户端将一个装满数据的信封(包括方法和参数信息)通过 HTTP 发送到服务器。服务器打开信封并使用传入参数执行指定的方法。方法的结果打包到一个信封并作为响应发回客户端。客户端收到响应并打开信封。它忽略 HTTP 的大部分特性且仅支持 POST 方法,HTTP只是一个传输层的协议,SOAP是应用层协议。
2.RESTful规范中,接口的设计核心是面向资源的,每一个资源都有一个唯一确定的地址,资源是通过唯一地址url进行暴露,资源本身是方法调用的目标,方法列表对所有资源都是一样的,这些方法都是HTTP标准方法,常用的有:GET、POST、PUT、DELETE。
HTTP协议成应用层协议,在性能效率优于RPC。
RESTful通过HTTPURL来触发,不使用soap的xml命名空间
Eg:(针对book资源的操作)
String getUrl="http://localhost:8080/webservice/book/19";(HTTP GET方法查id=19)
String deleteUrl="http://localhost:8080/webservicebook?bookId=5";(HTTP DELETE方法 删除 bookId=5)
String postUrl="http://localhost:8080/webservice/book"(HTTP POST 增加book,参数HTTTP请求体)
String putUrl="http://localhost:8080/webservice/book"(HTTP PUT修改book,参数HTTTP请求体)
重要的约束:
可寻址性:暴露资源都有一个唯一确定的URL
URL:具有可读性,原则上不适用动词
统一接口:对任何资源的操作通过HTTP GET(读) POST(增) PUT(改) DELETE(删)
安全性:HTTP GET/PUT/DELETE操作必须符合幂等性约束。非幂等方法POST前后端代码设计控制其安全。对于可读可写的服务,通过Token认证
无状态性:HTTP的无状态性,分布式系统中,每一次请求独立,负载均衡分发请求
三、RESTful设计一般步骤:
参考:RESTful Web Service(中文版)