当前位置: 首页 > news >正文

开发接口,你需要先搞懂这些概念!

SOA

Service Oriented Ambiguity 即面向服务架构, 简称SOA。

SOA的提出是在企业计算领域,就是要将紧耦合的系统,划分为面向业务的,粗粒度,松耦合,无状态的服务。服务发布出来供其他服务调用,一组互相依赖的服务就构成了SOA架构下的系统。

首先,你要知道SOA并不是某一种具体的技术实现,它是一个系统架构的设计思想。这个架构设计思想的提出背景是随着我们的软件系统解决的问题越来越复杂,那么会带来难以维护、难以扩展,容易出错等问题。那么SOA思想的提出就是为了解决这个问题。

举个生活中的例子,随着人们生活水平的提高,出现了越来越多的肥胖人群,肥胖会容易带来一些高血压、糖尿病的发病几率,有人就得出了“减肥”这想法来解决肥胖,减肥不但降低得那些病的几率,还可以让人变得更漂亮。

不同的厂商和个人对SOA有着不同的理解,但从SOA的定义中可以看到几个关键特性:

一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。

SOA的技术实现是什么?继续往下看

web serveice

1996年SOA的思想被提出,它只是一个理论概念。到了2000年,W3C才成立了相关的委员会,开始讨论Web Service的相关标准,各大厂商一边积极参与标准制定,一边推出了一系列实实在在的产品。新的技术和新的产品出现,SOA找到了可以落地的技术方案。

有人提出节食可以变瘦,一天只吃一顿;有人提出运动可以变瘦,一天跑2000米,“减肥”的想法终于有了具体的实施方案。

你要明白一个关系:SOA不是Web Service,Web Service是实现SOA的一种具体的技术方案。

Web Service的定义:

Web Service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。

Web Service有三个部分组成,分别解答三个问题:

  • 服务之间如何传输数据?
  • 数据的格式是怎样的?
  • 如何发布和查找这些服务?

SOAP

Simple Object Access Protocol,即简单对象访问协议, 简称SOAP。

SOAP是基于XML在分散或分布式的环境中交换信息的简单的协议,用于访问网络服务。可使应用程序在 HTTP 之上进行信息交换。

如果你用Wireshark这种网卡级别的抓包工具抓取过SOAP的信息就会发现它传输数据用的HTTP协议。所以,许多人以为SOAP就是HTTP+XML,或者认为SOAP是HTTP的post请求的一个专用版本,遵循一种特殊的XML消息格式。

虽然,我们看到的情况确实如此,但这并不是SOAP本质与全部。当SOAP消息真正需要在网络上实际传输的时候,SOAP消息能够与不同的底层传输协议进行绑定,同时,SOAP消息可以在很多种消息传输模式中使用。包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。但是,目前SOAP的实现只通过与HTTP进行绑定这么一种。所以,就变成我们看到的这一种样子。

WSDL

Web Services Description Language,即网络服务描述语言,简称WSDL。它是一门基于XML的语言,用于描述Web Services以及如何对它们进行访问。

WSDL格式:

<definitions><types>definition of types........
</types><message>definition of a message....
</message><portType>definition of a port.......
</portType><binding>definition of a binding....
</binding></definitions>

WSDL文档主要使用以下几部分组成:

  • <portType> Web Service执行的操作。

  • <message> Web Service使用的消息。

  • <types> Web Service使用的数据类型。

  • <binding> Web Service使用的通信协议。

UDDI

Universal Description, Discovery and Integration",可译为“通用描述、发现与集成服务”,简称UDDI。

UDDI是一个独立于平台的框架,通过使用Internet来描述服务,发现企业,并对企业服务进行集成。

图:

扩展:

如何开发一个Web Service服务,使用这个项目:
spyne · PyPI

如何调用Web Serveice服务(即接口),参考这个项目:
suds-jurko · PyPI

终于把Web Service给你讲清楚了,但是,我要告诉你,Web Service技术过时了。我认为由以下两个原因:

