这里是修真院后端小课堂,每篇分享文从

深度思考中的知识点——为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?

1.背景介绍

REST(Representational State Transfer)指的是一种架构设计风格,而满足这种设计风格的应用程序或设计就被认为是RESTful架构风格。

这也是目前互联网中最流行的一种软件架构风格,它结构清晰、符合标准、易于理解,越来越多的应用服务开始使用RESTful这种架构风格,尤其是那些基于HTTP协议的网络服务。

而常常提及的rest的web服务,是rest作为在web领域的一种实现方式

2.知识剖析

所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。

它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。

要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。

表现层(Representation)

"资源"是一种信息实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。

URI只代表资源的实体,不代表它的形式。

严格地说,有些网址最后的".html"后缀名是不必要的,因为这个后缀名表示格式,属于"表现层"范畴,而URI应该只代表"资源"的位置。

它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现层"的描述。

状态转化(State Transfer)

访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。

互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。

客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。

它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

Rest风格总结

1. REST描述的是在网络中client和server的一种交互形式;REST本身不实用,实用的是如何设计 RESTful API(REST风格的网络接口);

2. Server提供的RESTful API中,URL中只使用名词来指定资源,原则上不使用动词。“资源”是REST架构或者说整个网络处理的核心,表示一个网络实体,代表一个资源;它对应唯一的一个资源,是资源的地址。

3. 用HTTP协议里的动词来实现资源的添加,修改,删除等操作。

4. Server和Client之间传递某资源的一个表现形式

5. 用 HTTP Status Code传递Server的状态信息。

3.常见问题

1.@pathvariable @requestparam共同点

答:用于从request中接收请求的,两个都可以接收参数

2@pathvariable @requestparam区别

答: RequestParam  汉语意思就是: 请求参数 顾名思义 就是获取参数的

PathVariable 汉语意思是:路径变量,顾名思义,就是要获取一个url 地址中的一部分值

4.编码实战

5.扩展思考

什么是幂等操作?幂等性为什么重要?

等幂性(Idempotence)

, 等幂性简单点说就是一次请求和多次请求,资源的状态是一样。

比如GET和HEAD,不论你请求多少次,资源还是在那里。

请注意,DELETE和PUT也是等幂的,以为对同一个资源删除一次或者多次,结果是一样的,就是资源被删除了,不存在了。

为什么说PUT也是等幂的?当你PUT一个新资源的时候,资源被创建,再次PUT这个URI的时候,资源还是没变。

当你PUT一个存在的资源时,更新了资源,再次PUT的时候,还是更新成这个样子。

在PUT更新的时候,不能做相对的更新(依赖资源现在的状态),比如每次对一个数加1,这样资源状态就会变化。

应该每次更新成某个数,比如把某个数变成4,则无论多少次PUT,值都是4,这样就是等幂了。

我们设计Restful WS的时候,GET,HEAD, PUT, DELETE一定要设计成等幂的。

由于网络是不可靠的,安全性和等幂性就显得特别重要。

如果一次请求,服务器收到处理以后,客户端没有收到相应,客户端会再次请求,如果没有等幂性保障,就会发生意想不到的问题。

POST是不安全也不等幂的,还是拿weblog的例子,如果两次POST相同的博文,则会产生两个资源,URI可能是这样/weblogs/myweblog/entries/1和/weblogs/myweblog/entries/2,尽管他们的内容是一摸一样的。

6.参考文献

https://blog.csdn.net/xinjianwuhen1991/article/details/50095021

http://www.ruanyifeng.com/blog/2011/09/restful.html

7.更多讨论

1,为什么要用RESTful结构呢?

答:近年来移动互联网的发展,各种类型的Client层出不穷,RESTful可以通过一套统一的接口为 Web,iOS和Android提供服务。

有了RESTful结构,不管是电脑端还是手机端,或者是APP,按照REST的接口来进行数据交互,完全不用关心后端实现,也就是说,前端和后端真正的实现了完全的分离设计。

2.在使用rest之前,是怎么写接口的

答:URL该怎么写就怎么写,但是没有PUT,GET,POST,DELETE方法

3.1. 重定向和转发的区别?

答:redirect和forward。重定向可以带数据过去,转发不能。转发是服务器行为,重定向是客户端行为。

分享到此结束

