课堂课题:
什么是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)结束语:
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
【修真院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/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的时候为什么步扩展到接口文档的写法?,明明是相通的。
回复