1、技术实现比较麻烦。我用spyne开发过Web Service服务,实现比较麻烦,跟Flask Web框架实现个HTTP接口没法比。

2、数据描述太臃肿,XML描述数据本来就不够简洁,WSDL在XML的基础上定义数据的传输格式就更复杂了。跟JSON这种格式描述数据没法比。

HTTP

HyperText Transfer Protocol,超文本传输协议,简称HTTP。HTTP是因特网上应用最为广泛的一种网络传输协议。

我想这个我不需要做过多的介绍,但有一个问题你要搞明白,HTTP协议和接口是什么关系?

我举一个生活当中的例子:高速公路和物流是什么关系? 高速公路规定什么样的工具才能上高速(轮船、飞机机不行),必须带轮子的车,上路之后如何运行,每个车道的时速多少等,车必须按照规则才能在上面运行。 物流是一个模糊的概念,这一般指运输公司运送货物。高速公路只能跑物流吗?当然不是,运输人也可以嘛。物流也不是定走高速公路,走航空的物流也是可以的。高速公路就是HTTP协议,物流就是接口。

启动的Chrome浏览器,打开前端开发者工具,切换到“network”标签,刷新页面。你看到了什么?JS、CSS、Img、media、font、doc、WS、Other等。各种类型的数据,哪个是接口?

JSON

JavaScript Object Notation, JavaScript 对象表示法,简称JSON。JSON是存储和交换文本信息的语法。类似XML。JSON比XML更小、更快,更易解析。

在接口的技术实现上 JSON和HTTP是最佳拍档。它可以更简洁的描述要传输的数据,而且解析也很简单。

物流要运的货物,车厢如何设计节省空间,能装更多的货物,装货/卸货方便。货物是数据,车厢设计就是数据格式。

RESTful

Representational State Transfer,中文直译感觉不对味,简称REST,如果一个架构符合REST原则,就称它为RESTful架构。

REST只是一个接口设计的风格。

古代的物流叫走镖,走镖是有讲究的,前面有一个喊口号的人叫“趟子手”,例如中原镖局一般喊:“中原镖局,请江湖朋友让个道!” 这江湖规矩,你可以把这种江湖规矩看成REST风格。

比如,一个通过id查询用户信息的接口。

  • 一般的风格
/get_user/?id=1
  • REST风格
/user/1/

扩展:
请参考阮一峰的博客:
理解RESTful架构 - 阮一峰的网络日志

RPC

Remote Procedure Call,远程过程调用。RPC通常特指在一个应用中调用另一个应用的接口而实现的远程调用。

一个RPC框架的实现包含以下部分:

  • 动态代码
  • 序列化和反序列化
  • 通信
  • 异常处理

其中,通信部分可使用HTTP协议(七层协议),如 grpc框架使用的就是HTTP2协议;也可以使用TCP/UDP协议(四层协议),如dubbo使用的是TCP协议。

这就好比顺丰快递,他们有自己的一套物流系统,可以走高速,也可以走空运;不仅仅是包含的运送这一项服务,还有上面取件、称重打包,自己的仓储,分拣中心,甚至货物寄丢了还有保险理赔等。你选择了一个rpc框架就相当于选择了一个物流公司的全套服务。

本文的编写我又翻阅了不少资料,并且加入了自己的思考。通过这一些例子来帮助你理解这些概念。

相关文章:

开发接口,你需要先搞懂这些概念!

SOA Service Oriented Ambiguity 即面向服务架构&#xff0c; 简称SOA。 SOA的提出是在企业计算领域&#xff0c;就是要将紧耦合的系统&#xff0c;划分为面向业务的&#xff0c;粗粒度&#xff0c;松耦合&#xff0c;无状态的服务。服务发布出来供其他服务调用&#xff0c;一…...

zookeeper常用命令

