一 前言

刚看了《RESTful Web APIs中文版》。试读了前两章。

每本书的第一章都是抽象得不得了,是整本书的总结;开篇说基础有点简单,从教你怎么向地址栏输入地址訪问网页開始(某人女友还真不会这个),第二章是个简单样例。一度睡着。该书由三个关键词“RESTful
“ ”Web “ ”APIs“,貌似废话......可是要把这三个词加起来才是该书的核心。说REST太泛了。说"RESTful uri" 够精确,我相信后面章节也是环绕怎么设计"RESTful
uri"来说的。




我也来说REST

REST,representational state transfer , 字面理解:表述性状态转移。一时间看不懂?我開始也不懂,正常人怎么会看懂缺少主语宾语的“句子”的意思呢。补全:资源的状态通过浏览器和server之间的交互表述性的数据来改变。

好像把它翻译了一遍,算了无论了。举样例吧,我们server有一本书,它的状态是 id = 1 ,name = "book1"
 ; 好了,如今 我们HTTP get 它一下。server给我们返回 id = 1 ,name = "book1" 这个状态,这时候我们浏览器也变成状态1了。

如今我要改它的名字为”book2“, 于是我们来HTTP post 它一下,这post 是带參数的(id=1,name="book2")用<form>;我们浏览器这时候书是状态2,我们post 到server就是把状态2
“转移”给server。(server怎么处理先无论)结果server变成了状态2。这不就是所谓的状态转移咯。

假设说让你用一句话表达你懂REST , 你会怎么说? 我会说:restful uri 没有动词。 可能大家也知道获取一本书的restful uri 是 “book/1” 而不是“getBook/1”。

由于Rest
把server的东西都叫做资源,一本书是一个资源,实体。那你就会问了。那动作哪去了? 在HTTP 那里。HTTP 有get 方法,这个就是动词。我会告诉你,HTTP还有delete 方法。没了解过的傻眼了吧。

而这本书由重点讲 HTTP 8方法中 的5个。各自是 get head post put  delete   。还有,restful uri 没有版本号之说,老实说难道我的书架上的一本书《黑客与画家》还有新和旧之分?



三 谈谈RESTful

符合REST的叫做RESTful。

RESTful
是一种设计风格,而不是标准。标准一定要遵守。风格不遵守也不会错,仅仅是变样了。style , 我玩《鬼泣》的时候就知道什么叫style , 还是问鸟叔比較好?  自己斟酌。

我做过几个web项目,都是用一些功能粘合起来的,uri 也随便来设计,删除一条数据 就用 “deleteBook?id=1”,事实上这个是get请求。不知道这是叫什么。反正肯定不是RESTful。人们总喜欢用Rest
跟 SOAP和XML-RPC 比。说Rest 比后两者好得多了去,后两者不是非常了解啦。

有一点值得我们注意的是,我们平时在开发的时候,用的方式可能就是某种模式/风格。我们学习这样的模式/风格会让我们对开发有更好地理解。而这些模式风格哪里来的呢?我想引用《J2EE核心模式》里面的话,“模式是总结出来的”。也正解释了为什么我们不知道这样的模式但平时却在用了,由于这些模式风格也是大师做多了经验多了总结出来的。

