rest和rest ful_为什么REST如此重要

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的伟大的德国书

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

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

rest和rest ful

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

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

相关文章

流利的接口不利于维护

流利的接口 (最初由Martin Fowler 创造)是一种非常方便的与OOP中的对象进行通信的方式。 它使他们的外墙更易于使用和理解。 但是,它破坏了它们的内部设计,使它们更难以维护。 Marco Pivetta在他的博客文章Fluent Interfaces is E…

c语言初始化字符串 函数 manment,[转载]3.09进程(C语言班最后一天的课程)

1,进程:是容器,是内存上的概念。线程是CPU的概念。2,fork的作用是根据一个现有的进程复制出一个新进程,原来的进程称为父进程(Parents Process),新进程称为子进程(Child Process)。系统中同时运行着许多进程…

减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现

文章目录基本介绍应用实例基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方法是: ①记录数组一共有几行几列,有多少个不同的值(0除外)。 ②把具有不同值…

ug弹簧可变性装配_弹簧可配置魔术

ug弹簧可变性装配Spring框架具有几个提供一系列服务的模块,其中许多模块仅可用于托管对象(Spring Bean)。有关这些服务的一些示例是依赖注入,事务管理,AOP服务等。当我们使用时,一切都很好对象即服务&#…

C语言课程设计报告输出杨辉三角,C语言学习:在屏幕上输出杨辉三角

杨辉三角的规律是:它的两条斜边都是由数字1组成的,而其余的数则是等于它肩上的两个数之和。 代码如下:#include#includeint main(){int i,j,k,arr[10][10]{0};/*arr[11][11]必须初始化,初始化为{0}*/printf("打印出杨辉三角&…

朴实!简单!依你所好,MySQL排序查询ORDER BY

1、基本语法 SELECT查询列表 FROM表 #可选(WHERE ...) ORDER BY排序列表 DESC/ASC;升序是ASC或者不写,降序是DESC 2、案例一:按字段(*代表全部) SELECT* FROMemployees ORDER BYsalary DESC;3、案例二&am…

使用一个命令执行单个Java源文件

JDK增强提案 ( JEP ) 草案于2017年末创建,名为“ 启动单文件源代码程序 ”(其相关的JDK问题为JDK-8192920 )。 顾名思义,该JEP草案旨在“增强Java启动器以支持运行作为Java源代码的单个文件提供的程序。” …

习惯性朴实简单!一起学习MySQL常见单行函数,字符数学日期流程控制

文章目录一、字符函数二、数学函数三、日期函数四、其他函数五、流程控制函数一、字符函数 1、大小写控制函数 ①UPPER():转换成大写 SELECT UPPER(Hello);②LOWER():转换成小写 SELECT LOWER(Hello);2、字符控制函数 ①LENGTH():获取参数…

c语言程序设计陈雪芳,东莞理工学院C语言课程设计.doc

東莞理工學院C语言程序设计课程设计报告书院系名称 机械工程学院专业班级 2013级机械设计制造及其自动化1班组长成员指导教师 陈雪芳完成时间 2014年6月1日目 录1、系统功能及任务描述………………………..1.1系统总体功能描述………………………….1.2主要任务描述…………………

不可上位!数据结构队列,老实排队,Java实现数组模拟队列及可复用环形队列

文章目录队列简介数组模拟队列(无法复用)数组模拟环形队列(可复用)队列简介 队列是一个有序列表,可以用数组或是链表来实现。 遵循先入先出的原则。即先存入队列的数据,先取出,后存入的后取出…

c语言循环与数组训练题,C语言循环数组练习题解读.doc

循环数组练习题一&#xff0e;选择题1&#xff0e;for(i0;i<10;i); 结束后&#xff0c; i 的值是&#xff1b; BA9B10C11D122&#xff0e;下面程序的循环次数是&#xff1a;Dint k0;while(k<10){if(k<1)continue;if(k5)break;k;}A.5B6C4D 死循环&#xff0c;不能确定循…

