媒介:有网友让我用通俗的语言来讲一讲RESTful , 我在那一块工程理论的不太多,有点为难了, 只能讲一讲我的理解, 欢送各人责备斧正。
计算机行业最擅长造新词了,像什么AJAX,IoC, AOP, SOA, NoSQL, 微办事,TDD,灵敏,RESTful......等等。
有良多人十分喜好在口头拽那些热门名词,显得多么深邃的样子, 其实那些热词背后代表的工具,要处理的问题没那么复杂,良多人是因为带着敬畏心被吓住了。
RESTful就是此中之一, 它不是一个新的计算机语言或者手艺, 只是一个架构风气, 准确一点讲是若何设想系统来对外供给办事。
传统网站
我在2000年摆布仍是微软粉丝,不断用ASP + COM 写Web网站, 其时的网站是单纯的HTML, 只要一点javascript效果, 那些网站根本上是自治的“独立王国”, 不会通过API接口对外供给办事。
因为在阅读器中通过javascript来异步拜候后端接口的少少, AJAX那个热词还没有呈现, 所以其时在ASP中次要处置两个工具:
图1 : 常见的网站操做
很通俗,对吧? 其实如今大部门网站仍是那么做的。
SOA
后来互联网大开展, 各个网站系统变的越来越复杂,一个自治的“帝国”经常要被划分红多个“王国”,那些王国之间若何沟通和交换变得重要起来。
一些大厂商顺势造定了喊做SOA的原则,提出了面向办事的架构系统。
和面向对象如许的手艺术语差别 , SOA中的办事其实是营业层面的工具, 是个营业活动的逻辑表达体例,粒度更粗一些。
那些办事独立于厂商,产物和详细实现手艺, 可以发布出来被此外系统挪用, 还可以被组合起来构成更粗粒度的“办事”。
固然办事是面向营业的, 但还得用详细的手艺表达出来, 毫无不测, 大佬们抉择了XML, 用XML来描述一个办事看起来来像那个样子:
图2: 办事描述片段
没有玩过Web Service 的不消完全看懂它,它描述的也是一个getBook如许的操做, 输进是一个id ,类型是字符串。
返回值也是一个字符串 (凡是是XML格局的,表达册本的详尽信息)
我想凸起的重点是那个办事(getBook)和 “图1" 中的getBook.action 在形式上的一致性:
他们都试图表达如许一个过程: 获得一本书的信息, 所以那两种体例都是面向过程的。
或者说,他们都以动词为主, getBook, addBook, deleteBook , placeOrder, registerUser, login , transfer 等等。
RESTful
其实面向过程,以动词为主的体例是最天然的体例, 码农不消怎么费脑子就能想到若何设想。
然后RESTful 那种概念就漂洋过海,从美国杀进了中国市场。
RESTful告诉各人说: 以后你们不要用动词, 用名词更好, 不要面向过程了, 要面向资本(Resource)。
资本利用一个URI来表达的, 例如 :
图3 : REST风气的资本
重视图3 中的books, orders, 那些都是名词, 那问题天然就来了: 我怎么做传统的add, delete等操做呢?
RESTful 说: 要足够操纵HTTP 供给的办法:
图4: 对资本的操做
你看增删改查都齐全了。
需要重视的是办事器端返回信息的格局由倡议挪用的客户端指定,例如HTML ,JSON, XML, 那称为资本的表述(representation)
我第一次看到那种体例的时候大为震动, 那其实是太不曲看了。
根据那种风气,你需要把办事器端的工具都 ”资本化“, 像上面的那些很随便, 还有一些例如转账,登录,忘记密码,获取短信验证码,如许常见的营业操做“资本化”起来就不那么爽了。
RESTful 架构风气还要求Stateless(无形态), 办事器端其实不会庇护/保留会话(session)信息, 那些会话信息应该有客户端来庇护,每次恳求时也需要一并发送到办事器端。
办事器端甩掉了会话形态那个大负担,一会儿就轻松多了,可扩展性会有极大提拔, 例如我能够把一个办事摆设到由100个办事器构成的集群中,每个办事器都能够处置用户的恳求。
假设用户第一个恳求发到了办事器#87 ,然后那个办事器坏了, 第二次恳求能够发送到剩下99个办事器中的任何一台, 归正会话信息包罗在每个恳求中, 肆意一台办事器都能处置。
我认为RESTful的无形态是一种抱负的境域,现实中不大随便做到, 客户端到底若何保留session信息呢,是每次恳求都把用户名/密码 发到办事器端仍是通过第三方认证的体例实现?
假设想实现一个购物车的利用, 办事器不保留session的话该怎么做? 我那块儿理论不多,请高手不惜赐教。
固然有难度, 那为什么如今良多人对REST趋附者众呢?
我小我认为各人是看中了他的轻量级的风气, 那就是用就能够搞定一切。
传统的SOA倾向于用WSDL来描述办事, 用SOAP协议来拜候办事,此外还有办事注册,发现, 组合,总线,平安等一系列问题, 凡是还得上Websphere ,WebLogic 如许重量级的办事器。
码农不只要问了: 我就想挪用一个简单的接口, 搞那么费事干嘛?
REST一来, 写个Web办事几乎是太简单了, 用一个最“初级”的java servlet, 分分钟搞定, 不外有时候各人也没有严厉的遵照REST的要求, 没有把一切工具都“资本化”,因为那样太不随便了。
我看到的良多项目号称是REST风气, 但其实就是通过的羊头,卖着面向过程的狗肉”。
最初,选举各人往读一下RESTful架构风气的提出者Roy Fielding 博士的论文, 2000年颁发的《架构风气与基于收集的软件架构设想》, 那是RESTful开山之做, 也是Web开展史上十分重要的一篇文献。