REST 101开发人员专用

本地代码执行

诸如C之类的高级语言中的函数将被汇编为Assembly中的过程 。 它们增加了一个间接级别,使我们不必考虑内存地址。 高枕无忧

诸如Java之类的面向对象语言中的方法和多态性增加了另一种间接性 ,使我们不必考虑一组相似功能的特定变体。

尽管有这些间接方式,但方法基本上仍然是过程调用,告诉计算机将执行流从一个内存位置切换到另一个内存位置。 所有这些都是在同一台计算机上运行的同一进程中发生的。

远程执行代码

这与将执行切换到另一个进程或另一台计算机根本不同。 特别是后者非常不同,因为另一台计算机甚至可能没有相同的操作系统,程序可以通过该操作系统访问内存。

因此,尝试尽可能隐藏这种差异的远程代码执行机制(例如RMI或SOAP )在很大程度上失败并不奇怪。 这种技术采用了所谓的远程过程调用 (RPC)。

我们必须区分本地过程调用和远程过程调用的原因之一是RPC的速度慢得多。 rpc

对于大多数实际应用程序,这将改变您进行的调用的性质:您将希望进行较少的远程调用,而这些调用的粒度更粗。

另一个原因是本质上组织性比技术性强。

当您调用的代码位于另一台计算机上的另一个进程中时,该另一个进程很可能是由其他人编写和部署的。 为了使这两段代码能够很好地协作,需要某种形式的协调。 这就是我们为耦合付出的代价。

通过界面协调变更

我们还可以在单​​个过程中看到此问题,例如,当代码部署在不同的jar文件中时。 如果升级代码所依赖的第三方jar文件,则可能需要更改代码以使一切正常。

这种协调令人讨厌。 如果我们只需部署该jar的最新安全补丁程序而不必担心破坏我们的代码,那就更好了。 幸运的是,如果我们谨慎的话,我们可以。

Java之类的语言接口将代码的公共部分和私有部分分开。 接口

客户所依赖的是公共部分,因此您必须以谨慎的方式开发接口,以避免破坏客户。

相反,私有部分可以随意更改。

从界面到服务

在OSGi中 ,接口是所谓的微服务的基础 。 通过在注册表中发布服务,我们可以使客户端无需知道哪个对象实现了给定的接口。 换句话说,客户端可以发现提供服务的对象的身份。 服务注册表成为我们访问功能的入口。

这些接口被称为微服务是有原因的:它们是构成面向服务的体系结构 (SOA)的服务的微型版本。

将微服务直接扩展到“ SOA服务”会导致RPC样式的实现,例如使用SOAP。 但是,我们早先已经确定RPC不是调用远程代码的最佳方法。

输入REST。

RESTful服务

高枕无忧 代表性状态转移 (REST)是一种体系结构样式,将Web的优点带入了程序世界。

不能否认Web的可伸缩性,因此这是一个有趣的角度。

与其解释REST通常通过探索其体系结构约束来完成,不如将其与微服务进行比较。

设计良好的RESTful服务具有单个入口点,例如微服务注册表。 该入口点可以采用家庭资源的形式。

我们像访问任何其他资源一样访问主页资源:通过表示。 表示形式是我们需要解释的一系列字节。 这种解释的规则由媒体类型给出。

如今,大多数RESTful服务都基于JSON或XML表示。 资源的媒体类型与对象的接口进行比较。

一些接口包含使我们能够访问其他接口的方法。 同样,资源的表示形式可能包含指向其他资源的超链接 。

基于代码的服务与基于数据的服务

REST和SOAP之间的区别现在变得显而易见。

在SOAP中,就像在微服务中一样,该接口由方法组成。 换句话说,它是基于代码的。 肥皂

另一方面,在REST中,接口由代码和数据组成。 我们已经看过数据:媒体类型描述的表示形式。 该代码是统一接口 ,这意味着所有资源都相同(统一)。

实际上,统一接口由HTTP方法 GET,POST,PUT和DELETE组成。

由于统一接口对于所有资源都是固定的, 因此任何RESTful服务中的真正汁液都不在代码中,而在数据中:媒体类型 。

正如有发展Java接口的规则一样,也有发展媒体类型的规则,例如, 基于XML的媒体类型 。 (由此得出结论, 您不能对基于XML的媒体类型使用XML模式验证 。)

统一资源标识符

到目前为止,我还没有提到统一资源标识符 (URI)。 许多所谓的RESTful服务的文档可能会让您觉得它们很重要。

身份 但是,由于URI标识资源,因此它们在微服务中的等效项是实现接口的对象的标识。

希望这表明客户端不必关心URI。 仅本地资源的URI很重要。

家庭资源的表示形式包含指向其他资源的链接。 这些链接的含义由链接关系指示。

通过了解链接关系,客户端可以决定要遵循的链接,并从表示形式中发现其URI。

服务版本

演化 我们应尽可能遵循不断发展的媒体类型的规则,而不引入任何重大变化。

但是,有时这是不可避免的。 然后,我们应该创建该服务的新版本。

由于URI不是RESTful API的公共接口的一部分,因此它们不是中继版本信息的正确工具。 可以通过与微服务进行比较来得出指示API主要(即不兼容)版本的正确方法。

每当服务引入重大更改时,都应更改其接口。 在RESTful API中,这意味着更改媒体类型。 然后,客户端可以使用内容协商来请求其理解的媒体类型。

你怎么看?

你怎么看 可以轻松获得有关如何设计和记录基于代码的接口的文献。

