关于REST的一些想法
REST and RESTful
最近入手了REST,谈谈自己的体会。
所谓REST, 我觉得是一种网址的设计风格。过去我们用Struts 或Spring MVC 时从来没有考虑过URL的设计风格。所有的URL大体都是 XXX/?name=Mike&age=12 这种样式的,并且时间长了都觉得这是理所当然的。要不然你说网址要设计成什么样?
好吧,如果我没记错的话,在Java Servlet 中有 doGet ,doPost, doDelete, doPut 等方法。可是我自己从来没用过除了doGet之外的任何方法。(doPost我让他调用doGet方法) 那么其实doDelete 等方法就浪费了。那么当初为什么要有这种看似多余的API呢?
其实应该追溯到设计网站协议的时候。估计那时候的专家想的很好:我应该有4个方法,分别表示增、删、改、查。可是由于网站实际的发展制约了API的运用。一个最简单的form 可是他只能有GET 和POST 两种方法联系后台,那么我怎么可能用到doDelete和doPut方法呢?
后来随着技术的发展,我想可能是Ajax方法吧,我们可以调用到doDelete和doPut方法了。(或者说这个时候人们才发现,WC,原来以前的大牛给了我们足够的扩展空间,只是我们没有发现而已。)于是就有人提出了REST风格的API设计。中心思想是,网络中任何一种Data都是Resource。(好吧,其实我也不知怎么解释^^)应该就是任何一个你想从网络中获取的东西都是资源,这些资源本身包含了对自身的CRUD的API---通过doPost,doGet,doDelete,doPut方法。我们想删除信息不是通过类似于XXXX/?action=delete&id=1
之类的URL来实现了。 我们是用 delete 方式调用 /post/id/1 的URL来实现的;我们想查询不是通过XXXX/?action=query&id=1来实现的,而是通过 get 方式调用 /post/id/1 的URL来实现的。要修改,通过 put方式调用 /post/id/1 就可以了。要添加了,通过 post 方式调用 /post 就行了啊。可以发现REST最大调用了网络API的潜能。
更近一步,可以这么看,REST实际上包含了封装的概念。在Java 中我们有封装的概念,一个类可以把对自己的一些操作封装在自己里面,这样就可以一个类专注于同一类事情。
而REST我觉得也是一样的。 我们对网络上数据的操作无非就是CRUD,那么我们完全可以把这四个操作封装在资源自己里面。调用了相应的API就是执行了某些操作。
REST说他先进么,我觉得没有。技术上是个人都能够实现。但是我很佩服提出这个REST的人。当我们自己满足于现状,满足于能够实现就好的时候,他能思考,能够有效的利用现有的条件,技术,不断进取。我想这也是我们这些程序员应该做的吧。
关于REST的一些想法的更多相关文章
- 细谈Slick(5)- 学习体会和将来实际应用的一些想法
通过一段时间的学习和了解以及前面几篇关于Slick的讨论后对Slick这个函数式数据库编程工具有了些具体的了解.回顾我学习Slick的目的,产生了许多想法,觉着应该从实际的工作应用角度把我对Slick ...
- 关于纠正 C/C++ 之前在函输内改变 变量的一个错误想法。
再这之前,我曾认为,一个变量只要定义为全局变量后,即使把它以传参的方式传进去一个函数内,也能改变它的值 事实证明,这一想法是错的. 下面我用代码说明,具体注释将写在里面 #include<std ...
- 制作QQ空间的一些想法
新的项目开始了,这一次是做一个网站类似于QQ空间那样的,基本功能比如说写日志,说说之类的都要有(说说是要有楼中楼嵌套的,应该能够上传图片),还要可以修改个人信息.登录注册之类的更不用说了,还要有一定的 ...
- 关于小组所要做的APP的想法
关于小组所要做的app,我们敲定下来是做关于在线做题的app,但是,纯粹的做题目的app我认为并没有什么大的吸引力,尤其是拿手机做题.所以,我们考虑准备在以下几个方面做功夫以增加吸引力.第一,我们的题 ...
- 大三CS狗一点想法
本文非技术文 十点半游戏的代码大概完成了1/3,想到今晚提早验收完汇编实验,还是副院长亲自验的,似乎很看好我的样子,然后问我的方向,导师和参加的项目.聊了几句后结束了对话,不禁又引发了我的一些思考. ...
- 系统架构:Web应用架构的新趋势---前端和后端分离的一点想法
最近研究servlet,看书时候书里讲到了c/s架构到b/s架构的演变,讲servlet的书都很老了,现在的b/s架构已经不是几年前的b/s架构,其实b/s架构就是web应用开发,对于这样的架构我们现 ...
- 关于移动开发的一些想法和认识--Android和iOS
微信公众账号很久没更新了,发一点自己最近的想法和内容. 之前和朋友做了一个项目,现在在跟一些风投,大公司里面的几家在谈合作和投资的事宜,从这个过程中也了解到了一些信息. 关于移动平台的应用开发与游戏开 ...
- js中的原型、继承的一些想法
最近看到一个别人写的js类库,突然对js中的原型及继承产生了一些想法,之前也看过其中的一些内容,但是总不是很清晰,这几天利用空闲时间,对这块理解了一下,感觉还是有不通之处,思路上没那么条理,仅作为分享 ...
- 使用git的分支功能实现定制功能摘取与组合的想法
前言,这个想法应该是git比较通用的做法,只是我还没用过,所以把自己的想法记录在这里,督促自己以后按这个方式执行. 我们公司现在面临一个问题, 就是客户的定制需求很多,很杂,其中坑爹需求很多. 我还没 ...
- 《Invert》开发日志03:一些想法
本来标题想写“详细设计”,但是由于独立游戏开发有很强的探索性,最终项目一定是经过原型调整迭代而来的,所以在实际效果出来之前把设计做得太细并没有太大意义,现在只能先陈列目前的一些想法,不能定义“它是什么 ...
随机推荐
- 安装Redis 非结构化数据库
1.官网下载安装包 1) 首先在Redis官网下载安装包: http://redis.io/download(redis-4.0.9.tar.gz) 2.在/usr/local/创建一个redi ...
- C# WinForm退出方法
1.this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出: 2.Application.Exit(); 强制所有消息中 ...
- 【BZOJ1095】[ZJOI2007]Hide 捉迷藏 动态树分治+堆
[BZOJ1095][ZJOI2007]Hide 捉迷藏 Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉 ...
- python知识点导图(搜集)
第一章 基本环境 第二章 内置类型 第三章 表达式 第四章 函数 第五章 迭代器 第六章 模块 第七章 类 第八章 异常 第九章 装饰器 第十章 描述符 第十一章 元类 第十二章 标准库 Re模块 附 ...
- ElasticSearch架构思考(转)
一个ElasticSearch集群需要多少个节点很难用一种明确的方式回答,但是,我们可以将问题细化成一下几个,以便帮助我们更好的了解,如何去设计ElasticSearch节点的数目: 打算处理多少数据 ...
- 九度OJ 1163:素数 (素数)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8496 解决:2887 题目描述: 输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数 ...
- php调用短网址接口
<?php $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,"http://dwz.cn/create.php"); curl_se ...
- TCP/IP协议之ARP寻址
ARP协议: 前面讲了网络层的寻址是通过IP地址来做的.其实一个数据包寻址包含两个部分:1 IP寻址.2 ARP寻址. ARP寻址是用在数据链路层上的.我们上网的电脑都有网卡.那么在数据链路层的进行传 ...
- 20170325 ABAP调用webservice
转自:http://www.cnblogs.com/SolisOculus/archive/2013/04/01/2993198.html 在ABAP中调用Webservice 1.创建Pro ...
- JavaMail发送和接收邮件
一.JavaMail概述: JavaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类.但它并没有包含在JDK中,而是作为JavaEE的一部分. 厂商所提供 ...