rest风格使用两个变量_为什么要用Rest风格,接口应该怎么定义,除了Rest还可用什么方式写接口的?...相关推荐

  1. 没有第三个变量的前提下交换两个变量_多变量相关性分析(一个因变量与多个自变量)...

    目录: 前言 偏相关或复相关 意义与用途 分析方法: 1. 样本相关系数矩阵.相关系数检验 2. 复相关分析 3. 决定系数 (RMSE的介绍) 小结 一.前言: 继上一篇文章,继续探讨相关性分析,这 ...

  2. rest风格使用两个变量_REST风格

    path = "/view/{参数}"# REST风格 介绍REST 我们这种风格是相当于带参数时,参数没有使用传统的?号后面带参数形式 我们可以清晰的看出来我们的参数是1 示例: ...

  3. rest风格使用两个变量_REST风格,@PathVariable注解

    REST(Representational State Transfer,表述性状态转移)是一种软件风格.所谓的REST风格可以简单理解为:使用url表示资源时,每个资源都用一个独一无二的url来表示 ...

  4. rest风格使用两个变量_Restful风格接口浅析

    为什么使用RESTful 1.JSP技术可以让我们在页面中嵌入Java代码,但是这样的技术实际上限制了我们的开发效率,因为需要我们Java工程师将html转换为jsp页面,并写一些脚本代码,或者前端代 ...

  5. 以空格为分隔符读取内容给两个变量_问与答61: 如何将一个文本文件中满足指定条件的内容筛选到另一个文本文件中?...

    学习Excel技术,关注微信公众号: excelperfect Q:如下图1所示,一个名为"InputFile.csv"文件,每行有6个数字,每个数字使用空格分隔开. 图1 现在, ...

  6. java互换_两个变量交换的四种方法(Java)

    对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) 1 class TestEV 2 //创建一个类 3 { 4 public ...

  7. 用异或来交换两个变量能提快速度是错误的

    在进行两个变量的时候,常常会看到有些书误人子弟的推荐使用异或的方式: 方式一 {   x = x ^ y; y = x ^ y; x = x ^ y; } 而不是採用暂时变量实现交换: 方式二 { i ...

  8. php比较两个变量的值_总结PHP不用第三个变量交换两个变量的值的几种方法

    "PHP不用第三个变量交换两个变量的值"这个题看到过好多次了,看来面试确实喜欢考这道题.今天,对于这个题目,我自己总结了几种方法,可能不全,大家来互相补充. 有些仅适用于字符串,方 ...

  9. python不用中间变量交换值_不使用中间变量,交换int型的 a, b两个变量的值。

    不使用中间变量,交换int型的 a, b两个变量的值. 代码如下: //by ppchen var a = 10, b = 2; a = a + b; b = a - b; a = a - b; 代码 ...

最新文章

  1. String、StringBuilder、StringBuffer的比较
  2. 如何使用应用程序库缓存
  3. TCP 通信过程中各步骤的状态
  4. python基础教程:startswith()和endswith()的用法
  5. poj 1020 深搜
  6. xml.modify() 实例演示(二)
  7. 从知乎了解到,为什么Mysql禁用存储过程、外键和级联?
  8. OS X EI Captain 下解决 There was a problem confirming the ssl certificate 问题
  9. python关于文件的一些记录
  10. 机器学习实践测试驱动的开发方法pdf
  11. 计算机组成原理课后答案(唐朔飞第三版) 第三章
  12. html5shiv_深入探讨:HTML5 Shiv和Polyfills
  13. EDI 助力 VMI 加固供应链三道防线
  14. wifi已连接不可上网服务器无响应,为什么手机连上wifi却上不了网
  15. 使用Pilon对基因组进行polish
  16. Unity3D 中实现毛笔效果
  17. html 字体形状,二十款漂亮的CSS字体样式
  18. android定位周边,Android 使用高德SDK编写周边搜索定位
  19. PGA Tour PRize Money(Uva 207)
  20. `CSS filter` 有哪些神奇用途

热门文章

  1. scikit-learn决策树算法类库使用小结
  2. mysql日志(介绍 路径修改 备份)
  3. Win7 64bit系统下未能加载文件或程序集“System.Data.SQLite”的另一解决办法
  4. 数据分析师 需求分析师_是什么让分析师出色?
  5. 数据中台是下一代大数据_全栈数据科学:下一代数据科学家群体
  6. ab 模拟_Ab测试第二部分的直观模拟
  7. 莫烦Matplotlib可视化第四章多图合并显示代码学习
  8. leetcode910. 最小差值 II(贪心)
  9. git 列出标签_Git标签介绍:如何在Git中列出,创建,删除和显示标签
  10. 中科大计算机专业少实习_为什么很少有计算机科学专业的人?