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

SOME/IP 协议介绍(六)接口设计的兼容性规则

接口设计的兼容性规则(信息性)

对于所有序列化格式而言,向较新的服务接口的迁移有一定的限制。使用一组兼容性规则,SOME / IP允许服务接口的演进。可以以非破坏性的方式进行以下添加和增强:

• 向服务中添加新方法

• 必须先在服务器端实现。

• 将参数添加到方法的输入或输出参数的末尾

• 当接收者首先添加它们时,必须定义默认值

• 当发送者首先添加它们时,接收者将忽略它们

• 将异常添加到方法可以引发的异常列表中

• 应先更新客户端

• 如果异常未知,则需要抛出“未知异常”。但是,异常描述字符串可以复制过来。

• 向联合中添加新类型

• 应先更新接收者

• 如果未知,则可以跳过(发送方先更新)

• 为新方法定义新数据类型

• 为新方法定义新异常

并非所有这些更改都可以首先在客户端或服务器端引入。在某些情况下,只能首先更改客户端或服务器。例如,使用较新的实现发送附加参数时,旧实现只能跳过此参数。

例如,当消息的接收者添加要接收的新参数时,必须定义默认值。这在发送具有旧版本服务的发送方发送不带附加参数的消息时需要。

接口规范中的某些更改可以以非破坏性的方式实现:

• 删除函数中的参数

• 需要先在接收者端添加默认值,并且参数需要位于列表末尾

• 从函数中删除异常

• 服务器端很简单

• 如果遇到旧异常,客户端需要抛出“未知异常”

• 可以重命名参数、函数和服务,因为名称不会被传输。生成的代码只查看ID和参数排序,迁移中不应更改它们

如果接口规范配置结构体具有长度字段,则可以执行以下操作:

• 向结构体末尾添加/删除字段

目前不支持以下更改:

• 重新排序参数

• 将超类型替换为子类型(如面向对象编程语言中)

相关文章:

  • Linux进程——system函数、popen函数
  • windows排除故障工具pathping、MTR、sysinternals
  • 替换SlowFast中Detectron2为Yolov8
  • 信息系统项目管理师 第四版 第23章 组织通用管理
  • 大数据HCIE成神之路之数学(3)——概率论
  • phpStorm Xdebug调试 加FireFox浏览器
  • 在线生成含logo的彩色二维码工具
  • 如何解决msvcr100.dll丢失问题?5个实用的解决方法分享
  • SpringCloud-Gateway修改Response响应体,并解决大数据量返回不全等问题
  • C++中使用 min()函数/max()函数进行多数比较
  • EDA实验-----4*4矩阵键盘与数码管显示测试
  • LeetCode27.移除元素(暴力法、快慢指针法)
  • ROS 学习应用篇(八)ROS中的坐标变换管理之tf广播与监听的编程实现
  • Scalable Exact Inference in Multi-Output Gaussian Processes
  • 设计模式 -- 适配器模式(Adapter Pattern)
  • ----------
  • JavaScript 如何正确处理 Unicode 编码问题!
  •  D - 粉碎叛乱F - 其他起义
  • EOS是什么
  • isset在php5.6-和php7.0+的一些差异
  • java小心机(3)| 浅析finalize()
  • React系列之 Redux 架构模式
  • React组件设计模式(一)
  • Shell编程
  • 百度地图API标注+时间轴组件
  • 大主子表关联的性能优化方法
  • ​业务双活的数据切换思路设计(下)
  • "无招胜有招"nbsp;史上最全的互…
  • #includecmath
  • #Java第九次作业--输入输出流和文件操作
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #stm32整理(一)flash读写
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (007)XHTML文档之标题——h1~h6
  • (12)Linux 常见的三种进程状态
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (二)WCF的Binding模型
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (力扣)循环队列的实现与详解(C语言)
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三)docker:Dockerfile构建容器运行jar包
  • (五)关系数据库标准语言SQL
  • (一)基于IDEA的JAVA基础1
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转) ns2/nam与nam实现相关的文件
  • (转)linux 命令大全
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • (轉貼) UML中文FAQ (OO) (UML)
  • ./configure,make,make install的作用
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET DevOps 接入指南 | 1. GitLab 安装