REST 编程风格是什么

首先,REST规范:
  • 强调HTTP应当以资源为中心,并且规范了资源URI的风格;
  • 规范了HTTP请求动作(PUT,POST等)的使用,具有对应的语义;
遵循REST规范的网络应用将会获得下面好处:
  • URL具有很强可读性的,具有自描述性;
  • 资源描述与视图的松耦合;
  • 可提供的OpenAPI,便于第三方系统集成,提高互操作性;
  • 如果提供无状态的服务接口,可提高应用的水平扩展性;

下面再详细说明一下REST了解事物 :

【基本概念】
REST是一种软件架构模式。核心概念包括:

资源(Resource):在REST中,资源可以简单的理解为URI,表示一个网络实体。比如,/ users / 1 / name,对应id = 1的用户的属性name。
既然资源是URI,就会具有以下特征:名词,代表一个资源;对应它唯一的一个资源,是资源的地址。

表现(Representation):是资源呈现出来的形式,比如上述URI返回的HTML或JSON,包括HTTP Header等;

【实践】
怎么用呢?不同的服务器端框架提供了各种解决方案比如JavaEE的中的开箱即用的Spring的MVC。
但实践过程中,你自然会碰到一些需要思考的问题
1)如何定义资源:一般对数据库实体(在传统的关系型数据库中)
2)需要对HTTP协议更多的理解
URL格式:协议://域名/路径?查询#HASH,实际的一个HTTP请求,还会包括报头(含饼干,方法等)

资源的URI格式:协议://域名/路径,它只是URL的子集,表征一个资源实体。比如a.com/users/1

恰当地理解和返回Http Status(状态码).200 =成功,404 =资源不存在,500 =服务器端错误等等。

3)REST操作
一般资源操作只有新增,删除,查询,更新,对应HTTP协议中四类请求:POST,DELETE,GET,PUT其中,后三个操作是。幂等的(什么是幂等。? )

查询资源时,更多的参数,比如分页,排序,过滤条件,一般都会放在网址的查询部分(查询字符串),
新增,更新资源,关于资源实体的内容,一般放在请求体(请求体)中。

实际发送请求,还需要有动词,表示对该资源执行什么样的操作。那么超出这个范围的操作该如何扩展?

REST操作返回什么内容对于删除,新增,更新等操作,通常是返回操作是否成功的标识;?如果失败,需要返回错误代码和消息,方便客户端做进一步处理如果是查询操作,通常包含实体或者实体列表。
在最佳实践中,应当还应该返回与此操作相关的其他操作。比如,查询得到实体的响应中,应包含该实体的删除,更新操作的地址。

请求和返回的机身,采用什么格式?常见的格式包括XML / JSON / HTML。

【特点】

1. 状态无关 —— 确保系统的横向拓展能力
2. 超文本驱动,Fielding的原话是”hypertext-driven" —— 确保系统的演化能力
3. 对 resource 相关的模型建立统一的原语,例如:uri、http的method定义等 —— 确保系统能够接纳多样而又标准的客户端

从另外一个角度看,第一条保证服务端演化,第三条保证客户端演化,第二条保证应用本身的演化,这实在是一个极具抽象能力的方案。

 

猜你喜欢

转载自blog.csdn.net/wzbwzh/article/details/80765048