zoukankan      html  css  js  c++  java
  • 标准化接口系统改造

    标准接口在系统设计过程中发挥着重要的作用,特别是在各个平台的交互中,统一规范的接口标准大大减少了开发人员的工作时间。下面让我们来开开通用权限管理系统的标准接口

    标准化接口输出改造 标准输出类:

    //-----------------------------------------------------------------
    // All Rights Reserved , Copyright (C) 2016 , Hairihan TECH, Ltd.  
    //-----------------------------------------------------------------
    
    using System;
    
    namespace DotNet.Utilities
    {
        /// <summary>
        /// BaseResult  JsonResult<T>
        /// 
        /// 修改记录
        /// 
        ///        2016.08.19 版本:2.2 SongBiao 增加 公共方法 方法。
        ///        2016.05.12 版本:2.1 JiRiGaLa 增加 Signature 数字签名。
        ///        2016.01.07 版本:2.0 JiRiGaLa 增加 RecordCount。
        ///        2015.11.16 版本:1.1 SongBiao 增加JsonResult<T> 泛型 可以带数据返回。
        ///        2015.09.16 版本:1.1 JiRiGaLa Result 修改为 Status。
        ///        2015.09.15 版本:1.0 JiRiGaLa 添加返回标准定义。
        ///        
        /// <author>
        ///        <name>JiRiGaLa</name>
        ///        <date>2016.05.12</date>
        /// </author> 
        /// </summary>
        [Serializable]
        public class BaseResult
        {
            /// <summary>
            /// 操作是否成功
            /// 2015-09-16 吉日嘎拉 按宋彪建议进行修正
            /// </summary>
            public bool Status = false;
    
            /// <summary>
            /// 返回值
            /// </summary>
            public string ResultValue = "";
    
            /// <summary>
            /// 返回状态代码
            /// </summary>
            public string StatusCode = "UnknownError";
    
            /// <summary>
            /// 返回消息内容
            /// </summary>
            public string StatusMessage = "未知错误";
    
            /// <summary>
            /// 查询分页数据时返回记录条数用
            /// </summary>
            public int RecordCount = 0;
    
            /// <summary>
            /// 数字签名(防止篡改)
            /// </summary>
            public string Signature = string.Empty;
    
            /// <summary>
            /// 默认是返回成功的结果
            /// 2016-08-02 吉日嘎拉改进
            /// </summary>
            public BaseResult()
            {
                this.Status = true;
                this.StatusCode = Utilities.Status.OK.ToString();
                this.StatusMessage = Utilities.Status.OK.ToDescription();
            }
    
    
            /// <summary>
            /// 对登录的用户进行数字签名
            /// </summary>
            /// <param name="userInfo">登录信息</param>
            /// <returns>进行过数字签名的用户登录信息</returns>
            public string CreateSignature(BaseUserInfo userInfo)
            {
                if (userInfo != null)
                {
                    if (!string.IsNullOrEmpty(userInfo.Signature))
                    {
                        // 需要签名的内容部分
                        string dataToSign = userInfo.Signature + "_"
                            + ResultValue + "_"
                            + Status + "_"
                            + StatusCode + "_"
                            + BaseSystemInfo.SecurityKey + "_";
                        // 进行签名
                        Signature = SecretUtilBase.md5(dataToSign);
                    }
                }
    
                return Signature;
            }
    
            /// <summary>
            /// 对登录的用户进行数字签名
            /// </summary>
            /// <param name="userInfo">登录信息</param>
            /// <returns>进行过数字签名的用户登录信息</returns>
            public bool VerifySignature(BaseUserInfo userInfo)
            {
                bool result = false;
    
                if (userInfo != null)
                {
                    if (!string.IsNullOrEmpty(userInfo.Signature))
                    {
                        // 需要签名的内容部分
                        string dataToSign = userInfo.Signature + "_"
                            + ResultValue + "_"
                            + Status + "_"
                            + StatusCode + "_"
                            + BaseSystemInfo.SecurityKey + "_";
                        // 进行签名
                        result = Signature == SecretUtilBase.md5(dataToSign);
                    }
                }
    
                return result;
            }
    
            /// <summary>
            /// 输出成功消息
            /// </summary>
            /// <returns></returns>
            public static BaseResult Success(string message = null)
            {
                return new BaseResult()
                {
                    Status = true,
                    StatusMessage = message ?? "操作成功"
                };
            }
    
            /// <summary>
            /// 输出失败消息
            /// </summary>
            /// <returns></returns>
            public static BaseResult Fail(string message = null)
            {
                return new BaseResult()
                {
                    Status = false,
                    StatusMessage = message ?? "操作失败"
                };
            }
    
            /// <summary>
            /// 输出错误消息
            /// </summary>
            /// <returns></returns>
            public static BaseResult Error(string message = null)
            {
                return new BaseResult()
                {
                    Status = false,
                    StatusMessage = message ?? "系统错误"
                };
            }
    
    
            /// <summary>
            /// 输出异常消息
            /// </summary>
            /// <returns></returns>
            public static BaseResult Exception(string message = null)
            {
                return new BaseResult()
                {
                    Status = false,
                    StatusMessage = message ?? "系统异常"
                };
            }
    
        }
    
        /// <summary>
        /// Json格式带返回数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        [Serializable]
        public class JsonResult<T> : BaseResult
        {
            public T Data { get; set; }
    
        }
    }

    从上面类可以看出,根据需求接口可以输出带数据的信息。

    接口序列化帮助类:

        /// <summary>
        /// Json相关扩展方法。
        /// 
        /// 修改纪录
        /// 
        /// 2016-08-22 版本:1.0 LiuHaiYang 创建文件。
        /// 
        /// <author>
        ///     <name>LiuHaiYang</name>
        ///     <date>2016-08-22</date>
        /// </author>
        /// </summary>
    
        /// <summary>
        /// Json相关扩展方法。
        /// </summary>
        public static class  JsonUtil
        {
            static JavaScriptSerializer serializer = new JavaScriptSerializer();
            #region Json扩展
            /// <summary>
            /// 将对象转换为Json字串。
            /// </summary>
            /// <typeparam name="T">类型</typeparam>
            /// <param name="obj">对象实例。</param>
            /// <returns>Json字串</returns>
            public static string ToJson<T>(this T obj)
            {
                string ret = "";
                if (obj is string)
                {
                    ret = obj.ToString();
                }
                else
                {
                    //StringExtensions.ToJson(obj); 这个不可以 解析嵌套类
                    ret = serializer.Serialize(obj);
                }
                return ret;
            }
    
            /// <summary>
            /// 将Json字符串转换为Json对象。
            /// </summary>
            /// <typeparam name="T">类型</typeparam>
            /// <param name="json">Json字符串。</param>
            /// <returns>Json对象</returns>
            public static T FromJson<T>(this string json)
            {
                //return StringExtensions.FromJson<T>(json);  这个不可以 解析嵌套类
                return serializer.Deserialize<T>(json);
            }
            #endregion
        }

    调用举例:

    1、通过接口获取一个实体信息

            /// <summary>
            /// 获取区域实体
            /// </summary>
            /// <param name="context"></param>
            private void GetObject(HttpContext context)
            {
                JsonResult<BaseAreaEntity> jsonResult = new JsonResult<BaseAreaEntity>();
                try
                {
                    if (context.Request["id"] != null)
                    {
                        string id = context.Request["id"].ToString();
                        bool encrypted = false;
                        if (context.Request["encrypted"] != null)
                        {
                            encrypted = context.Request["encrypted"].Equals(true.ToString(), StringComparison.OrdinalIgnoreCase);
                        }
                        if (encrypted)
                        {
                            id = SecretUtil.Decrypt(id);
                        }
                        // BaseAreaManager areaManager = new BaseAreaManager();
                        // result = areaManager.GetObject(id);
                        // 2015-11-29 吉日嘎拉 从缓存获取数据,提高效率
                        BaseAreaEntity model = BaseAreaManager.GetObjectByCache(id);
                        jsonResult.Status = true;
                        jsonResult.RecordCount = 1;
                        jsonResult.StatusMessage = "获取成功。";
                        jsonResult.Data = model;
                    }
                }
                catch (Exception ex)
                {
                    jsonResult.Status = false;
                    jsonResult.StatusMessage = "异常:" + ex.Message;
                }
    
                string result = jsonResult.ToJson();
                context.Response.Write(result);
            }

    2、调用这个接口

            /// <summary>
            /// 获取区域
            /// </summary>
            /// <param name="userInfo"></param>
            /// <param name="id"></param>
            /// <returns></returns>
            public static BaseAreaEntity GetObject(BaseUserInfo userInfo, string id)
            {
                BaseAreaEntity result = null;
    
                string url = BaseSystemInfo.UserCenterHost + "/UserCenterV46/AreaService.ashx";
                WebClient webClient = new WebClient();
                NameValueCollection postValues = new NameValueCollection();
                postValues.Add("system", BaseSystemInfo.SoftFullName);
                postValues.Add("systemCode", BaseSystemInfo.SystemCode);
                postValues.Add("securityKey", BaseSystemInfo.SecurityKey);
                // 2015-11-25 吉日嘎拉,这里还是从缓存里获取就可以了,提高登录的效率。
                postValues.Add("function", "GetObject");
                postValues.Add("userInfo", userInfo.Serialize());
                postValues.Add("encrypted", true.ToString());
                postValues.Add("id", SecretUtil.Encrypt(id));
                // 向服务器发送POST数据
                byte[] responseArray = webClient.UploadValues(url, postValues);
                string response = Encoding.UTF8.GetString(responseArray);
                if (!string.IsNullOrEmpty(response))
                {
                    JsonResult<BaseAreaEntity> jsonResult = response.FromJson<JsonResult<BaseAreaEntity>>() as JsonResult<BaseAreaEntity>;
                    if (jsonResult != null)
                    {
                        result = jsonResult.Data;
                    }
                }
    
                return result;
            }
  • 相关阅读:
    AndRodi Strudio中的按钮时件
    Intent(三)向下一个活动传递数据
    Intent(二)隐式调用intent
    用PopupWindow做下拉框
    环形进度条
    Android Studio分类整理res/Layout中的布局文件(创建子目录)
    Android无需申请权限拨打电话
    使用ViewPager切换Fragment时,防止频繁调用OnCreatView
    定制 黑色描边、白色背景、带圆角 的背景
    Android 底部弹出Dialog(横向满屏)
  • 原文地址:https://www.cnblogs.com/hnsongbiao/p/5798758.html
Copyright © 2011-2022 走看看