IT修真院·小课堂丨互联网职业小课堂在线学习平台

课堂课题:

什么是restful?rest的请求方法有哪些,有什么区别?

关联任务:

任务五

直播时间:

2019-08-17 17:00:00


课堂内容:

视频链接:

PPT链接:

提交按钮:

小课堂内容格式


标题:

【修真院xx(职业)小课堂】课题名称

开场语:

大家好,我是IT修真院XX分院第X期的学员XX,一枚正直纯洁善良的XX程序员,今天给大家分享一下,修真院官网XX(职业)任务X,深度思考中的知识点——XXX

(1)背景介绍:

背景介绍的时候,尽可能的要宽广,讲清楚来龙去脉,讲清楚为什么会需要这个技术。

(2)知识剖析:

讲知识点的时候,尽可能的成体系,学会成体系的去给别人介绍知识。现在很多做的都是零散的,没有分类。

(3)常见问题:

最少列出1个常见问题。

(4)解决方案:

写清楚常见问题的解决方案。

(5)编码实战:

尽可能的去寻找在真实项目中在用的。如果你能找到某个网站在用你说的知识点,这是最好的。学以致用,否则当成练习题就没有意义了。多准备一些demo,讲解过程中将知识点和demo结合,便于大家理解所讲解的知识点。

(6)拓展思考:

知识点之外的拓展思考,由分享人进行讲解,这些东西就是所谓的深度,也是一个人技术水准高低比较的表现。

(7)参考文献:

引入参加文献的时候,在引用的句子后面加上序号【1】。参考文献中列出详细来源。不要去抄别人的东西,这是一个基本的态度。

(8)更多讨论:

Q1:提问人:问题?
A1:回答人(可以是分享人,也可以是其他学员):回答
Q2:提问人:问题?
A2:回答人(可以是分享人,也可以是其他学员):回答
Q3:提问人:问题?
A3:回答人(可以是分享人,也可以是其他学员):回答

(9)鸣谢:

感谢XX、XX师兄,此教程是在他们之前技术分享的基础上完善而成。

(10)结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

什么是restful?rest的请求方法有哪些,有什么区别?     中品

辅导师兄


【修真院java小课堂】什么是restful?rest方法有哪些?有什么区别?

大家好,我是IT修真院武汉分院第29期的学员王全,一枚正直纯洁善良的java程序员.

今天给大家分享一下,修真院官网java任务2,深度思考中的知识点:

什么是restful?rest方法有哪些?有什么区别?

(1)背景介绍:

疑惑1:为什么用RESTful结构?

曾经,网页是前端后端不分离的,比如之前的PHP,JSP等,这个在之前的桌面时代问题尚且不大,但是近年来移动互联网的发展,各种类型的Client层出不穷,这种模式就很僵硬了.

因此更为合理的RESTful应运而生,它可以通过一套统一的接口为 Web,iOS和Android等提供服务。另外对于广大平台来说,比如Facebook platform,微博开放平台,微信公共平台等,它们不需要有显式的前端,只需要一套提供服务的接口,于是RESTful更是它们最好的选择。

疑惑2:REST是什么?是如何提出的?

REST全称是resource representational state,表现层状态转化,这不好理解,因此用另一句话概括:

URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。

REST全称是resource representational state,表现层状态转化.

它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:"我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。

REST指的是一组架构约束条件和原则。" 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。

REST本身并没有创造新的技术、组件或服务,而隐藏在RESTful背后的理念就是使用Web的现有特征和能力, 更好地使用现有Web标准中的一些准则和约束.

我们接下来会细细剖析其中的知识点.

(2)知识剖析:

[资源resource]

REST的名称"表现层状态转化"中,省略了主语. "表现层"其实指的是"资源"(Resources)的"表现层".

所谓资源,是网络上的一个具体信息,它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实体。本质上就是数据,是网络的核心.

例如:

某用户的手机号码

某用户的个人信息

最多用户订购的GPRS套餐

两个产品之间的依赖关系

某用户可以办理的优惠套餐

楼主,求资源. 这里的"资源"也是属于资源的范畴.

[统一标识符URI]

要让一个资源可以被识别,需要有个独一无二标识,在WEB中这个唯一标识就是URI(Unriform Resource Identifier)

URI既可以看成是资源的地址,也可以看成是资源的名称,如果某些信息没有使用URI来表示那就不能算是一个"资源",只能算是资源的一些信息.

[表现层]

资源是一种信息实体,它可以有多种外在表现形式;把"资源"具体呈现出来的方式叫做它的"表现层".

比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。

[状态转化]

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

如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。

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

这四种方法很重要很常见,我们接下来会详细介绍.

3)常见问题:

rest有哪几种方法?其区别是什么?uri的设计原则?

4)解决方案(解答):

