zoukankan      html  css  js  c++  java
  • 关于Api返回内容形式的一点思考

    通常在写表单信息的展示接口时,会有这样的结构出现

    {
        "code"10000,
        "message""操作成功",
        "time""2021/5/18 17:16:16",
        "result": {
            "name""111",
            "phone""11111",
            "id_c_no""11111",
            "id_type""身份证",
            "birthday""2021年4月14日",
            "email""11111111@qq.com",
            "mail_pro""上海市徐汇区",
            "mail_add""上海市徐汇区天钥桥路路220号",
            "mail_re""田蕾",
            "mail_re_phone""11223344"
    }
    }

    这样写的缺点在于前端也必须建立模型进行接收,如果要增加新的展示信息,那么前后端都得同步修改。

    如果想让前端不动代码的情况下,后端在以上结构基础上,实现后端增加数据,而前端无需改动代码的结构。按照这个思路,就需要写一个集合的方式将写死的key值变成value,通过循环加载原来的name以及name对应的值,基于这个思路json格式改为一下内容:

    {
        "code": 10000,
        "message": "操作成功",
        "time": "2021/6/1 10:51:44",
        "result": {
            "data": [
                {
                    "name": "姓名",
                    "keys": "name",
                    "values": "xxxxx"
                },
                {
                    "name": "手机号",
                    "keys": "phone",
                    "values": "1871111111"
                },
                {
                    "name": "身份证",
                    "keys": "id_c_no",
                    "values": "1"
                },
                {
                    "name": "证件类型",
                    "keys": "id_type",
                    "values": "身份证"
                },
                {
                    "name": "生日",
                    "keys": "birthday",
                    "values": "2021年5月29日"
                },
                {
                    "name": "邮箱",
                    "keys": "email",
                    "values": "402"
                },
                {
                    "name": "邮寄省份",
                    "keys": "mail_pro",
                    "values": "陕西省-西安市-雁塔区"
                },
                {
                    "name": "邮寄地址",
                    "keys": "mail_add",
                    "values": "大寨路"
                },
                {
                    "name": "收件人",
                    "keys": "mail_r",
                    "values": "xxxx"
                },
                {
                    "name": "收件人电话",
                    "keys": "mail_r_phone",
                    "values": "18"
                }
            ]
        }
    }

    有了思路就动手实现,过程中用到的知识点:

           1、C#的反射机制,通过反射获取类属性集合,循环获取Name及Value值

           2、在类属性上定义DisplayAttribute属性,再通过方法获取Dispaly里定义的Name值,引用的命名空间:using System.ComponentModel.DataAnnotations;

    public class BaseInfoOutput
     {
        [Display(Name = "姓名")]
        public string name { get; set; }
    }

       

    //根据PropertyInfo 获取Display上定义的Name的值
    public
    static string GetDisplayName(this PropertyInfo property) { string displayName = property.GetTypeCustomValue<DisplayAttribute>(x => new { x.Name }); if (string.IsNullOrEmpty(displayName)) { return property.Name; } return displayName; }

        这样就能获取name,keys以及values三个关键信息,想要的结果集也出来了。

       

        需要注意的问题:

        对于一般的展示信息来说,values的类型string就够用了,但是如果values是集合,在给values赋值时需要转原来的对象集合转为json串,string就没办法很好的展示数据。 所以定义values的类型时建议写为object

        当然以上都是基于简单类型,如果再配合前端的控件样式、输入验证规则等内容,实现起来会更复杂一些,一种思路是可在数据库单独定义表单控件样式表,将表单的验证及展示形式信息页塞入到返回集合中

  • 相关阅读:
    [jQuery]无法获取隐藏元素(display:none)宽度(width)和高度(height)的新解决方案
    < meta > 元素(转)
    认识圣杯布局和双飞翼布局(转)
    条件注释判断浏览器版本<!--[if lt IE 9]>(转载)
    Kubernetes日志采集Sidecar模式介绍
    filebeat常见配置项梳理
    debin 安装容器安装工具 ​apt-get install telnet
    python-study-账号登录验证
    老板的三个忠告
    有趣的程序
  • 原文地址:https://www.cnblogs.com/yhnet/p/14845785.html
Copyright © 2011-2022 走看看