1.目的:由于接口众多,服务端变更接口,会造成服务停用更新,造成客户端不能使用或报错,
在此评估【Web中心】此服务端,接口接口参数增加或减少,是否对客户端造成影响
2.评估内容:服务端增加单值参数,服务端减少单个值参数,Mod对象增加参数,Mod对象减少参数,
(而Json数据类型在此不作评估内容,是因为Json对象反序列化具有很好的伸缩型,不会影响客户端调用方)
3.附PCB工程系统集成示意图:
一.Web服务端增加单个值参数
改前-- 服务端(1个参数):
/// <summary> /// 测试Web接口(单值参数) /// </summary> /// <param name="ar1"></param> /// <returns></returns> public string getInfoTest(string ar1) { return $"getInfoTest传参测试{ar1}"; }
客户端调用(1个参数):
string result = WebOrc2_.getInfoTest("1"); // 返回: getInfoTest传参测试1
改后-- 服务端(2个参数)---增加参数:
/// <summary> /// 测试Web接口(单值参数) /// </summary> /// <param name="ar1"></param> /// <returns></returns> public string getInfoTest(string ar1, int ar2) { return $"getInfoTest传参测试{ar1}___{ar2}"; }
客户端调用(1个参数)---客户端不更新接口引用:
string result = WebOrc2_.getInfoTest("1"); // 返回: getInfoTest传参测试1___0
小结:对于服务端接口增加单值参数后,是不会造成客户端调用报错的,服务端对于增加的参数初始值处理:如:int初始0, string初始null
二. Web服务端减少单个值参数
改前-- 服务端(2个参数):
/// <summary> /// 测试Web接口(单值参数) /// </summary> /// <param name="ar1"></param> /// <returns></returns> public string getInfoTest(string ar1, int ar2) { return $"getInfoTest传参测试{ar1}___{ar2}"; }
客户端调用(2个参数):
string result = WebOrc2_.getInfoTest("1",2); // 返回: getInfoTest传参测试1___2
改后-- 服务端(1个参数):
/// <summary> /// 测试Web接口(单值参数) /// </summary> /// <param name="ar1"></param> /// <returns></returns> public string getInfoTest(string ar1) { return $"getInfoTest传参测试{ar1}"; }
客户端调用(2个参数)---客户端不更新接口引用:
string result = WebOrc2_.getInfoTest("1",2); // 返回: getInfoTest传参测试1
小结:对于服务端接口减少单值参数后,是不会造成客户端调用报错的
三. Web服务端增加Mod参数
改前-- 服务端(Mod类1个参数):
/// <summary> /// 测试Web接口(单值参数) /// </summary> /// <param name="ar1"></param> /// <returns></returns> public string getInfoTest(ModTest mod) { return $"getInfoTest传参测试{mod.ar1}"; } public class ModTest { public string ar1 { get; set; } }
客户端调用(Mod类1个参数):
ModTest mod_ = new ModTest(); mod_.ar1 = "1"; string result = WebOrc2_.getInfoTest(mod_); // 返回: getInfoTest传参测试1
改后-- 服务端(Mod类2个参数)---增加参数:
/// <summary> /// 测试Web接口(单值参数) /// </summary> /// <param name="ar1"></param> /// <returns></returns> public string getInfoTest(ModTest mod) { return $"getInfoTest传参测试{mod.ar1}__{mod.ar2}"; } public class ModTest { public string ar1 { get; set; } public string ar2 { get; set; } }
客户端调用(Mod类1个参数)--客户端不更新接口引用:
ModTest mod_ = new ModTest(); mod_.ar1 = "1"; string result = WebOrc2_.getInfoTest(mod_); // 返回: getInfoTest传参测试1__
小结:对于服务端接口Mod减少参数后,是不会造成客户端调用报错的,服务端对于增加的参数初始值处理:如:int初始0, string初始null
四.Web服务端减少Mod参数
改前-- 服务端(Mod类2个参数):
/// <summary> /// 测试Web接口(单值参数) /// </summary> /// <param name="ar1"></param> /// <returns></returns> public string getInfoTest(ModTest mod) { return $"getInfoTest传参测试{mod.ar1}__{mod.ar2}"; } public class ModTest { public string ar1 { get; set; } public string ar2 { get; set; } }
客户端调用(Mod类2个参数):
ModTest mod_ = new ModTest(); mod_.ar1 = "1"; mod_.ar2 = "2"; string result = WebOrc2_.getInfoTest(mod_); // 返回: getInfoTest传参测试1__2
改后-- 服务端(Mod类1个参数):
/// <summary> /// 测试Web接口(单值参数) /// </summary> /// <param name="ar1"></param> /// <returns></returns> public string getInfoTest(ModTest mod) { return $"getInfoTest传参测试{mod.ar1}"; } public class ModTest { public string ar1 { get; set; } }
客户端调用(Mod类2个参数)--客户端不更新接口引用:
ModTest mod_ = new ModTest(); mod_.ar1 = "1"; mod_.ar2 = "2"; string result = WebOrc2_.getInfoTest(mod_); // 返回: getInfoTest传参测试1
小结:对于服务端接口Mod类减少参数后,是不会造成客户端调用报错的