WebAPI接口对接

本文总结了WebAPI接口对接的经验,包括数据对象模型的建立、规范定义、请求方法统一以及C#中ASCII排序处理。接口的Request和Response对象分别独立,定义统一的父类,并介绍了一个具体的接口请求和响应示例。文中还讨论了DO、DTO和VO的命名规则,并展示了如何进行ASCII排序以生成签名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WebAPI接口对接:

提示:此片文章是总结接口对接经验其中包括模型的建立以及统一的调用


学习内容:

  1. 数据对象模型的建立
  2. 如何规范定义模型
  3. 统一的请求方法
  4. 系统中model的命名
  5. 请求接口时ASCII排序的处理

  • 数据对象的建立

接口的数据传输对象包括Request对象和Response对象
在这里插入图片描述
每一个接口都单独建立一个文件夹
在这里插入图片描述

  • 规范定义模型

定义一个统一的父类(这是Request的统一父类)
GetApi方法是用于获取接口请求路径用的 (这里要注意Request是继承ResPonse的)
在这里插入图片描述

这里是Response的父类,父类中又接口的公用属性,每个接口返回都又这些参数。

在这里插入图片描述
接下来我们来看一个接口的返回和请求类

请求数据传输对象
在这里插入图片描述
返回数据对象
在这里插入图片描述

  • 统一的请求方法

![在这里插入图片描述](https://img-blog.csdnimg.cn/eff350a6f86143ecaf856f2443f6d3e6.png
当然你有可以继承这个请求方法的接口去根据每一个接口的需求重写它
例如
在这里插入图片描述

其实这种写法用到的领域驱动设计

系统中model的命名规则

关于DO,DTO和VO在项目

DO:对应数据库表结构

VO:一般用于前端展示用

DTO:用于数据传递(接口入参和接口返回值都可以)


C#请求接口时需要进行ASCII排序

这种需求一般都是在对接接口时签名会需要这样处理
这种情况我们一般都是通过数据字典进行数据处理。

//这里就是传入对象进行ASCII排序然后加密。作为签名
  public static string GetSigin(object Params)
        {
            Dictionary<string, string> paramsMap = GetProperties(Params);
            //这里是因为我的请求对象里包含了sgin这个属性,而签名不能出现这个属性所有需要进行删除。
            paramsMap.Remove("sign");
            var vDic = (from objDic in paramsMap orderby objDic.Key ascending select objDic);
            StringBuilder str = new StringBuilder();
            foreach (KeyValuePair<string, string> kv in vDic)
            {
                string pkey = kv.Key;
                string pvalue = kv.Value;
                str.Append(pkey + "=" + pvalue + "&");
            }
            String result = str.ToString().Substring(0, str.ToString().Length - 1);
            //RSAWithSha256加密方法
            return RSAWithSha256.SignPrivate(result);
        }


//这里是通过反射获取对象里面的属性
 public static Dictionary<string, string> GetProperties<T>(T t)
        {
            Dictionary<string, string> ListStr = new Dictionary<string, string>();
            if (t == null)
            {
                return ListStr;
            }
            System.Reflection.PropertyInfo[] properties = t.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
            if (properties.Length <= 0)
            {
                return ListStr;
            }
            foreach (System.Reflection.PropertyInfo item in properties)
            {
                string name = item.Name; //名称
                object value = item.GetValue(t, null);  //值

                if (item.PropertyType.IsValueType || item.PropertyType.Name.StartsWith("String"))
                {
                    ListStr.Add(name, (value ?? "").ToString());
                }
                else
                {
                    ListStr.Add(name, JsonConvert.SerializeObject(value));
                }
            }
            return ListStr;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李袁明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值