Java更快地对基元数组进行排序?

看起来Java的原语排序数组在不久的将来可能会提高性能。 弗拉基米尔雅罗斯拉夫斯基&#xff08;Vladimir Yaroslavskiy&#xff09;已在core-libs-dev邮件列表中发布了一条消息 &#xff0c;标题为“ Dual-Pivot Quicksort的新优化版本 ”&#xff0c;其中Yaroslavskiy撰写了“…

多对一!分组查询!MySQL分组函数,聚合函数,分组查询

文章目录一、简单使用二、搭配DISTINCT去重三、COUNT()详细介绍四、分组查询一、简单使用 SUM&#xff1a;求和&#xff08;一般用于处理数值型&#xff09; AVG&#xff1a;平均&#xff08;一般用于处理数值型&#xff09; MAX&#xff1a;最大&#xff08;也可以用于处理字…

华工网络教育C语言校考答案,计算机应用基础(统考)随堂练习2017秋华工答案.docx...

计算机应用基础(统考)随堂练习第一章计算机基础知识计算机能直接识别并执行的语言是 ______。A. 汇编语言B.自然语言C.机器语言D.高级语言答题&#xff1a;A. B. C. D.参考答案&#xff1a; C计算机存储容量的基本单位是 _____。A. 赫兹B.字节( Byte)C.位 (bit)D. 波特答题&…

数据结构单链表SingleLinkedList,Java实现单链表增删改查

文章目录链表介绍应用示例链表介绍 链表是有序的列表&#xff0c;但是它在内存中是存储是不连续的&#xff0c;如下&#xff1a; 链表是以节点的方式来存储&#xff0c;是链式存储&#xff1a; ①每个节点包含data域存储数据&#xff0c;next域指向下一个节点 ②链表的各个节点…

c语言队列原理的实现,c印记(十二):队列queue原理与实现

一、简而言之在百度百科里面摘取了一段关于队列(queue)的介绍&#xff1a;队列是一种特殊的线性表&#xff0c;特殊之处在于它只允许在表的前端(front)进行删除操作&#xff0c;而在表的后端(rear)进行插入操作&#xff0c;和栈一样&#xff0c;队列是一种操作受限制的线性表。…

通用版!完整代码,单链表SingleLinkedList增删改查,反转,逆序,有效数据等Java实现

文章目录节点类链表类&#xff08;主要&#xff09;测试类小结节点类 可以根据需要&#xff0c;对节点属性进行修改。注意重写toString()方法&#xff0c;以便后续的输出操作。 //节点类 class Node {public int id;public String name;public Node next;public Node(int id,…

Java 10 – JEP 286:局部变量类型推断

Java 10即将发布&#xff0c;RC Build可在此处获得 。 可在此处找到此发行版的目标功能。 在针对Java 10的所有JEP中&#xff0c;开发人员社区中最有趣且最受关注的是286&#xff1a;Local-Variable Type Inference 。 什么是局部变量类型推断&#xff1f; 我们在Java 8中看到…

w ndows7与XP哪个好,Win7系统与Win XP系统哪个更好?Windows7与WindowsXP区别介绍-系统城·电脑系统下载之家...

虽然微软已经停止对xp系统的维护&#xff0c;但是仍有不少用户有这样一个疑惑&#xff1a;Win7系统与WinXP系统哪个更好&#xff1f;接下来&#xff0c;小编就向大家具体介绍Windows7与WindowsXP的区别&#xff0c;让你知道到底哪个系统会更好一些。首先跟系统城小编一起来看微…

一文完整MySQL连接查询,笛卡尔乘积,内连接外连接交叉连接

文章目录笛卡尔乘积连接查询分类等值连接非等值连接自连接外连接交叉连接连接查询又称为多表查询&#xff0c;当查询的字段来自于多个表时&#xff0c;使用连接查询。 笛卡尔乘积 笛卡尔乘积现象&#xff1a;表1有m行&#xff0c;表2有n行&#xff0c;结果有m*n行 发生原因&a…