为了更好的理解REST,我们先来看看REST的诞生是为了解决什么问题?
我们的互联网在很久以前,就像我们的初学者写的应用一样,就像一座座孤岛,你只关心和用户交互,但是两个应用之间,就像孤岛一样,没人去考虑不同的应用之间的交互问题。
之后随着互联网的不断发展,我举一个例子,一个金融机构可能有多个应用,但是每一个应用都会涉及到获取借款者的账号信息,而且每个应用中关于账号信息的实现几乎是一样的逻辑,在这种情况下,我们就需要抽取出一个公共的获取账号信息的服务,然后不同应用都来这里获取账号信息,如果你注意到了,此时我们的应用不再应该是孤岛了,那么我很高兴,你抓住了重点,我们在设计应用架构的时候得考虑,怎么向其他应用提供服务,(即不同应用之间的交流问题),这种面向服务的架构,也就是大名鼎鼎的SOA(面向服务架构)。
SOA的核心理念就是,应用程序可以并且应该被设计成一种依赖于一组公共的核心服务,而不是很多应用都需要重新实现一个相同的服务!
为了满足我们这种SOA的架构,在很久以前有一个技术叫RMI,或者比较近的Hessian,Burlap,Spring的HttpInvoker,这些技术(远程调用技术)都是为了解决不同应用之间的通信问题,来实现SOA架构,但是你必须清楚我到这里从来没有说过web,这个名字,但是你能想到,web就能很好的解决这个远程调用(RPC)的话,那么我想你已经跟着我的思维了,在这里我没有详细的讲这些远程调用的技术,以为他们真的很繁琐(Spring进行了封装简单了很多,你可以去了解一下) ,接着刚才,既然web可以很好的提供远程调用的特性,Java专门为此产生了一个技术叫做JAX-WX(Java Api For Xml Web Service),你也不要害怕,Spring针对这个技术也进行了封装,你发布一个基于Spring的JAX-WS是比较容易的。
到这里你看到了很多为了实现SOA架构提出的技术,每一种都可以实现SOA服务,Spring中也为我们提供了每一种的封装,我们实现起来会很方便,你的应用甚至都不知道,他被Spring变成了远程调用,很神奇对吧,最后我要再告诉你一种实现SOA架构的方式(其实你也应该注意到了,SOA就是一种分布式架构),
不在基于远程调用(RPC),我们上面所说的技术都是基于远程调用来实现SOA。
我所说的另一种实现SOA的方式就是REST!!
我们不再基于远程调用这种模式,而是使用restful风格,把我们的应用暴露为RESTful资源,这两种实现方式的最大区别就在于,RPC一直在关注行为(也就是我们的应用可以被别人调用,拿到他想要的信息),而RESTful风格更关注于资源(你不需要调用我,我返回给你想要的信息就行了),对,没错,我想这种RESTful风格,你会很喜欢对吧,因为它直接返回了我们最需要的也就是资源(比如某个用户的信息)。
REST Representational State Trance的英文含义就是表述性 状态 转移,大白话就是
把你想要的信息以你最想要的方式返回给你
对于这种REST风格,Spring也提供了实现,就是基于SpringMvc的REST风格,我想你肯定想起你用过的那个REST了,/user/{id},所以不要把REST理解为一个基于url的web服务,他所解决的问题,根本不是你之前所想的 ,他是为了实现SOA架构,别的应用直接可以通过这个url拿到他想要的数据,这样可以实现分布式架构,不同应用之间的通信会非常的方便,说了这么多,只是想让你知道REST到底是用来干什么的,他的诞生是为了什么问题,让你有一个比较深刻点的认识!!!!
最后怎么实现一个良好的REST如果大家想知道,留言我会后期分享给大家,到此结束,推荐你再去看一下我的标题 嘿嘿。