什么样的风格才叫RESTFUL

strSpecial 2014-10-17 03:06:22
看了一些相关的资料说RESTFUL风格可以提高项目的性能,而且现在到处都在说我们项目是REST风格,我想问到底什么样的风格才是REST风格的,求来点例子简单说明一下,讲的通俗易懂一点
...全文
38778 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
is_Min 2016-12-14
  • 打赏
  • 举报
回复
http://www.ruanyifeng.com/blog/2011/09/restful.html 17楼给的这篇博文确实不错,一下就懂了.
kongzaohui 2016-11-09
  • 打赏
  • 举报
回复
嗯,听他们讲了这么多,大概是这样……还是要在用的时候去体会,多练习!
周蔚蓝 2016-09-01
  • 打赏
  • 举报
回复
看了楼上诸位的回答,感觉似懂非懂,总结一下,不知道总结的对不对,还望大家指正。 比如有个url:http:www.test.com/user/1,这个地址既要表示删除id为1的用户、又要表示修改id为1的用户,还要表达获取id为1的用户,那么,就要用到http1.1的不同的请求方法:get、post、delete、put,
u010562988 2016-04-14
  • 打赏
  • 举报
回复 1
阮一峰的这篇博文已经说的非常详细了 http://www.ruanyifeng.com/blog/2011/09/restful.html 这里我补充一下个人的拙见,如有不对之处还望大家指出。 简单来说就是Restful风格是一种编程时候的约束,你的编程时候的URL地址等因素符合Restful提出的这一套标准,那么你就是rf风格的编程。 通常我们通过向URL地址发送GET请求,向服务器请求一个资源。服务器给我们返回比如html,txt,excel等等这种格式的资源(输入网址返回显示的页面其实就是请求服务器返回一个html文件,再由浏览器去解析),同理我们通过向URL发送POST请求,将本地的数据发送到服务器。其实我们和服务器之间只是一个资源上的交互。 其实Http 1.1协议还支持一些其他的请求方法,比如:DELETE,PUT等等。 借用阮一峰博客一段话:如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。 其实通过这种方式,我们就可以客户端的HTTP请求,对服务器上的一些数据进行修改(更新或者删除等)而不是之前单单的通过GET和POST和服务器进行一个资源上的交互。 你也许会说比如我想删除一个资源,那我向后台传递数据的时候加个字段,后台再去判断不就好了吗?其实这样完全可以,但是这不符合Restful风格了。 具体怎么取舍,因人而异吧。以上是个人拙见,不知道对或者错,希望和大家多多讨论。
AndroidDev2022 2016-01-22
  • 打赏
  • 举报
回复
说下我的理解: 前面说的那种URL风格并不是表示那就是restful。 ResultFul推荐每个URL能操作具体的资源,而且能准确描述服务器对资源的处理动作,通常服务器对资源支持get/post/put/delete/等,用来实现资源的增删改查,但是通常用浏览器访问资源都是GET,增加都是POST,而修改和删除不能正确描述。 比如xxxxx/user/1,我既要能表示我要找id为1的user,我还要能表示我能删掉id为1的user; xxxxx/user,我既要能表示添加一个user,又要能表示修改一个user; 问题是现在的浏览器只支持post/get,它根本无法让服务器知道,我到底要查找user还是要删除User,要添加还是要修改user。 所以第三方框架为了实现这种效果而做了特定的规则去模拟实现,比如spring就用了 <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> 这么个filter来模拟实现,以支持更多的http操作(put,delete),当我需要修改一个user的时候,只需要在<form>中加入<input type="hidden" name="_method" value="PUT">,这样提交这个表单的时候spring会知道这是要修改一个user。 具体的不想打字了,这种url风格使得项目架构清晰,好处一时说不上来,但是习惯性的使用这种风格,确实很方便。 个人理解,勿喷 另外给大家贴一个网站https://jersey.java.net/增进对其了解
Ray_987 2014-12-23
  • 打赏
  • 举报
