spring 的REST风格是什么

spring 的REST风格是什么spring 的REST风格是什么

大家好,又见面了,我是你们的朋友全栈君。

作者:Wall·E
链接:https://www.zhihu.com/question/33959971/answer/58671683
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

首先,REST是一种规范:

  • 强调HTTP应当以资源为中心,并且规范了资源URI的风格;
  • 规范了HTTP请求动作(PUT,POST等)的使用,具有对应的语义;

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

  • URL具有很强可读性的,具有自描述性;
  • 资源描述与视图的松耦合;
  • 可提供OpenAPI,便于第三方系统集成,提高互操作性;
  • 如果提供无状态的服务接口,可提高应用的水平扩展性;

 

下面再详细说明一下REST。了解事物,分三步走:

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

资源(Resource):在REST中,资源可以简单的理解为URI,表示一个网络实体。比如,/users/1/name,对应id=1的用户的属性name。
既然资源是URI,就会具有以下特征:名词,代表一个资源;它对应唯一的一个资源,是资源的地址。

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

【实践】
怎么用呢?不同的Server端框架提供了各种解决方案。比如JavaEE中的开箱即用的Spring-MVC。
但实践过程中,你自然会碰到一些需要思考的问题:
1)如何定义资源:一般对应数据库实体(在传统的关系型数据库中)。
2)需要对HTTP协议更多的理解
URL格式:协议://域名/路径?查询#HASH,实际的一个HTTP请求,还会包括Header(含Cookie、Method等)

资源的URI格式:协议://域名/路径,它只是URL的子集,表征一个资源实体。比如,http://a.com/users/1

恰当地理解和返回Http Status(状态码)。200=成功,404=资源不存在,500=服务器端错误等等。

3)REST操作
一般资源操作只有新增、删除、查询、更新,对应HTTP协议中四类请求:POST、DELETE、GET、PUT。其中,后三个操作是幂等的。(什么是幂等?)

查询资源时,更多的参数,比如分页、排序、过滤条件,一般都会放在URL的查询部分(Query String)。
新增、更新资源,关于资源实体的内容,一般放在请求体(Request Body)中。

实际发送请求,还需要有动词,表示对该资源执行什么样的操作。那么超出这个范围的操作该如何扩展

REST操作返回什么内容?对于删除、新增、更新等操作,通常是返回操作是否成功的标识;如果失败,需要返回错误代码和消息,方便客户端做进一步处理。如果是查询操作,通常包含实体或者实体列表。
在最佳实践中,应当还应该返回与此操作相关的其他操作。比如,查询得到实体的响应中,应包含该实体的删除、更新操作的地址。

请求和返回的Body,采用什么格式?常见的格式包括XML/JSON/HTML。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105989.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月24日 上午8:20
下一篇 2022年4月24日 上午8:20


相关推荐

  • pycharm2021激活码(破解版激活)

    pycharm2021激活码(破解版激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    243
  • C#编写OPC客户端读取OPC服务器的数据(最高效简洁版)「建议收藏」

    C#编写OPC客户端读取OPC服务器的数据(最高效简洁版)「建议收藏」想要了解更多,可以添加扣扣群143440558,免费交流,免费下载以上文件,免费了解更多编写OPC客户端,网上的资料一般是一上来就要求找OPCDAAuto.dll,其实我想说,用VS,那都是多此一举,当然,如果你是在需要,我也可以提供给您最新版OPCDAAuto.dll(v2.2.5.30)(https://download.csdn.net/download/wanghuaihu/11…

    2022年6月20日
    103
  • jquery获取iframe的src(input标签type属性有哪些)

    一句搞定,不搞那些花里胡哨的$(‘#InformationURL’).attr(‘src’,’https://www.baidu.com’);//#InformationURL:iframe的id=”InformationURL”,注意这里的#是后加上的//这里将src设置为百度,当然你也可以设置为参数形式//其他的为固定写法…

    2022年4月15日
    41
  • UML画图工具汇总

    UML画图工具汇总最近学习了 UML 搜集了一把各类的画图工具以及它们的特点 最后选出我认为最好用的一款工具 rose 大象 书里面就是用的这款软件 但是这个貌似要钱 激活成功教程版版本很低 界面看起来也比较复古 不推荐 staruml 挺有名的软件 界面比较美观 也有免费的社区版本可以使用 但问题是用起来真的好复杂 定义一个版型我都找了大半天 貌似也不支持自动排版 就靠咱这手残的劲 很难画出一个优美的图 plantuml 代码画图软件 写过几次 速度是很快 尤其是画时序图 贼快贼方便 但也止步于此了 画一个稍微复杂点需要个

    2026年3月18日
    28
  • OpenClaw 再升级,OpenFang 重磅开源!

    OpenClaw 再升级,OpenFang 重磅开源!

    2026年3月13日
    3
  • java键盘输入语句_java的输入语句小结

    java键盘输入语句_java的输入语句小结1.使用Scanner使用时需要引入包importjava.util.Scanner;首先定义Scanner对象Scannersc=newScanner(System.in);如果要输入整数,则intn=sc.nextInt();String类型的,则Stringtemp=sc.next();比如:importjava.util.Scanner;publicclass…

    2022年7月7日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号