本地代码执行

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

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

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

远程执行代码

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

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

REST 101开发人员专用相关推荐

  1. rest开发_REST 101开发人员专用

    rest开发 本地代码执行 诸如C之类的高级语言中的函数将被汇编为Assembly中的过程 . 它们增加了一个间接级别,使我们不必考虑内存地址. 诸如Java之类的面向对象语言中的方法和多态性增加了另 ...

  2. linux 开源谷歌浏览器_开发人员浏览器,Google开源版本等

    linux 开源谷歌浏览器 在本周的开放源代码新闻摘要中,我们将介绍Mozilla开发人员浏览器,欧盟委员会对开放数据的承诺,Google的Open Roberta计划等等! 开源新闻让您阅读愉快. ...

  3. 二次开发photoshop_Photoshop 101:Web开发人员简介

    二次开发photoshop 介绍 (Introduction) Often, when working as web developer, we need to integrate templates ...

  4. javaone_JavaOne 2012:101种改进Java的方法-开发人员参与为何如此重要

    javaone Bruno Souza , Martijn Verburg和Heather Vancura在希尔顿酒店的美国大陆宴会厅4中展示了" 101种改善Java的方法:开发人员为何如 ...

  5. JavaOne 2012:101种改进Java的方法-开发人员参与为何如此重要

    Bruno Souza , Martijn Verburg和Heather Vancura在希尔顿酒店的大陆宴会厅4中展示了" 101种改进Java的方法:开发人员参与为何如此重要" ...

  6. SQL Server开发人员应聘常被问的问题妙解汇总

    目前在职场中很难找到非常合格的数据库开发人员.我的一个同事曾经说过:"SQL开发是一门语言,它很容易学,但是很难掌握." 在面试应聘的SQL Server数据库开发人员时,我运用了 ...

  7. 软件开发向大数据开发过渡_如果您是过渡到数据科学的开发人员,那么这里是您的最佳资源...

    软件开发向大数据开发过渡 by Cecelia Shao 邵Ce It seems like everyone wants to be a data scientist these days - fr ...

  8. IE调试网页之一:F12 开发人员工具简介

    F12 开发人员工具是可帮助生成和调试网页的一套工具. 编写出色的网页需要编码知识以及适当的工具来发现和调试难免会出现的问题.Windows Internet Explorer 9 提供所呈现代码的视 ...

  9. 各大IT公司笔试真题汇总开发人员一定要加入收藏夹的网站(收藏)

    巨人网络java笔试基础题分享 http://www.coderarea.net/bbs/read.php?tid=834 百度笔试题 http://www.coderarea.net/bbs/rea ...

最新文章

  1. Linux哪个和Windows很像,Linuxfx - 这套Linux操作系统看起来和Windows 10非常类似
  2. 算了一挂,也不知准不准
  3. c语言p1口转向灯实验,实验三模拟汽车左右转向灯控制.doc
  4. ricky java photos_【Melee】Ricky blog updates and new photos
  5. 安卓camera总体框架
  6. Java word 内容读取
  7. 一个代码托管平台居然公开拒招中国人,谁给了你歧视中国程序员的勇气?
  8. AtCoder Beginner Contest 081
  9. python编译安装没有c扩展_python – 为什么我在安装simplejson时得到“C扩展无法编译”?...
  10. UNIGUI中如果获得Session情况
  11. DH 算法迪菲-赫尔曼算法QUIC协议和HTTP3.0
  12. 独自美丽-西西里的美丽传说『by berta』
  13. csv转为utf8编码_中文的csv文件的编码改成utf8的方法
  14. 【相机标定系列】相机sensor传感器尺寸,CMOS靶面尺寸,分辨​率​和​镜头​焦距,畸变处理效果,相机主点
  15. vue实现循环滚动图片
  16. 深度学习入门笔记(七):深层神经网络
  17. SpringBoot+Schedule 定时任务的配置开关
  18. 那些年啊,那些事——一个程序员的奋斗史 ——72
  19. Windows10:耳机插到前面板上没声音?
  20. 电脑磁盘占用100%解决办法

热门文章

  1. 安装docker遇到的坑 Could not resolve host: download.docker.com;
  2. 直方图 帕累托图_如何发现现象背后的关键因素?帕累托图,质量管理的利器...
  3. jvm内存分配与收回策略
  4. 二叉堆的操作总结(insert+deleteMin+increaseKey+decreaseKey+percolateDown+percolateUp)
  5. java native关键字(java本地方法)
  6. java无效的源发行版_无效的Java
  7. openshift安装_云幸福–如何在几分钟内安装新的OpenShift Container Platform 3.7
  8. java调用命令行命令_Java命令行界面(第4部分):命令行
  9. java日期时间转日期_Java时间和日期指南
  10. 使用Maven进行增量构建