回复
引用 13 楼 bao110908 的回复:
[quote=引用 12 楼 arkwrightzhn 的回复:] RESTful目前只知道有这样一种提法,没见有强制性的要求什么样的才叫RESTful。也没见有什么框架帮你来实现RESTful(刚才搜一下,好像有框架,轻量级框架,没用过),我理解的RESTful是: 1. 使用http协议; 2. 使用GET POST PUT DELETE来区分请求操作的类别,但这不是必须的,你完全可以GET请求发来但请求的方法是删除一条数据,只是建议用这四种操作来区分; 3. 可以把RESTful理解成远程方法调用,实际上就是面向服务编程(SOAP),访问远程一个服务,那个服务是用什么实现的怎么实现的你不用考虑,只要知道GET http://xxx/method/?arg0=1&arg1=2这样就能调用method方法传两个参数,拿到返回值,它比webservice更容易理解,更直观,也更轻量级; 4. 尽量使用stateless,即无状态的请求,就是每个请求都与前后的请求无关,不保留每次请求的状态,即server端没有session的概念,但有时我们确实需要知道一组请求是来自同一个客户端的请求序列,一般用token传递的方式来实现; 去读一下腾迅的或百度的openAPI,并且下载个腾讯的openAPI客户端,读一下示例代码或照着写一个程序,应该可以更多理解一下restful,这些openAPI一般是restful的,但restful也没有硬规范,所以他们实现时也不是严格的restful
有啊,Java EE 5 就把 JAX-RS 纳入其中了,JAX-RS 是 REST 在 Java EE 中的规范 API,开源框架最常用的有 Jersey(https://jersey.java.net/)[/quote] 太疯狂了
Ray_987 2014-12-23
  • 打赏
  • 举报
回复
颜轶,是你么?你不是在广州火车站上班么,怎么又搞起IT了
strSpecial 2014-10-23
  • 打赏
  • 举报
回复
引用 6 楼 bao110908 的回复:
从哪听来的 RESTful 可以提高性能?
好像是51CTO上边的一篇博客,貌似分析说可以提高20%左右的性能。这个具体的就不知道了,是否可以提高性能也不清除
strSpecial 2014-10-23
  • 打赏
  • 举报
回复
引用 3 楼 sonhawk 的回复:
传统的URL都是XXX?XX=XXX是什么都可以猜出来,后来加密之后发送到后台,然后就出现了所谓的REST 比较流行,但是 有好有坏,用起来灵活的东西 也比较复杂,稍微不注意 就很悲催
这个除了表现在URL上还有其他明显的特征吗?原来搜索过一些相关的但是都只发现URL有一些不同
strSpecial 2014-10-23
  • 打赏
  • 举报
回复
引用 2 楼 whos2002110 的回复:
就像你帖子的这个链接 http://bbs.csdn.net/topics/390908212 最后这个应该是帖子的Id或者一个id的映射, 这样在url里的数据可以传到request里面被后台程序获取。 我就知道这么多
这个我知道一点,大多数说的REST都是从请求路径上表现出来的。不知道除了请求路径外还有没有其他明显的特征
  • 打赏
  • 举报
回复
引用 12 楼 arkwrightzhn 的回复:
RESTful目前只知道有这样一种提法,没见有强制性的要求什么样的才叫RESTful。也没见有什么框架帮你来实现RESTful(刚才搜一下,好像有框架,轻量级框架,没用过),我理解的RESTful是: 1. 使用http协议; 2. 使用GET POST PUT DELETE来区分请求操作的类别,但这不是必须的,你完全可以GET请求发来但请求的方法是删除一条数据,只是建议用这四种操作来区分; 3. 可以把RESTful理解成远程方法调用,实际上就是面向服务编程(SOAP),访问远程一个服务,那个服务是用什么实现的怎么实现的你不用考虑,只要知道GET http://xxx/method/?arg0=1&arg1=2这样就能调用method方法传两个参数,拿到返回值,它比webservice更容易理解,更直观,也更轻量级; 4. 尽量使用stateless,即无状态的请求,就是每个请求都与前后的请求无关,不保留每次请求的状态,即server端没有session的概念,但有时我们确实需要知道一组请求是来自同一个客户端的请求序列,一般用token传递的方式来实现; 去读一下腾迅的或百度的openAPI,并且下载个腾讯的openAPI客户端,读一下示例代码或照着写一个程序,应该可以更多理解一下restful,这些openAPI一般是restful的,但restful也没有硬规范,所以他们实现时也不是严格的restful
有啊,Java EE 5 就把 JAX-RS 纳入其中了,JAX-RS 是 REST 在 Java EE 中的规范 API,开源框架最常用的有 Jersey(https://jersey.java.net/
Magical茏 2014-10-23
  • 打赏
  • 举报
回复
我还一直以为是springmvc特定的 /xxx/* 配置风格呢 汗颜..........
Norris_Zhang 2014-10-23
  • 打赏
  • 举报
回复
RESTful目前只知道有这样一种提法,没见有强制性的要求什么样的才叫RESTful。也没见有什么框架帮你来实现RESTful(刚才搜一下,好像有框架,轻量级框架,没用过),我理解的RESTful是: 1. 使用http协议; 2. 使用GET POST PUT DELETE来区分请求操作的类别,但这不是必须的,你完全可以GET请求发来但请求的方法是删除一条数据,只是建议用这四种操作来区分; 3. 可以把RESTful理解成远程方法调用,实际上就是面向服务编程(SOAP),访问远程一个服务,那个服务是用什么实现的怎么实现的你不用考虑,只要知道GET http://xxx/method/?arg0=1&arg1=2这样就能调用method方法传两个参数,拿到返回值,它比webservice更容易理解,更直观,也更轻量级; 4. 尽量使用stateless,即无状态的请求,就是每个请求都与前后的请求无关,不保留每次请求的状态,即server端没有session的概念,但有时我们确实需要知道一组请求是来自同一个客户端的请求序列,一般用token传递的方式来实现; 去读一下腾迅的或百度的openAPI,并且下载个腾讯的openAPI客户端,读一下示例代码或照着写一个程序,应该可以更多理解一下restful,这些openAPI一般是restful的,但restful也没有硬规范,所以他们实现时也不是严格的restful
最勇敢的鸟 2014-10-23
  • 打赏
  • 举报
回复
RESTFUL的主要好处是可读性
  • 打赏
  • 举报
回复
从哪听来的 RESTful 可以提高性能?
Inhibitory 2014-10-21
  • 打赏
  • 举报
回复
没看到过rest能提高系统的性能。
  • 打赏
  • 举报
回复
传统的URL都是XXX?XX=XXX是什么都可以猜出来,后来加密之后发送到后台,然后就出现了所谓的REST 比较流行,但是 有好有坏,用起来灵活的东西 也比较复杂,稍微不注意 就很悲催
whos2002110 2014-10-21
  • 打赏
  • 举报
回复
就像你帖子的这个链接 http://bbs.csdn.net/topics/390908212 最后这个应该是帖子的Id或者一个id的映射, 这样在url里的数据可以传到request里面被后台程序获取。 我就知道这么多
strSpecial 2014-10-21
  • 打赏
  • 举报
回复
木有人?发错地方了?
我在肖申克 2014-10-21
  • 打赏
  • 举报
回复
比如本帖url http://bbs.csdn.net/topics/390908212 如果是非rest风格有可能是http://bbs.csdn.net/topics?tid=390908212 理解RESTful架构 RESTful API 设计指南

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