开发接口,你需要先搞懂这些概念!
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文件。 …...
10分钟精通:Bilibili视频下载器完整使用指南与高级技巧
10分钟精通:Bilibili视频下载器完整使用指南与高级技巧 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为无法保存B站…...
DIY蓝牙街机摇杆:从零打造无线复古游戏控制器
1. 项目概述与核心思路作为一个玩了二十多年街机,也折腾了十几年硬件的“老炮儿”,我始终觉得,有些东西的味道是数字模拟不出来的。比如,用键盘或现代手柄玩《拳皇97》或《合金弹头》,总觉得少了点灵魂——那“咔哒咔哒…...
Allegro PCB设计避坑:用Shape Keepout巧妙隔离大小电流GND(附16.6实操步骤)
Allegro PCB设计中的地平面隔离艺术:用Shape Keepout实现电流路径优化 在高速PCB设计中,地平面的处理往往决定着整个系统的成败。当大电流地与小信号地不得不共享同一网络名称时,如何在不违反设计规则的前提下实现物理隔离?这个问…...
Banana Pi BPI-M2S边缘AI开发板:双千兆网口与5TOPS NPU实战指南
1. 项目概述:一块为边缘AI与网络应用而生的全能型单板计算机 最近在捣鼓一些边缘计算和轻量级网络服务的项目,一直在寻找一块性能足够、接口丰富,同时性价比又不错的开发板。市面上常见的树莓派4B固然经典,但在面对需要一定AI推理…...
AI Agents 越智能,企业的人类判断力需求反而会爆炸式增长:Jevons 悖论在企业落地中的隐形反弹
在企业全面拥抱 AI Agents 的当下,最容易被忽略的不是模型能力,而是“智能变便宜”之后带来的责任边界扩张。产品团队让 Agent 自动起草客户邮件、更新工单、标记流失风险、总结销售通话、推荐代码变更、升级支持问题、准备决策材料——每一步都变得前所…...
基于CircuitPython与CRICKIT的仿生机械手制作:从PWM控制到交互实现
1. 项目概述:从零打造一个会“听话”的机械手如果你对机器人、自动化或者仅仅是让东西“动起来”感兴趣,那么用微控制器控制伺服电机绝对是一个绕不开的经典课题。这不仅仅是让一个舵机转来转去那么简单,它背后是一整套关于信号控制、机械传动…...
LaTeX-PPT:如何在3分钟内将专业数学公式融入PowerPoint演示
LaTeX-PPT:如何在3分钟内将专业数学公式融入PowerPoint演示 【免费下载链接】latex-ppt Use LaTeX in PowerPoint 项目地址: https://gitcode.com/gh_mirrors/la/latex-ppt 还在为PowerPoint中编辑复杂数学公式而头疼吗?LaTeX-PPT这款开源插件彻底…...
接手遗留系统第一周,我做了三件事,团队从此不再怕改老代码
刚跳槽到新公司,技术总监在入职谈话时递给我一杯咖啡,语气沉重地说:“我们最核心的交易系统已经跑了八年,负责它的老张去年离职了。现在整个团队没人敢动里面的代码,每次改需求都像在拆炸弹。”他停顿了一下࿰…...
轻量级文本处理引擎Tokely:从分词到模型推理的部署与优化实战
1. 项目概述与核心价值最近在折腾一些个人项目,经常需要处理文本生成、内容摘要这类任务。市面上现成的API服务虽然方便,但成本、隐私和定制化程度总让人不太放心。于是,我开始寻找一个能自己部署、轻量且功能聚焦的文本处理工具。在这个过程…...
Svelte动态光标实现:提升Web应用交互体验的完整方案
1. 项目概述:一个为Svelte应用注入灵魂的交互光标在Web应用的世界里,细节决定体验。我们早已习惯了那个千篇一律的箭头指针,它精准、高效,但缺乏情感和上下文。当用户点击一个按钮、悬停在一个链接上,或者在一个可拖拽…...
