开发接口,你需要先搞懂这些概念!
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 即面向服务架构, 简称SOA。 SOA的提出是在企业计算领域,就是要将紧耦合的系统,划分为面向业务的,粗粒度,松耦合,无状态的服务。服务发布出来供其他服务调用,一…...
zookeeper常用命令
zkClient 简介 zkClient是简易的客户端程序 进入zkClient 在bin目录下输入zkCli.sh 节点命令 增 create 路径 数据 -s:顺序节点 -e:临时节点 默认情况下,不添加-s或者-e参数的,创建的是持久节点改 set 路径 数据 版本…...

亚马逊水基灭火器UL8测试报告ISO17025实验室办理
在跨境电商平台上销售的境外电商,在美国市场中需要提供相关的安全规范报告。其中,美国相关部门要求,如果商家未能提交UL(Underwriters Laboratories)标准的检测报告,将会被责令停止销售。而为了在亚马逊、T…...
Shell学习脚本-if多分支结构
语法: if 条件then指令集 else指令集 fi特殊写法: if [ -f "$file1" ]; then echo 1; else echo 0; fi 相当于: [ -f "$file1" ] && echo 1 || echo 0 多分支结构: if 条件then指令 elif 条件th…...
[SQL挖掘机] - 窗口函数 - lead
介绍: lead() 是一种常用的窗口函数,它用于获取某一行之后的行的值。它可以用来在结果集中的当前行后面访问指定列的值。 用法: lead() 函数的语法如下: lead(列名, 偏移量, 默认值) over (partition by 列名1, 列名2, ... order by 列名 [asc|desc]…...
PyTorch Lightning教程四:超参数的使用
如果需要和命令行接口进行交互,可以使用Python中的argparse包,快捷方便,对于Lightning而言,可以利用它,在命令行窗口中,直接配置超参数等操作,但也可以使用LightningCLI的方法,更加轻…...

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

视频怎样分割成两段?分享几种视频分割方法
当需要制作长时间的视频时,将视频分割成几段可以帮助你更好地组织视频内容,使其更易于理解和学习。与此同时,将视频分割成多个小部分也可以在不影响整体视频质量的情况下将其上传到各种平台,并节省存储空间。此外,如果…...
cyber_back
1.1 话题通信 模式: 以发布订阅的方式实现不同节点之间数据交互的通信模式。 如图1-1所示,Listener-Talker通信首先创建了两个Node,分别是Talker Node和 Listener Node。 每个Node实例化Writer类和Reader类对Channel进行消息的读写。 Writer…...

价值 1k 嵌入式面试题-单片机 main 函数之前都做了啥?
开门见山 请说下单片机(Arm)在运行到 main() 函数前,都做了哪些工作? 常见问题 系统初始化工作,太泛泛硬件初始化,比较不具体 答题思路 这道题应该从两方面回答,一个是比较表面的硬件的初始化…...

美团2024校招6000人;伯克利博士讲Llama 2技术细节;互联网转行AIGC最全指北;技术进步周期与创客崛起 | ShowMeAI日报
👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 美团 2024 届校园招聘将录用 6000 人,技术类岗位扩招超 50% 美团招聘公众号宣布启动 2024 届校园招聘!此次招聘…...

【严重】PowerJob<=4.3.3 远程代码执行漏洞
漏洞描述 PowerJob 是一款开源的分布式任务调度框架。 由于 PowerJob 未对网关进行鉴权,4.3.3 及之前版本中,未经授权的攻击者可向 /instance/detail 端点发送恶意构造的 instanceId 参数远程执行任意代码。 漏洞名称 PowerJob<4.3.3 远程代码执行漏…...
什么是 ASP.NET Core SignalR?
所有连接了 Internet 的应用程序都由服务器和客户端组成。 客户端依赖于服务器获取数据,而它们获取数据的主要机制是通过发出超文本传输协议 (HTTP) 请求来进行的。 某些客户端应用程序需要经常更改的数据。 ASP.NET Core SignalR 提供了一个 API,用于创…...
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)】扇形交换机和主题交换机的应用
文章目录 第三种模型(Publish/Subscribe 发布/订阅)扇型(funout)交换机Public/Subscribe 模型绑定 第四、第五种模型(Routing、Topics)第四种模型(Routing)主题交换机(To…...

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

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

深入浅出FPGA——笔记7 代码风格
1 寄存器电路的设计方式 废话:时序逻辑设计是核心,而寄存器又是时序逻辑的基础。 1: 简单的时序输入输出模型 如下图所示,在每个时钟信号clk的有效沿(通常是上升沿),输入端数据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文件
前言 由于跨域,所以无法直接通过window.location.href或者a标签直接下载,直接拼后台接口地址又暴露了后台地址,不可行。 所以在这种跨域情况下,本章讲一下vue如何下载后台接口提供的application/octet-stream文件流Excel文件。 …...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...

SQL注入篇-sqlmap的配置和使用
在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap,但是由于很多朋友看不了解命令行格式,所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习,链接:https://wwhc.lanzoue.com/ifJY32ybh6vc…...

【版本控制】GitHub Desktop 入门教程与开源协作全流程解析
目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork(创建个人副本)步骤 2: Clone(克隆…...