对于基于数据的接口(如媒体类型),情况并非如此。

随着RESTful服务变得越来越流行,这是需要填补的空白。 以后我会回到这个话题。

您如何设计服务? 您如何记录它们?

参考: REST 101对于我们的JCG合作伙伴 Remon Sinnema的开发人员 ,请访问安全软件开发博客。

翻译自: https://www.javacodegeeks.com/2013/09/rest-101-for-developers.html

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

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

相关文章

一个基于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源码架…

Xstream将XML转换为javabean的问题

1.问题:Xstream is not security 解决方法:加上 2.问题:如果没有第二行代码,会出现xstream forbiddenclassexception 解决方法:加上第二行,其中参数是要进行解析的对象! 调用该方法:…

蚂蚁属性细微差别

每隔一段时间,我会想起Ant属性的一些细微差别 ,一旦忘记它们,在与Ant交互时会引起混乱。 特别是, Ant属性 通常是不可变的 (不包括Ant 1.8版本的 局部属性 ),并且在其首次设置时“永久”设置&am…

《从零构建前后分离的web项目》准备 - 前端了解过关了吗?

前端基础架构和硬核介绍 技术栈的选择 首先我们构建前端架构需要对前端生态圈有一切了解,并且最好带有一定的技术前瞻性,好的技术架构可能日后会方便的扩展,减少重构的次数,即使重构也不需要大动干戈,我通常选型技术栈…

联想w540笔记本参数_2020年12月笔记本电脑推荐!联想、惠普、华为笔记本电脑推荐!18款高性价比笔记本电脑推荐!!!...

前言&#xff1a;笔记本电脑&#xff0c;主要分为三种&#xff1a;轻薄本<全能本<游戏本。轻薄本&#xff0c;又称办公笔记本电脑&#xff0c;因为轻薄方便携带&#xff0c;通常用于移动办公使用。全能本&#xff0c;就是把轻薄本的集显变成了小独显&#xff0c;增加了独…

【BZOJ 1098】办公楼(补图连通块个数,Bfs)

补图连通块个数这大概是一个套路吧&#xff0c;我之前没有见到过&#xff0c;想了好久都没有想出来QaQ 事实上这个做法本身就是一个朴素算法&#xff0c;但进行巧妙的实现&#xff0c;就可以分析出它的上界不会超过 $O(n m)$。 接下来介绍一下这个技巧&#xff1a; 很显然一个…

Spring MVC:资源

我从博客读者那里收到的最常见的问题之一是如何在Spring MVC的应用程序中使用CSS和javascript文件。 因此&#xff0c;这是撰写有关Spring MVC中资源使用情况的文章的好机会。 通常&#xff0c;我将使用基于Java的配置方法。 如今&#xff0c;很难想象没有CSS和JavaScript文件…

c语言读文件空格间隔,c语言文件流实现按单个词读取(以空格、分号等作间隔)...

c语言文件流实现按词读取(以空格、分号等作间隔)1.基本描述在之前的作业中&#xff0c;认真编写代码&#xff0c;从中发现不少知识积累上的欠缺。编程中使用到的c语言文件读取&#xff0c;要求是按照获取到一个完整的词&#xff0c;并对其进行处理。写有java或c语言源程序的.tx…

山东专升本access知识点_全国各省份每年的专升本考试大纲啥时候公布?考纲公布之前你该做什么?...

?星标/置顶专升本招考下一个上岸的就是你最近小编在专升本招考后台收到很多同学的留言&#xff0c;大多同学都是看到好多省都公布了专升本考试政策和大纲&#xff0c;却迟迟不见自己所在的省份出&#xff0c;于是火急火燎地找到小编来问&#xff1a;XX省的考试大纲到底啥时候出…

观点|蚂蚁金服玉伯:我们是如何从前端技术进化到体验科技的?

小蚂蚁说&#xff1a;王保平&#xff0c;花名玉伯。熟悉前端和SeaJS的人一定对这个名字不陌生。作为前端领域的一枚大大大牛&#xff0c;他现在担任蚂蚁金服体验技术部负责人。本文&#xff0c;他分享了他从前端一路进阶升级到体验科技的个人思考&#xff0c;并详细介绍了体验科…

excel 电阻并联计算_电路分析基础(5)-关于电阻,有些话我还是要说一说

电阻定义&#xff1a;导体对电流的阻碍作用就叫该导体的电阻。不同的导体&#xff0c;电阻一般不同&#xff0c;电阻是导体本身的一种性质。定义式如下&#xff1a;因此&#xff0c;我们应该清楚了欧姆定律的本质到底是什么&#xff0c;为啥电阻跟电压和电流没有关系&#xff0…

针对新手的Java EE7和Maven项目–第2部分–为我们的应用程序定义一场简单的战争...

从第一部分恢复 第1部分 我们刚刚定义了父 pom。 一种特殊的pom类型&#xff0c;它最终定义了我们的应用程序将要使用的库。 它还配置了所有用于打包我们应用程序每个模块的Maven工具。 您可以在此处 签出 -1部分示例代码。 因此&#xff0c;到目前为止&#xff0c;在将要开发…

postman实现从response headers中获取cookie,并将其设置为环境变量

1.最近在学习postman的使用方法,为了保证后续模块操作&#xff0c;必须在登录时获取的session值&#xff0c;并将其设置为环境变量&#xff0c;session的位置处于response headers里面返回的set-cookie参数&#xff0c;并且将set-cookie中的session通过split方法截取出来. 写法…