为什么REST如此重要

这篇文章致力于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的伟大的德国书

参考: 为什么我们的JCG合作伙伴 Gregor Riegler在“ 成为更好的开发者”博客中对REST如此重要 。

翻译自: https://www.javacodegeeks.com/2013/08/why-rest-is-so-important.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你真的懂js获取可视区宽高吗

可能你会觉得获取可视区宽高不是很简单吗 原生js获取高度不就是就window.innerHeight一句话的事,可是真的这么简单吗 来看个测试页面,如果页面带有横向纵向的滚动条,我们打印出各个高度进行查看对比 顺便你也可以看看document.body和document.documentEl…

詹金斯的Maven报告

代码质量是一个敏感的话题。 它会影响您的维护成本以及客户满意度。 更不用说您的开发人员使用代码的动力。 谁想要修复难看的代码,对吗? 讨论代码质量总是需要事实和数字! 因此,这是一个简短的教程,介绍如何创建一些…

python实现矩阵叉乘_矩阵乘法的纯Python实现 | 离开Python库!!

点击关注我哦一篇文章带你了解矩阵乘法的纯Python实现在《这篇文章》中,我们有简单提到“矩阵乘法”的相关知识,如果你不记得了,可以复习一下这张图片。想起来了没?本篇文章将深入探讨在没有机器学习库的情况下如何从零实现矩阵乘…

Github Actions:再次改变软件开发

本文转自 FEPulse 公众号(微信搜索 FEPulse,精选国内外最新前端资讯,为你把握前端脉搏)。 Github Actions 是 GitHub Universe 大会上发布的,被 Github 主管 Sam Lambert 称为“再次改变软件开发”的一款重磅功能&…

为别人软件加入广告或者密码(特别思路)

洪雨的的这款软件比较奇特,是忽然想到一个思路,然后实现了一下。 exe文件都有一个很有趣的地方,只要内部完整,就可以运行。比如一个exe文件,我们运行的时候,电脑知道他是exe所以可以直接运行。假如洪雨将它…

Django 错误跳转页面

原网站:https://blog.csdn.net/goupper1991/article/details/50736826 django404,500错误自定义页面: 将 改为 1.修改settings文件DEBUG FalseALLOWED_HOSTS [127.0.0.1, localhost]或者ALLOWED_HOSTS [*]2.配置urls文件from django.conf.…

ElasticSearch-Hadoop:从Hadoop到ElasticSearch的产品视图计数索引和客户顶部搜索查询...

这篇文章涵盖了如何使用ElasticSearch-Hadoop从Hadoop系统读取数据并在ElasticSearch中对其进行索引。 它涵盖的功能是在最近n天中为每个客户的产品浏览量计数和热门搜索查询编制索引。 分析的数据可以进一步在网站上使用,以显示最近浏览过的客户,产品浏…

伸缩轨道_深度解析——伸缩喷漆房为什么这么受欢迎!

伸缩式喷漆房是一种环保喷漆设备,它可以在使用时,自动展开形成封闭或半封闭的环保喷漆房,不使用时收缩合拢到一处的特殊环保喷漆房设备,由于伸缩式喷漆房外观大方、简单实用且投资费用低,它在现代涂装应用中越发广泛。…

snippet,让你编码效率翻倍

为什么谈到Snippet 今天下午在用vscode做小程序的时候,发现很不方便,因为商店里提供的代码片段极为有限,而且平时几乎每天都需要用到代码片段,所以就在思考他们是怎么做到给别人提供代码的,我可以自定义代码片段吗。然…

day12-HTML基础之DOM操作

DOM(Document Object Model 文档对象模型) 一个web页面的展示,是由html标签组合成的一个页面,dom对象实际就是将html标签转换成了一个文档对象。可以通过dom对象中js提供的方法,找到html的各个标签。通过找到标签就可以…

小程序源码 租房管理系统_如何通过租房小程序开发快速引流

租房市场在整个房产市场占据了极大一部分市场份额,而随着租售同权政策的提出、房价的不断提升,租房市场份额将进一步扩大。合肥小程序开发智速新媒体公司传统的租房方式不管是出租方还是租房客户,彼此之间的消息不对等、沟通困难等因素导致房…

REST 101开发人员专用

本地代码执行 诸如C之类的高级语言中的函数将被汇编为Assembly中的过程 。 它们增加了一个间接级别,使我们不必考虑内存地址。 诸如Java之类的面向对象语言中的方法和多态性增加了另一种间接性 ,使我们不必考虑一组相似功能的特定变体。 尽管有这些间…

一个基于Bmob的OPPO锁屏壁纸小程序,写过之后发现...好像没什么卵用...一脸懵逼

小程序之前写的,也就前段时间,毛毛糙糙的写了第一版... 因为使用OPPO手机,所以有个锁屏杂志的东西,里面的图片每天都是由OPPO官方的人进行精选然后推送给用户的,图片菲菲菲菲菲常漂亮,看到网上很多人提取不…

SQLAlchemy 操作数据库

SQLAlchemy 操作数据库 SQLAlchemy为Python提供了不同数据库的统一接口,采用ORM的方式操作数据库,简洁优雅 一、安装 直接通过pip安装即可 pip install sqlalchemy 二、连接数据库 这里用小巧的sqlite来做测试 from sqlalchemy import create_engine# 创…

贝塞尔曲线理解与应用

贝塞尔曲线并非是由贝塞尔发明的,但是是因为他把这个东西应用到当时的汽车领域而闻名的,所以取名为贝塞尔曲线。 在我看来,用简单的话来理解一下贝塞尔曲线,他是通过少量几个点,使用一套公式,生成一条平滑曲…

云服务器布置_【阿里云ECS】(一)云服务器上安装RStudio-server

【阿里云ECS】(一)云服务器上安装RStudio-server最近注册了阿里云个人版,打算研究研究shiny部署问题。进了阿里云ECS因为是Ubuntu16.04的对于安装R和RStudio还是要学习实践一下的。第一步,安装R语言。我们使用apt的方式进行安装,步…

H5前期知识点总结 9月12日

知识点补充: 属性继承例子,color、font(font-size/style/family/weight) 1、浏览器的默认字体大小是16px,谷歌浏览器的最小字体是10px,其他浏览器的最小字体是12px。 2、通配符选择器 “*”,即选中body里所有的标签。 …

Spring MVC:Ajax和JQuery

今天,我想演示如何将AJAX集成到Spring MVC应用程序中。 我将在客户端使用JQuery来发送请求和接收响应。 本教程将基于我以前关于Spring MVC和REST服务的教程之一。 在本文中,您将了解如何在异步请求的帮助下使Web应用程序更具交互性。 准备工作 我需要通…

手把手带你写一个JavaScript类型判断小工具

业务写了很多,依然不是前端大神,我相信这是很多‘入坑’前端开发同学的迷茫之处,个人觉得前端职业发展是有路径可寻的,前期写业务是一个积累过程,后期提炼总结,比如编程思想,父子类的原型继承&a…

yolov3之pytorch源码解析_springmvc源码架构解析之view

说在前面前期回顾sharding-jdbc源码解析 更新完毕spring源码解析 更新完毕spring-mvc源码解析 更新完毕spring-tx源码解析 更新完毕spring-boot源码解析 更新完毕rocketmq源码解析 更新完毕dubbbo源码解析 更新完毕netty源码解析 更新完毕spring源码架构更新完毕springmvc源码架…