zkClient 简介 zkClient是简易的客户端程序 进入zkClient 在bin目录下输入zkCli.sh 节点命令 增 create 路径 数据 -s&#xff1a;顺序节点 -e&#xff1a;临时节点 默认情况下&#xff0c;不添加-s或者-e参数的&#xff0c;创建的是持久节点改 set 路径 数据 版本…...

亚马逊水基灭火器UL8测试报告ISO17025实验室办理

在跨境电商平台上销售的境外电商&#xff0c;在美国市场中需要提供相关的安全规范报告。其中&#xff0c;美国相关部门要求&#xff0c;如果商家未能提交UL&#xff08;Underwriters Laboratories&#xff09;标准的检测报告&#xff0c;将会被责令停止销售。而为了在亚马逊、T…...

Shell学习脚本-if多分支结构

语法&#xff1a; if 条件then指令集 else指令集 fi特殊写法&#xff1a; if [ -f "$file1" ]; then echo 1; else echo 0; fi 相当于&#xff1a; [ -f "$file1" ] && echo 1 || echo 0 多分支结构&#xff1a; if 条件then指令 elif 条件th…...

[SQL挖掘机] - 窗口函数 - lead

介绍: lead() 是一种常用的窗口函数&#xff0c;它用于获取某一行之后的行的值。它可以用来在结果集中的当前行后面访问指定列的值。 用法: lead() 函数的语法如下&#xff1a; lead(列名, 偏移量, 默认值) over (partition by 列名1, 列名2, ... order by 列名 [asc|desc]…...

PyTorch Lightning教程四:超参数的使用

如果需要和命令行接口进行交互&#xff0c;可以使用Python中的argparse包&#xff0c;快捷方便&#xff0c;对于Lightning而言&#xff0c;可以利用它&#xff0c;在命令行窗口中&#xff0c;直接配置超参数等操作&#xff0c;但也可以使用LightningCLI的方法&#xff0c;更加轻…...

2023 蓝桥杯真题B组 C/C++

https://www.dotcpp.com/oj/train/1089/ 题目 3150: 蓝桥杯2023年第十四届省赛真题-冶炼金属 题目描述 小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。这个炉子有一个称作转换率的属性 V&#xff0c;V 是一个正整数&#xff0c;这意味着消耗 V 个普通金 属 O…...

视频怎样分割成两段?分享几种视频分割方法

当需要制作长时间的视频时&#xff0c;将视频分割成几段可以帮助你更好地组织视频内容&#xff0c;使其更易于理解和学习。与此同时&#xff0c;将视频分割成多个小部分也可以在不影响整体视频质量的情况下将其上传到各种平台&#xff0c;并节省存储空间。此外&#xff0c;如果…...

cyber_back

1.1 话题通信 模式&#xff1a; 以发布订阅的方式实现不同节点之间数据交互的通信模式。 如图1-1所示&#xff0c;Listener-Talker通信首先创建了两个Node&#xff0c;分别是Talker Node和 Listener Node。 每个Node实例化Writer类和Reader类对Channel进行消息的读写。 Writer…...

价值 1k 嵌入式面试题-单片机 main 函数之前都做了啥?

开门见山 请说下单片机&#xff08;Arm&#xff09;在运行到 main() 函数前&#xff0c;都做了哪些工作&#xff1f; 常见问题 系统初始化工作&#xff0c;太泛泛硬件初始化&#xff0c;比较不具体 答题思路 这道题应该从两方面回答&#xff0c;一个是比较表面的硬件的初始化…...

美团2024校招6000人;伯克利博士讲Llama 2技术细节;互联网转行AIGC最全指北;技术进步周期与创客崛起 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 美团 2024 届校园招聘将录用 6000 人&#xff0c;技术类岗位扩招超 50% 美团招聘公众号宣布启动 2024 届校园招聘&#xff01;此次招聘…...

【严重】PowerJob<=4.3.3 远程代码执行漏洞

