QuickWebApi2:使用Lambda方式,完成对WebApi的开发和调用-文档的生成
续 QuickWebApi:使用Lambda方式,完成对WebApi的开发和调用
上一篇完成了主要的功能,本次修订主要重构了对接口文档的生成规范,使之可读性更佳,甚至可以作为接口文档进行发布(当然,在部分细节上还不能满足接口文档的需要,不过对于开发者而言,已经足够)。
接口文档的描述增加了如下内容:
1:规范性,如缩进、分割、描述分类等
2:增加了对参数类型的说明
3:增加了输出结果的说明
4:增加了对于复杂的参数或结果类型的说明
为了完成以上的功能,在原有的基础上增加了一些功能代码:
首先是QuickWebApiAttribute标签增加了对输出结果类型的描述result_type,为了保证兼容性,所有增加的字段默认值均为null
public QuickWebApiAttribute(string service, string route, MethodType methodtype = MethodType.NONE, string name = null, string comment = null, Type result_type = null)
在原有的类中增加部分说明属性
public class WebApiMethod { public WebApiMethod() { Params = new List<WebApiMethodParam>(); } public string Code { get; set; } public MethodType Method { get; set; } public string Action { get; set; } public string Name { get; set; } public string Comment { get; set; } [NonSerialized] internal List<WebApiMethodParam> Params; //新增,保存接口参数信息 [NonSerialized] internal Type OutputType; //新增,保存接口输出类型信息 public string ParamsDesc() //新增 { if (Params.Count == 0) return "无参数"; StringBuilder sb = new StringBuilder(); foreach (var p in Params) { sb.AppendFormat("{0}:{1},{2},{3};", p.Name, p.TypeName, p.DefaultValue, p.Desc); } return sb.ToString(); } }
public class WebApiMethodParam
{
public string Desc { get; set; }
public string TypeName { get; set; }
public string Name { get; set; }
public string DefaultValue { get; set; }
public override string ToString()
{
return string.Format("{0}:{1},{2},{3};", Name, TypeName, DefaultValue, Desc);
}
}
然后是对说明进行解析,在代码上也没有什么新鲜的创意,方式主要是通过反射来获取,因为该代码只会在程序运行伊始执行一次,所以性能上没有做过多考量;只是在收集接口信息的时候,同时把相关的说明信息一并收集,然后为每个接口生成配置文件和说明文件。
由于代码量较大,且无新意,纯属频繁的反射、循环 和一些结构化后的字符串拼装,不在熬述。
可以查看最新的源码