rest和rest ful
这篇文章致力于REST,一种塑造Web服务的架构风格,以及IT历史上最容易被误解的概念。 这篇文章针对的是正在设计Web服务api的人,他们没有完全了解REST的实际含义。 我想给你个主意。 这篇文章也发给了那些想知道REST意味着什么的人,而实际上您还没有任何线索。 是的,我过去遇到过这样的人-很多人。 它没有涉及Richardson成熟度模型的细节,也不会使您成为REST专家。 网路上有许多相关的指南:幻灯片,youtube视频,博客文章,书籍等等。 而不是进入细节,我将在本文结尾处链接一些良好的资源。
因此,让我们开始
REST的含义
代表性国家转移。 这句话不仅是REST所代表的意思,还是对REST实际含义的最细微的描述。 没听懂吗? 再次阅读:代表性状态转移。 它不是一个标准,而是一种通过其表示来描述转移某种状态的行为的方式。
让我们考虑一下:
马库斯是一位农民。 他的牧场有4头猪,12头鸡和3头牛。 我现在是客户端时,他现在正在模拟REST api。 如果我想使用REST请求他的农场的当前状态,我只是问他:“状态?”
马库斯回答:“ 4头猪,12只鸡,3头牛”。 这是代表性状态转移的最简单示例。 马库斯(Marcus)通过代理将农场的状况移交给了我。 农场的表达很简单:“ 4头猪,12只鸡,3头牛”。
因此,让我们进入一个新的水平。 我如何告诉马库斯以REST方式向他的农场增加2头奶牛?
也许告诉他:“马库斯,请在您的农场增加2头母牛。”
您认为这是REST吗? 我们在这里通过状态表示来转移状态吗? 没有! 这被称为远程过程。 向场中添加2头母牛的过程。 马库斯遗憾地回答:“ 400,错误请求。 你什么意思?” 因此,让我们再试一次。 我们将如何以REST方式做到这一点? 代表又是什么? 那是“ 4头猪,12只鸡,3头牛”。 好。 因此,让我们再次尝试转移表示形式... 我:“马库斯,……四头猪,十二只鸡, 请给5头牛!”。 马库斯:“好!”。 我:“马库斯,……您现在的状态是什么?”。 马库斯:“四头猪,十二只鸡,五头牛”。 我:“啊,太好了!” 看到? 其实并不难,它是REST。
为什么RPC是A **的痛处
那么,从逻辑的角度来看,为什么您会偏爱REST而不是远程过程调用(= RPC)? 因为它使代表成为我们的唯一合同,大大降低了我们沟通的复杂性。 我们不必讨论我们需要什么样的程序(添加一头牛?,添加某种类型的动物?将鸡的数量加倍?移除所有的猪?)。 我们需要讨论的只是表示形式,并使用该表示形式来实现我们想要的任何东西。 很简单,不是吗? 不必要的RPC复杂性根本没有帮助。 这反而增加了误解的风险,这是我们不希望的。 我们不希望我们的沟通失败,因为我和马库斯对程序的理解不同。
但这只是RPC正在创建的许多问题之一。 如果要使用RPC,则需要设计某种结构以将过程嵌入其中。 此结构需要一个用于存储参数,错误代码,返回值等的位置。 我见过很多真正做到这一点的开发商和公司。 他们设计了自己的RPC结构,在实现客户端和客户端-服务器交互时出现了巨大的问题。 你为什么要这样做? 为什么要发明自己的RPC结构? 您认为这有帮助吗? 如果我想制作一个使用多种专有RPC格式的许多Web服务的应用程序怎么办? 我将不得不开发这样的东西:
啊…
如果您确实需要RPC,请至少选择SOAP之类的标准。 不要编自己的东西!
但是SOAP仍然很糟糕
但是,即使RPC的标准也确实很痛苦。 好吧,我必须承认,使用ACID Transactions和完整的标准化服务描述语言,在某些情况下SOAP并不是很糟糕。 但是,SOAP产生的开销巨大且是巨大的性能杀手。 HTTP是轻量级协议。 它的标题包括您需要的任何内容。 您想要放入体内的唯一东西是一种表示形式,或者甚至没有。
会话是邪恶的
您不需要会话! 有人可能会说:“但是我想保存顾客的购物车,所以我需要那次会议!” –不,很不对! 您无需会话即可做任何您想做的事情。 您可以将购物车的信息封装在URI中,甚至可以为该购物车创建另一个资源,例如“ / carts / 5235”。
在两个请求之间,您希望能够关闭服务器,卸载其平台和操作系统,拆卸服务器硬件,重新组装服务器,重新安装其操作系统,平台和应用程序以及还原备份,而客户端甚至不会注意到。
不要强迫浏览器(例如智能手机)以外的客户端存储cookie。 这是不必要的复杂性,我向您保证,这会引起问题。 您甚至应该考虑从Web应用程序中删除有状态。
不要重塑超媒体
既然超媒体现在变得非常流行,我求你:不要发明自己的风格。
我们已经有很多。 有
- 通过Atom Link规范的超媒体,例如spring-hateoas和spring-data-rest中的 。
- JSON-HAL
- JSON-LD
- …
我们正在慢慢地再次达到这一点:
更多资源
在本文中,我仅涉及REST的优点。
这里有一些很好的资源,可以使您加深了解。
- 关于理查森成熟度模型的福勒斯文章
- 超媒体的绝佳幻灯片
- David Zuelke关于RESTful Web服务的演讲
- REST简介(GoogleDevelopers的短片)
- 莱兹·哈兹伍德(Stormpath)的谈话
- RESTful WebService的食谱
- 关于REST的伟大的德国书
翻译自: https://www.javacodegeeks.com/2013/08/why-rest-is-so-important.html
rest和rest ful