漏洞描述 PowerJob 是一款开源的分布式任务调度框架。 由于 PowerJob 未对网关进行鉴权&#xff0c;4.3.3 及之前版本中&#xff0c;未经授权的攻击者可向 /instance/detail 端点发送恶意构造的 instanceId 参数远程执行任意代码。 漏洞名称 PowerJob<4.3.3 远程代码执行漏…...

什么是 ASP.NET Core SignalR?

所有连接了 Internet 的应用程序都由服务器和客户端组成。 客户端依赖于服务器获取数据&#xff0c;而它们获取数据的主要机制是通过发出超文本传输协议 (HTTP) 请求来进行的。 某些客户端应用程序需要经常更改的数据。 ASP.NET Core SignalR 提供了一个 API&#xff0c;用于创…...

Centos/Ubuntu 替换yum/apt源?

yum/apt源如果不满足要求, 可以考虑将源替换为阿里云的源。 1.CentOS更换阿里云yum源 1. 备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base-bak.repo 2. 下载 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Cent…...

【RabbitMQ(day3)】扇形交换机和主题交换机的应用

文章目录 第三种模型&#xff08;Publish/Subscribe 发布/订阅&#xff09;扇型&#xff08;funout&#xff09;交换机Public/Subscribe 模型绑定 第四、第五种模型&#xff08;Routing、Topics&#xff09;第四种模型&#xff08;Routing&#xff09;主题交换机&#xff08;To…...

redis 高级篇 redis 源码的读取分析

一 redis源码分析 1.1 源码分析 1每一个kv键值对应有一个dictEntry。 2.底层数据结构...

Acwing.873.欧拉函数

题目 给定n个正整数ai&#xff0c;请你求出每个数的欧拉函数。 输入格式 第一行包含整数n。 接下来n行&#xff0c;每行包含一个正整数ai。 输出格式 输出共n行&#xff0c;每行输出一个正整数an的欧拉函数。 数据范围 1 ≤n ≤100 1≤ai≤2* 109 输入样例: 3 3 6 8输…...

深入浅出FPGA——笔记7 代码风格

1 寄存器电路的设计方式 废话&#xff1a;时序逻辑设计是核心&#xff0c;而寄存器又是时序逻辑的基础。 1: 简单的时序输入输出模型 如下图所示&#xff0c;在每个时钟信号clk的有效沿&#xff08;通常是上升沿&#xff09;&#xff0c;输入端数据din将被锁存到输出端dout。…...

npm, yarn配置

一、npm 1. 查看当前的镜像源。 npm config get registry 2. 设置为淘宝源 npm config set registry https://registry.npm.taobao.org 3. 还原默认源 npm config set registry https://registry.npmjs.org/ 二、Yarn 1.yarn的安装 npm install -g yarn 2. 查看当…...

跨域情况下,vue如何下载后台接口提供的application/octet-stream文件流Excel文件

前言 由于跨域&#xff0c;所以无法直接通过window.location.href或者a标签直接下载&#xff0c;直接拼后台接口地址又暴露了后台地址&#xff0c;不可行。 所以在这种跨域情况下&#xff0c;本章讲一下vue如何下载后台接口提供的application/octet-stream文件流Excel文件。 …...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

PH热榜 | 2025-06-08

1. Thiings 标语&#xff1a;一套超过1900个免费AI生成的3D图标集合 介绍&#xff1a;Thiings是一个不断扩展的免费AI生成3D图标库&#xff0c;目前已有超过1900个图标。你可以按照主题浏览&#xff0c;生成自己的图标&#xff0c;或者下载整个图标集。所有图标都可以在个人或…...

2.2.2 ASPICE的需求分析

ASPICE的需求分析是汽车软件开发过程中至关重要的一环&#xff0c;它涉及到对需求进行详细分析、验证和确认&#xff0c;以确保软件产品能够满足客户和用户的需求。在ASPICE中&#xff0c;需求分析的关键步骤包括&#xff1a; 需求细化&#xff1a;将从需求收集阶段获得的高层需…...