大家好,我是IT修真院成都分院第九期学员杨以杰,一枚正直纯洁善良的JAVA程序员
今天给大家分享一下,修真院官网JAVA任务2的深度思考:为什么要用REST风格以及不用的话接口怎么定义
PPT链接:PPT
为什么要用REST风格以及不用的话接口怎么定义_腾讯视频
1.背景介绍
官方介绍:REST(Representational State Transfer)指的是一种架构设计风格,而满足这种设计风格的应用程序或设计就被认为是RESTful架构风格。这也是目前互联网中最流行的一种软件架构风格,它结构清晰、符合标准、易于理解,越来越多的应用服务开始使用RESTful这种架构风格,尤其是那些基于HTTP协议的网络服务。
2.知识剖析
REST -- REpresentational State Transfer 中文翻译过来是:表现层状态转移。这个中文直译经常出现在很多博客中。尼玛谁听得懂“表现层状态转移”?这是人话吗?
之所以晦涩是因为前面主语被去掉了,全称是 Resource Representational State Transfer:通俗来讲就是:资源在网络中以某种表现形式进行状态转移。分解开来:
Resource:资源,即数据它可以是一段文本、一张图片、一首歌曲等;
Representational:某种表现形式,比如用JSON,XML,JPEG等;
State Transfer:状态变化。通过HTTP动词实现。
Rest风格总结后就是:
URL定位资源,用HTTP动词(GET,POST,DELETE,PUT)描述操作。
1. REST描述的是在网络中client和server的一种交互形式;REST本身不实用,实用的是如何设计 RESTful API(REST风格的网络接口);
2. Server提供的RESTful API中,URL中只使用名词来指定资源,原则上不使用动词。“资源”是REST架构或者说整个网络处理的核心。
3. 用HTTP协议里的动词来实现资源的添加,修改,删除等操作。
4. Server和Client之间传递某资源的一个表现形式,比如用JSON,XML传输文本,或者用JPG,WebP传输图片等。当然还可以压缩HTTP传输时的数据(on-wire data compression)。
5. 用 HTTP Status Code传递Server的状态信息。比如最常用的 200 表示成功,500 表示Server内部错误等。
为什么要用RESTful结构呢?
近年来移动互联网的发展,各种类型的Client层出不穷,RESTful可以通过一套统一的接口为 Web,iOS和Android提供服务。另外对于广大平台来说,比如Facebook ,微博开放平台,微信公共平台等,它们不需要有显式的前端,只需要一套提供服务的接口,于是RESTful更是它们最好的选择。
3.常见问题
举例说明:
我想定义接口,一个是获取信息,一个是删除信息,一个修改信息,一个新增信息以下接口看起来是没有问题的,而且大家一般也是这么做的
/user/getinfo
/user/putinfo?id=
/user/delinfo?id=
/user/add
但是,这不是RESTful的,因为你定义了一个行为,将行为细节都交给接口实现的,每一个行为独占一个接口,如果业务有变更,你可能还要改,比如要求只能删除7天之前的。以下接口则是RESTfull的,接口仅描述了资源,具体操作由指定的动作来完成。
4.解决方案
使用HTTP协议动词来做增删改查操作
GET /user/info
DEL /user/info?id=
PUT /user/info?id=
POST /user/info
这样,服务端仅需要简单的维护资源,做状态切换却可。对于只能删除7天之前的这种事,则由上层逻辑去控制,底层安稳的一直存在下去,除非某一天,确实不用这个资源了。
5.扩展思考
为什么要用RESTful结构呢?
近年来移动互联网的发展,各种类型的Client层出不穷,RESTful可以通过一套统一的接口为 Web,iOS和Android提供服务。,有了RESTful结构,不管是电脑端还是手机端,或者是APP,按照REST的接口来进行数据交互,完全不用关心后端实现,也就是说,前端和后端真正的实现了完全的分离设计。
提问环节:
①在jsp中并不支持使用put以及delete标签,我们该怎么使用?
答:在form表单中增加一条隐藏属性,
<input type="hidden" name="_method" value="DELETE">
②页面重定向和转发分别是什么?有什么区别
forward过程
转发,服务器端行为。web服务器把接受的请求,调用内部的方法在容器内部完成请求处理和转发动作,然后响应客户端,在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。
重定向,客户端行为。客户端发送http请求,web服务器接受后发送3**状态码响应及对应新的location给客客户端,客户端发现是3**响应,则自动再发送一个新的http请求,请求url是新的location地址,在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。重定向行为是浏览器做了至少两次的访问请求的。
forward:你先去A局办事,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来。
redirect:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局办。
当然,这个比喻也不是很准确,理解表达的意思就行。
------------------------------------------------------------------------------------------------------------------------
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
下期预告:nginx如何实现负载均衡?不见不散~
技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~
作者:萌新架构师