有一种设计风格叫RESTful的更多相关文章

  1. Javascript 5种设计风格

    1.过程式的程序设计 <script> /*Start and Stop animations using functions.*/ function startAnimation() { ...

  2. RESTFUL 设计风格

    RESTFUL  规范总结: Rest是web服务的一种架构风格;使用HTTP,URI,XML,JSON,HTML等广泛流行的标准和协议;轻量级,跨平台,跨语言的架构设计;它是一种设计风格,不是一种标 ...

  3. REST设计风格:你写的 RESTful API 到第几层了?

    理解REST 在理解其真正概念前,我们先来明确: REST它的核心思想是面向资源的抽象(相对于RPC就是面向过程抽象),它是一种设计风格的指导,而非具有较强约束的协议. REST源于Roy Thoma ...

  4. 朱晔的互联网架构实践心得S2E5:浅谈四种API设计风格(RPC、REST、GraphQL、服务端驱动)

    Web API设计其实是一个挺重要的设计话题,许多公司都会有公司层面的Web API设计规范,几乎所有的项目在详细设计阶段都会进行API设计,项目开发后都会有一份API文档供测试和联调.本文尝试根据自 ...

  5. RESTful框架调研

    背景 当前的开放服务平台发展趋势,是服务使用者变得多种多样,其中既有各种前端设备(台式机.手机等),又有各种后端服务器,因此必须有一个统一的机制,方便各种服务使用者和开放服务平台进行通信.为了更好的实 ...

  6. PHP实现Restful风格的API

    Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www1.qixoo.com/user/view/id/1表示获取id为1的用户信息,如果使用Restful风格,可以 ...

  7. 无状态、REST、RESTful 和 Web Services【整理】

    在理解 OpenStack 的过程中,常常遇到 REST 这个概念,现从各处搜罗如下: 对 Web Service 的理解: Web 服务有点像对计算机友好的网页,基于让程序可以跨网络交换信息的标准和 ...

  8. Restlet+Fastjson 高速构建轻量级 Java RESTful Webservice

    自己入门Java时做过一个小型RESTful Web Service的项目,这里总结一下. 服务的数据交换格式主要採用JSON,服务为REST风格.连接採用Http协议,数据库使用MySQL,OR M ...

  9. Spring Boot实战:Restful API的构建

    上一篇文章讲解了通过Spring boot与JdbcTemplate.JPA和MyBatis的集成,实现对数据库的访问.今天主要给大家分享一下如何通过Spring boot向前端返回数据. 在现在的开 ...

随机推荐

  1. Strurts(四)——从Struts原型模拟看大道至简(含实例下载)

    首先,需要再次声明的是:struts是web层的框架.在介绍struts的第一篇文章就已经有了论述,如果不使用struts框架同样可以进行开发,但是需要在Servlet里面写大量的“if……else… ...

  2. Impala 3、Impala、Hbase整合

    Impala可以通过Hive外部表方式和HBase进行整合,步骤如下: • 步骤1:创建hbase 表,向表中添加数据 create 'test_info', 'info' put 'test_inf ...

  3. ios7 UITableView底线右移

    在ios7上UITableView底线右移了,我们可以通过添加代码来让它铺满整个屏幕的宽,在使用前要加上判断是否有这个方法 if ([_tableView respondsToSelector:@se ...

  4. 并行任务task

    http://msdn.microsoft.com/zh-cn/library/dd537609(v=vs.110).aspx http://www.cnblogs.com/yangecnu/p/So ...

  5. Sybase配置中文语言支持及字符集

    在windows平台上,Sybase ASE15.0.7安装完成后默认语言是:英语(us_english),默认字符集为:cp850.cp850是一个西欧字符集,虽然也能使用cp850字符集保存汉字, ...

  6. Sublime Text 添加到右键菜单 带菜单图标

    1.打开 regedit 2.找到节点 HKEY_CLASSSES_ROOT -> * -> Shell 3.右键选择新建“ 项 ” 这个项的名字将作为右键菜单的菜单名称,我用的“ Sub ...

  7. 第002篇 深入体验C#项目开发(一)

    网上摘来的简介:        <深入体验C#项目开发>通过10个综合实例的实现过程,详细讲解了C#在实践项目中的综合运用过程.这些项目从作者的学生时代写起,到项目经理结束,一直贯穿于作者 ...

  8. CSS3实现图片鼠标悬浮放大效果

    .excerpt .focus a img{ -webkit-transition: all ease .3s; transition: all ease .3s }.excerpt .focus a ...

  9. list集合接口

    import java.util.ArrayList; import java.util.List; class Phone { private String brand; private doubl ...

  10. jQuery EasyUI API 中文文档 - 面板(Panel)

    Panel 面板   用$.fn.panel.defaults重写defaults. 用法示例 创建Panel 1. 经由标记创建Panel 从标记创建Panel更容易.把 'easyui-panel ...