Restful接口规范

  • 模型表示(Representations)
  • 消息(Messages)
  • URIs
  • 一致接口(Uniform interface)
  • 无状态(Stateless)
  • 资源之间的链接(Links between resources)
  • 缓存(Caching)
Restful 接口的 幂等性 :对同一Restful接口的访问,得到的资源状态是相同的。
安全性: 对该restful接口进行访问, 不会使服务器的的资源状态发生改变。
  1. 无状态(stateless)
查询工资是需要登录系统,进入查询工资的页面,执行相关操作后,获取工资的多少,则这种情况是有状态的,因为查询工资的每一步操作都依赖于前一步操作,只要前置操作不成功,后续操作就无法执行;如果输入一个url即可得到指定员工的工资,则这种情况是无状态的
RPC风格的服务,受开发服务采用语言的束缚比较大,如.NET框架中,开发web service的传统方式是使用WCF,基于WCF开发的服务即RPC风格的服务,使用该服务的客户端通常要用C#来实现
所谓RESTful服务,基本可分为本真REST和hybrid风格两类
  1. 遵循ROA体系结构
(1)可寻址(Addressability):资源是可以找的到的,可以访问的。
(2)无状态性(Statelessness):每个对资源的请求(如:HTTP请求)都是孤立的,不依赖于其前或后的请求。
(3)连通性(Connectedness):资源通过它的表示彼此连接起来。在Web服务中,它的意思是通过遵循朝连接或提交表单就可以改变服务状态。
(4)统一接口(Uniform Interface):采用统一的对外操作接口。
3.资源
连接在计算机中,可以通过比特流进行操作的一类实体,必须有个URI,URI(统一资源标识)包括URN(统一资源名称)和URL(统一资源定位符)
URI一般由三部分组成:
1. 访问资源的命名机制。
2. 存放资源的主机名。
3. 资源自身的名称,由路径表示。
资源是以json(或其他Representation)为载体的、面向用户的一组数据集,资源对信息的表达倾向于概念模型中的数据:
  • 资源总是以某种Representation为载体显示的,即序列化的信息
  • 常用的Representation是json(推荐)或者xml(不推荐)等
  • Represntation 是REST架构的表现层
4.统一接口
RESTFul风格的设定是基于数据的元操作,即CRUD(create, read, update和delete,即数据的增删查改)
  • GET(SELECT):从服务器取出资源(一项或多项)。
  • POST(CREATE):在服务器新建一个资源。
  • PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)。
  • PATCH(UPDATE):在服务器更新资源(客户端提供需要修改的资源数据)。
  • DELETE(DELETE):从服务器删除资源。
5.认证机制
基于上述Restful的特性(例如无状态),那么需要认证机制确认访问者是谁,该访问者对该资源是否具有使用、修改、删除等等相关权限,而这认证机制是每个系统内部限定的
常用的认证机制包括 session auth(即通过用户名密码登录),basic auth,token auth和OAuth,服务开发中常用的认证机制为后三者
Basic Auth(BA)是配合RESTful API 使用的最简单的认证方式,只需提供用户名密码即可,但由于有把用户名密码暴露给第三方客户端的风险,在生产环境下被使用的越来越少。因此,在开发对外开放的RESTful API时,尽量避免采用Basic Auth
Token Auth并不常用,它与Basic Auth的区别是,不将用户名和密码发送给服务器做用户认证,而是向服务器发送一个事先在服务器端生成的token来做认证。因此Token Auth要求服务器端要具备一套完整的Token创建和管理机制,该机制的实现会增加大量且非必须的服务器端开发工作,也不见得这套机制足够安全和通用,因此Token Auth用的并不多。
OAuth(开放授权)是一个开放的授权标准,允许用户让第三方应用访问该用户在某一web服务上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的第三方系统(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。
 

原文地址:https://www.cnblogs.com/fuGuy/p/9206156.html