[HTTP方法,四大金刚]

大致来说:

GET用来获取资源,对应着查询.

POST用来新建资源(也可以用于更新资源),对应着新增.

PUT用来更新资源,对应着更改.

DELETE用来删除资源,对应删.

他们在安全性,幂等性上都有差别.

(幂等性:对同一REST接口的多次访问,得到的结果是相同的.

安全性:对该REST接口访问,不会使服务器端资源的状态发生改变,换句话说,请求一般不产生副产物.)

GET - 提供的资源的只读访问。最常用于向服务器查询某些信息,必要时可将查询字符串参数追加到URL末尾,以便将信息发送给服务器.

安全且幂等

PUT -在REST中主要用于更新资源,因为大多数浏览器不支持put和delete,会自动将put和delete请求转换get和post,因此为了使用put和delete方法需要以post发送请求,在表单中使用隐藏域发送真实请求。

不安全但幂等

DELETE - 用于删除资源。

不安全但幂等.

POST - 用于更新现有资源或创建新的资源。

不安全且不幂等.

区别:

POST与SET

POST方法提交的数据放置在HTTP报文实体的主体里,所以相比GET方法而言,POST方法安全性更高.

GET方法传输的数据量一般限制在2KB,而POST方法对于数据大小是无限制的.

POST与PUT

最大的区别:PUT是幂等的,即多次调用不应产生副作用,而POST不幂等.

URI的设计原则:

最重要的:可寻址性原则,要具有自描述性,要易读.

例如分析github的一些uri设计:

https://github.com/git

https://github.com/git/git

https://github.com/git/git/blob/master/block-sha1/sha1.h

https://github.com/git/git/commit/e3af72cdafab5993d18fae056f87e1d675913d08

https://github.com/git/git/pulls

https://github.com/git/git/pulls?state=closed

https://github.com/git/git/compare/master…next

总结技巧就是:

使用_或-来让URI可读性更好

曾经Web上的URI都是冰冷的数字或者无意义的字符串,但现在越来越多的网站使用_或-来分隔一些单词,让URI看上去更为人性化。 例如开源中国社区,它上面的新闻地址就采用这种风格

http://www.oschina.net/news/38119/oschina-translate-reward-plan

使用/来表示资源的层级关系

例如上述/git/git/commit/e3af72cdafab5993d18fae056f87e1d675913d08就表示一个多级的资源, 指的是git用户的git项目的某次提交记录,又例如/orders/2012/10可以用来表示2012年10月的订单记录。

使用?用来过滤资源

很多人只是把?简单的当做是参数的传递,很容易造成URI过于复杂、难以理解。可以把?用于对资源的过滤, 例如/git/git/pulls用来表示git项目的所有推入请求,而/pulls?state=closed用来表示git项目中已经关闭的推入请求, 这种URL通常对应的是一些特定条件的查询结果或算法运算结果。

可以用,或;表示同级资源的关系

有时候我们需要表示同级资源的关系时,可以使用,或;来进行分割。例如哪天github可以比较某个文件在随意两次提交记录之间的差异,或许可以使用/git/git /block-sha1/sha1.h/compare/e3af72cdafab5993d18fae056f87e1d675913d08;bd63e61bdf38e872d5215c07b264dcc16e4febca作为URI。 不过,现在github是使用…来做这个事情的,例如/git/git/compare/master…next。

(5)编码实战:

(6)拓展思考:

什么是无状态?

无状态原则是RESTful架构设计中一个非常重要的原则,无状态是相对于有状态而言的.状态指的是请求的状态,在无状态的Web服务中,每一个Web请求都必须是独立的,请求之间是完全分离的,Server没有保存Client的状态信息,所以Client发送的请求必须包含有能够让服务器理解请求的全部信息,使得一个Client的Web请求能够被任何可用的Server应答;而有状态的请求的状态信息只保存在第一次接受请求的Server上,所以后来同一个Client的请求都只能由这一台Server来处理.

无状态的请求有利于实现均衡负载.

restful的好处?

REST极大降低沟通复杂度,通过把表征作为唯一的沟通方式,无需去讨论过程而只需讨论表征.

URL具有很强可读性的,具有自描述性;

资源描述与视图的松耦合;

可提供OpenAPI,便于第三方系统集成,提高互操作性;

如果提供无状态的服务接口,可提高应用的水平扩展性;

(7)参考文献:

怎样用通俗的语言解释REST,以及RESTful?(知乎)

https://www.zhihu.com/question/28557115

RESTful 架构详解(菜鸟教程)

https://www.runoob.com/w3cnote/restful-architecture.html

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~


评论

[武汉|]JAVA- 发表于 2019-08-21 11:24:05 #1

讲restful的时候为什么步扩展到接口文档的写法?,明明是相通的。

回复

请您登录 后进行评论