一 前言
刚看了《RESTful Web APIs中文版》,试读了前两章。每本书的第一章都是抽象得不得了,是整本书的总结;开篇说基础有点简单,从教你怎么向地址栏输入地址访问网页开始(某人女友还真不会这个),第二章是个简单例子,一度睡着。该书由三个关键词“RESTful
“ ”Web “ ”APIs“,貌似废话......但是要把这三个词加起来才是该书的核心。说REST太泛了,说"RESTful uri" 够精确,我相信后面章节也是围绕怎么设计"RESTful
uri"来说的。
二
我也来说REST
REST,representational state transfer , 字面理解:表述性状态转移。一时间看不懂?我开始也不懂,正常人怎么会看懂缺少主语宾语的“句子”的意思呢,补全:资源的状态通过浏览器和服务器之间的交互表述性的数据来改变。好像把它翻译了一遍,算了不管了。举例子吧,我们服务器有一本书,它的状态是 id = 1 ,name = "book1"
; 好了,现在 我们HTTP get 它一下,服务器给我们返回 id = 1 ,name = "book1" 这个状态,这时候我们浏览器也变成状态1了。现在我要改它的名字为”book2“, 于是我们来HTTP post 它一下,这post 是带参数的(id=1,name="book2")用<form>;我们浏览器这时候书是状态2,我们post 到服务器就是把状态2
“转移”给服务器;(服务器怎么处理先不管)结果服务器变成了状态2。这不就是所谓的状态转移咯。
如果说让你用一句话表达你懂REST , 你会怎么说? 我会说:restful uri 没有动词。 可能大家也知道获取一本书的restful uri 是 “book/1” 而不是“getBook/1”。因为Rest
把服务器的东西都叫做资源,一本书是一个资源,实体。那你就会问了,那动作哪去了? 在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,布布扣,bubuko.com