一 前言

刚看了《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. ios的一些开源资源

    1. http://www.open-open.com/lib/view/open1428646127375.html vim插件:https://github.com/Valloric/YouCom ...

  2. 【设计模式:单例模式】使用单例模式载入properties文件

    先准备測试程序: package org.jediael.util; import static org.junit.Assert.*; import org.junit.Test; public c ...

  3. Zjnu Stadium(hdu3047带权并查集)

    题意:一个300列的无限行的循环场地,a b d代表a,b顺时针相距d的距离,现在给你一些距离,判断是否有冲突,如果有冲突计算冲突的次数 思路:带权并查集 a,b的距离等于b到根节点的距离 - a到根 ...

  4. hdu1106 字符串水题strtok()&&strchr()&&sscanf()+atoi()使用

    字符串的题目 用库函数往往能大大简化代码量 以hdu1106为例 函数介绍 strtok() 原型: char *strtok(char s[], const char *delim); 功能: 分解 ...

  5. 3GP文件格式研究

    需要看的文档 http://www.3gpp.org/ftp/Specs/archive/26_series/ 3GPP TS 26.233 3GPP TS 26.243 3GPP TS 26.244 ...

  6. mvc 微软票据验证

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  7. iOS 获取系统目录

    //获取根目录 NSString *homePath = NSHomeDirectory(); NSLog(@"Home目录:%@",homePath); //获取Document ...

  8. Hibernate学习——映射关系

    学习记录 O(∩_∩)O . 如果你恰巧路过,希望你能停下脚步瞧一瞧,不足之处望指出,感激不尽~ 使用工具: 1.eclipse   2.hibernate压缩包(hibernate_4.3.11)  ...

  9. 【搜索引擎Jediael开发4】V0.01完整代码

    截止目前,已完成如下功能: 1.指定某个地址,使用HttpClient下载该网页至本地文件 2.使用HtmlParser解释第1步下载的网页,抽取其中包含的链接信息 3.下载第2步的所有链接指向的网页 ...

  10. jdbc之二:DAO模式

    详细代码请参见 https://code.csdn.net/jediael_lu/daopattern 1.创建Dao接口. package com.ljh.jasonnews.server.dao; ...