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++)。幂等约束对于服务安全性很重要

 

二、RPCRESTful

1.RPC (远程调用)样式的 Web 服务的客户端将一个装满数据的信封(包括方法和参数信息)通过 HTTP 发送到服务器。服务器打开信封并使用传入参数执行指定的方法。方法的结果打包到一个信封并作为响应发回客户端。客户端收到响应并打开信封。它忽略 HTTP 的大部分特性且仅支持 POST 方法,HTTP只是一个传输层的协议,SOAP是应用层协议。

2.RESTful规范中,接口的设计核心是面向资源的,每一个资源都有一个唯一确定的地址,资源是通过唯一地址url进行暴露,资源本身是方法调用的目标,方法列表对所有资源都是一样的,这些方法都是HTTP标准方法,常用的有:GETPOSTPUTDELETE

HTTP协议成应用层协议,在性能效率优于RPC

RESTful通过HTTPURL来触发,不使用soapxml命名空间

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(中文版)

猜你喜欢

转载自blog.csdn.net/android_gogogo/article/details/78061778