restful是什么?

时间:2024-05-20 14:04:54

大家好,我是IT修真院北京分院第32期学员,一枚正直善良的java程序员。

今天给大家分享一下,修真院官网java任务二中会使用到的知识点:

1.背景介绍

restful风格,就是一种面向资源服务的API设计方式,它不是规范,不是标准,它一种设计模式。

REST -- REpresentational State Transfer 直接翻译:表现层状态转移。

用一句话来描述就是:

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

2.知识剖析

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

资源(Resource):在REST中,资源可以简单的理解为URI,表示一个网络实体。

比如,/users/1/name,对应id=1的用户的属性name。

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

既然资源是URI,就会具有以下特征:名词,代表一个资源;它对应唯一的一个资源,是资源的地址。

为什么使用rest?

我们平时搞系统是这样的:

1.有新建用户功能

2.新建用户需要一个URL

3.往这个URL发送的数据要定义好

4.开始写后端和前端

这是以操作为第一位的设计方法,首先我们确认了一个操作,然后围绕这个操作把

周边需要的东西建设好,这种方式当然可以架构出一个系统,甚至是一个好系统。

出现的问题:

1.操作之间是会有关联,你的设计容易变成“第2个操作要求第1个操作进行过”,这种关系多起来你的系统就乱了

2.你的URL设计会缺乏一致性

3.操作通常被认为是有副作用(Side Effect)的,所以很少有人基于操作去设计缓存之类的东西

基于这些问题,我们的另一种方法是基于资源的角度来搞:

1.各个资源虽然可能有关联,但依旧是能够简单地切掉这些关联导致相互独立的,所以不会有非常乱的耦合性

2.对资源的操作就这么几种,所以很容易设计一致的URL

3.我们明白对资源的读操作是无副作用的,所以能玩缓存

rest的优势和优点:

首先,REST规范:

1.强调HTTP应当以资源为中心,并且规范了资源URI的风格;

2.规范了HTTP请求动作(PUT,POST等)的使用,具有对应的语义;

遵循REST规范的Web应用将会获得下面好处:

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

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

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

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

get、put、post、delete含义与区别:

1、GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,

只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。

无论进行多少次操作,结果都是一样的。

2、与GET不同的是,PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update

操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。

3、POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,

就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。

4、DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作。

3.常见问题

html表单form中,method没有put、delete?

4.解决方案

1.在 web.xml 中配置 HiddenHttpMethodFilter 过滤器

2.编写表单模拟 PUT 和 DELETE

方式提交说明: PUT 和 DELETE 方式 ,在写表单提交的时候还是发送 post 请求,

但是要附加一个隐藏的文本域,name 的值固定为 “_method”,value 写 “PUT” 或者 “DELETE”。

3.编写控制器

5.编码实战

。。。

6.扩展思考

对于用户登录和用户退出这两个业务需求,REST指导下的架构和设计如何满足?

a.把“登录”作为一个资源,所以登录是POST /logins,退出是DELETE /logins。

b.对应于Authentication的POST和DELETE,一般在移动端也就是Token的POST和DELETE

c.至于Login和Logout到底是资源还是操作?我认为是User这个资源的状态的变更。

当然,『登录』这个概念已经是一个历史名词了,现代的用户系统,都只有『申请/发放令牌』的操作。让用户通过令牌来完成验证和鉴权,而非通过『登录』来改变系统中的用户状态。

7.参考文献

参考一:http://www.ruanyifeng.com/blog/2011/09/restful.html 理解RESTful架构

参考二:http://blog.****.net/programmer_sir/article/details/51592433 Restful风格到底是什么?怎么应用到我们的项目中?

8.更多讨论




restful是什么?



     restful的优缺点?

  • 优点:强调HTTP应当以资源为中心,并且规范了资源URI的风格;
  •           规范了HTTP请求动作(PUT,POST等)的使用,具有对应的语义;
          遵循REST规范的Web应用将会获得下面好处:
  •           URL具有很强可读性的,具有自描述性;
  •          资源描述与视图的松耦合;
  •          可提供OpenAPI,便于第三方系统集成,提高互操作性;
  •          如果提供无状态的服务接口,可提高应用的水平扩展性;
  • 缺点:
  •         REST是一种架构风格,但其使用方法还缺乏正式的标准或者规范。要了解这种风格,我们需要为其添加注释,否则不同使用者对于功能的理解与效果会出现一定程度的偏差。

    


     put和post都可以更新资源,两者有什么区别

POST

用于提交请求,可以更新或者创建资源,是非幂等的

PUT

用于向指定的URI传送更新资源,是幂等的


     讲一讲a标签和form表单的submit?有什么异同

a标签表示超链接,链接的一个资源或者一个url

而form中input中传递给后台程序的是数据,或者请求!


     put 和 post 部署到服务器上乱码怎么办

写在开头:

一般说来在每个页面的开始处,都会加入:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

contentType="text/html;charset=UTF-8"的作用是指定对服务器响应进行重新编码的编码 

    pageEncoding="UTF-8" 是讲jsp编译成servlet时的编码 ;


     那要是使用from表单提交的话后面的{id}怎么用action传值?

用param
<action name="getTemplate" class="tabAction" method="getTemplateByParas">
    <param name="objectId">${objectId}</param>
    <param name="param1">${param1}</param>
    <param name="items">${items}</param> 
    <result name="success" type="chain">
        <param name="actionName">${actionName}</param>
        <param name="namespace">${namespace}</param>
    </result>     
</action> 


     form表单本身不支持put、delete 通过何种方式用form表单发put、delete请求?

1.使用HiddenHttpMethodFilter

在web.xml中配置如下过滤器

     <filter>
        <filter-name>HttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>










感谢大家观看!

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

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~

我的邀请码:22610227,或者你可以直接点击此链接:http://www.jnshu.com/login/1/22610227