Atitit 通用接口的设计与实现attilax 总结
2017-03-05 00:11
405 查看
Atitit 通用接口的设计与实现attilax 总结
1.1. 现存的情况1
1.2. 接口返回类型,与返回序列化格式1
1.3. 异常传递 代替返回值模式1
1.4. 通用接口原理1
1.5. Autoit Autohotkey的模式2
1.6. 通用版全功能接口http param模式 范例 ( 可以运用于任何场合)2
1.7. 通用版数据sql接口 (快速开发接口,适用与内部人员操作模块)3
1.8. 通用版数据sp存储过程调用接口 (快速开发接口,适用于任何场合)3
1.9. 核心代码4
1.10. 未来的展望 dsl 模式5
需要一个通用接口,,每增加一个子接口,无需做任何的配置和注解
其次对于数据库操作,3gl接口比较繁琐 ,增加了4gl dsl sql sp接口
其次,接口的返回值模型。。可以使用异常模型代替
返回序列化格式,即是结果使用什么样的序列化返回结果。。支持json ,预计还要支持xml yaml
异常序列化为指定的序列化格式返回,传递给调用端。。
类似 pinvoke , jna 模式
AutoIt中的参数类型与Win32 API中的参数类型不完全相同,这点要注意。
Autohotkey
Result := DllCall("[DllFile/]Function" [, Type1, Arg1, Type2, Arg2, "Cdecl ReturnType"])
createmode参数: 类的创建模式 默认为动态new创建模式
。静态类的方法调用 为static
动态类,默认值,或者使用new
m:或者method ,指明要调用的方法,全类名加方法名,比如com.attilax.rest.Class4test.m1
retType:返回数据类型int str map list obj等
retFmt:返回数据序列化格式,一般为json,也可以为none,xml,默认为json
P1_type :第一个参数类型 有str int 等,默认为str
P1:第一个参数
P2_type:第二个参数类型
P2:第二个参数
iocFac:ioc工厂:支持spring guice new 工厂模式,默认为com.attilax.rest.JavaNewCreatorFac
morennew 工厂模式为 com.attilax.rest.JavaNewCreatorFac
特点::
全功能接口。
开发效率不是最高
注意:此数据接口是为快速开发而设置的,直接使用sql dsl存取数据,方便快捷。适用于后端管理,以及内部管理系统模块,适用于用户特定以及内部用户的模块。不适用于面向广大不特定用户的模块。。
面向广大不特定用户的模块需要隐藏sql,传递sql语句id即可,具体的sql语句应该存储在存储过程,代码或者配置文件里面 。。需要使用存储过程接口或其他接口即可
特点::
开发效率貌似最高
非全功能接口,只针对数据操作接口。其次,不适用于面向公众人员使用的模块。
http://localhost:8080/AjaxJsbridge_HttpparamMode_servlet?m=com.attilax.db.DbServiceV4qb9.executeQuery&p1=call+%60sp_%E6%9F%A5%E8%AF%A2%E7%94%A8%E6%88%B7%60%28%27mer%27%29&iocFac=com.attilax.ioc.Ioc4other
即是p1参数为 call `sp_查询用户`('mer')。。 ,注意url参数的urlencode编码
特点::
开发效率较高
非全功能接口,只针对数据操作接口。
第二发展,支持方法链
作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher
捕鸟王"Bird Catcher kok 虔诚者Pious 宗教信仰捍卫者 Defender Of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak 万兽之王
简称:: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴
全名::Emir Attilax Akbar bin Mahmud bin attila bin Solomon bin adam Al Rapanui 埃米尔 阿提拉克斯 阿克巴 本 马哈茂德 本 阿提拉 本 所罗门 本亚当 阿尔 拉帕努伊
常用名:艾提拉(艾龙), EMAIL:1466519819@qq.com
头衔:uke总部o2o负责人,全球网格化项目创始人,
uke交友协会会长 uke捕猎协会会长 Emir Uke部落首席大酋长,
uke宗教与文化融合事务部部长, uke宗教改革委员会副主席
uke制度与重大会议委员会委员长,uke保安部首席大队长,uke制度检查委员会副会长,
uke 首席cto 软件部门总监 技术部副总监 研发部门总监主管 产品部副经理 项目部副经理 uke科技研究院院长 uke软件培训大师
uke波利尼西亚区大区连锁负责人 汤加王国区域负责人 uke克尔格伦群岛区连锁负责人,莱恩群岛区连锁负责人,uke布维岛和南乔治亚和南桑威奇群岛大区连锁负责人
Uke软件标准化协会理事长理事长 Uke 数据库与存储标准化协会副会长
uke终身教育学校副校长 Uke医院 与医学院方面的创始人
uec学院校长, uecip图像处理机器视觉专业系主任 uke文档检索专业系主任
Uke图像处理与机器视觉学院首席院长
Uke 户外运动协会理事长 度假村首席大村长 uke出版社编辑总编
转载请注明来源:attilax的专栏 ?http://www.cnblogs.com/attilax/
--Atiend v8
1.1. 现存的情况1
1.2. 接口返回类型,与返回序列化格式1
1.3. 异常传递 代替返回值模式1
1.4. 通用接口原理1
1.5. Autoit Autohotkey的模式2
1.6. 通用版全功能接口http param模式 范例 ( 可以运用于任何场合)2
1.7. 通用版数据sql接口 (快速开发接口,适用与内部人员操作模块)3
1.8. 通用版数据sp存储过程调用接口 (快速开发接口,适用于任何场合)3
1.9. 核心代码4
1.10. 未来的展望 dsl 模式5
1.1. 现存的情况
接口不够通用,每增加一个接口,就需要增加一个配置或者注解。需要一个通用接口,,每增加一个子接口,无需做任何的配置和注解
其次对于数据库操作,3gl接口比较繁琐 ,增加了4gl dsl sql sp接口
其次,接口的返回值模型。。可以使用异常模型代替
1.2. 接口返回类型,与返回序列化格式
返回类型类型就是str int等,支持复杂格式map list,以及对象。返回序列化格式,即是结果使用什么样的序列化返回结果。。支持json ,预计还要支持xml yaml
1.3. 异常传递 代替返回值模式
异常拥有比返回值更好的处理模式。异常序列化为指定的序列化格式返回,传递给调用端。。
1.4. 通用接口原理
直接指明要调用的类与方法名。后台通过反射的模式调用。。类似 pinvoke , jna 模式
1.5. Autoit Autohotkey的模式
DllCall ( "dll", "返回值类型", "函数名称" [, 类型1, 参数1[, 类型n, 参数n]] )AutoIt中的参数类型与Win32 API中的参数类型不完全相同,这点要注意。
Autohotkey
Result := DllCall("[DllFile/]Function" [, Type1, Arg1, Type2, Arg2, "Cdecl ReturnType"])
1.6. 通用版全功能接口http param模式 范例 ( 可以运用于任何场合)
http://localhost:8080/AjaxJsbridge_HttpparamMode_servlet?m=com.attilax.rest.Class4test.m1&p1=123createmode参数: 类的创建模式 默认为动态new创建模式
。静态类的方法调用 为static
动态类,默认值,或者使用new
m:或者method ,指明要调用的方法,全类名加方法名,比如com.attilax.rest.Class4test.m1
retType:返回数据类型int str map list obj等
retFmt:返回数据序列化格式,一般为json,也可以为none,xml,默认为json
P1_type :第一个参数类型 有str int 等,默认为str
P1:第一个参数
P2_type:第二个参数类型
P2:第二个参数
iocFac:ioc工厂:支持spring guice new 工厂模式,默认为com.attilax.rest.JavaNewCreatorFac
morennew 工厂模式为 com.attilax.rest.JavaNewCreatorFac
特点::
全功能接口。
开发效率不是最高
1.7. 通用版数据sql接口 (快速开发接口,适用与内部人员操作模块)
http://localhost:8080/AjaxJsbridge_HttpparamMode_servlet?m=com.attilax.db.DbServiceV4qb9.executeQuery&p1=select+*+from+ecs_users+limit+10&iocFac=com.attilax.ioc.Ioc4other注意:此数据接口是为快速开发而设置的,直接使用sql dsl存取数据,方便快捷。适用于后端管理,以及内部管理系统模块,适用于用户特定以及内部用户的模块。不适用于面向广大不特定用户的模块。。
面向广大不特定用户的模块需要隐藏sql,传递sql语句id即可,具体的sql语句应该存储在存储过程,代码或者配置文件里面 。。需要使用存储过程接口或其他接口即可
特点::
开发效率貌似最高
非全功能接口,只针对数据操作接口。其次,不适用于面向公众人员使用的模块。
1.8. 通用版数据sp存储过程调用接口 (快速开发接口,适用于任何场合)
调用存储过程mysql,即是使用特定sql语句,call 调用存储过程即可,比如call `sp_查询用户`('mer')。。http://localhost:8080/AjaxJsbridge_HttpparamMode_servlet?m=com.attilax.db.DbServiceV4qb9.executeQuery&p1=call+%60sp_%E6%9F%A5%E8%AF%A2%E7%94%A8%E6%88%B7%60%28%27mer%27%29&iocFac=com.attilax.ioc.Ioc4other
即是p1参数为 call `sp_查询用户`('mer')。。 ,注意url参数的urlencode编码
特点::
开发效率较高
非全功能接口,只针对数据操作接口。
1.9. 核心代码
@Override public void service(ServletRequest req, ServletResponse response) { try { HttpServletRequest req2 = (HttpServletRequest) req; Global.req.set(req2); String iocx =get_iocFac( req.getParameter("iocFac")); String class_meth_full = (getMeth(req)); String cls =refx.getClassName(class_meth_full); String meth_name=refx.getMethodName(class_meth_full); Class c = Class.forName(cls); List<Object> params = Lists.newArrayList(); for (int i = 1; i < 7; i++) { String pname = "p" + i; if (req.getParameter(pname) == null) continue; String p = req.getParameter(pname); String ptype = getPtype(req, pname); Object p_obj=getP(p,ptype); params.add(p_obj); } Object[] p_a = params.toArray(); String createmode =req.getParameter("createmode"); Object rzt; if(isStaticMode(createmode)) { rzt = MethodUtils.invokeStaticMethod(c, meth_name, p_a); } else//def is new { Object cls_obj = com.attilax.reflect.MethodUtils.invokeStaticMethod(iocx, "getBean", c); rzt = MethodUtils.invokeMethod(cls_obj, meth_name, p_a); } System.out.println(rzt); // Object r = new DslParser().parseV3(req2.getParameter("dsl")); if (req.getParameter("retFmt") != null) { if (req.getParameter("retFmt").equals("json")) response.getWriter().println(AtiJson.toJson(rzt)); // �벻Ҫ�Ļ�ɾ�� } else response.getWriter().println(rzt.toString()); // �벻Ҫ�Ļ�ɾ�� } catch (Exception e) { logger.error("--err", e); logger.error("--err2", AtiJson.toJson(e)); filex.save_safe(core.getTrace(e), "c:\\0rechglog\\" + filex.getUUidName() + ".log"); ExUtil.throwExV2(e); } } |
1.10. 未来的展望 dsl 模式
直接支持java表达式,http://xxxxxx/api?dsl=new com.xxx.userservice().reg()第二发展,支持方法链
作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher
捕鸟王"Bird Catcher kok 虔诚者Pious 宗教信仰捍卫者 Defender Of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak 万兽之王
简称:: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴
全名::Emir Attilax Akbar bin Mahmud bin attila bin Solomon bin adam Al Rapanui 埃米尔 阿提拉克斯 阿克巴 本 马哈茂德 本 阿提拉 本 所罗门 本亚当 阿尔 拉帕努伊
常用名:艾提拉(艾龙), EMAIL:1466519819@qq.com
头衔:uke总部o2o负责人,全球网格化项目创始人,
uke交友协会会长 uke捕猎协会会长 Emir Uke部落首席大酋长,
uke宗教与文化融合事务部部长, uke宗教改革委员会副主席
uke制度与重大会议委员会委员长,uke保安部首席大队长,uke制度检查委员会副会长,
uke 首席cto 软件部门总监 技术部副总监 研发部门总监主管 产品部副经理 项目部副经理 uke科技研究院院长 uke软件培训大师
uke波利尼西亚区大区连锁负责人 汤加王国区域负责人 uke克尔格伦群岛区连锁负责人,莱恩群岛区连锁负责人,uke布维岛和南乔治亚和南桑威奇群岛大区连锁负责人
Uke软件标准化协会理事长理事长 Uke 数据库与存储标准化协会副会长
uke终身教育学校副校长 Uke医院 与医学院方面的创始人
uec学院校长, uecip图像处理机器视觉专业系主任 uke文档检索专业系主任
Uke图像处理与机器视觉学院首席院长
Uke 户外运动协会理事长 度假村首席大村长 uke出版社编辑总编
转载请注明来源:attilax的专栏 ?http://www.cnblogs.com/attilax/
--Atiend v8
相关文章推荐
- Atitit 通用接口的设计与实现attilax 总结
- Atitit 通用接口的设计与实现attilax 总结
- Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
- Atitit 数据库与存储引擎设计与实现 attilax总结 1.1. 数据库的实现有很多种, 遵循一些理论规范,如 Fix Rules、Write-Ahead Log、Force-log-at-
- Atitit (Sketch Filter)素描滤镜的实现 图像处理 attilax总结
- Atitit 修改密码的功能流程设计 attilax总结
- Atitit (Sketch Filter)素描滤镜的实现 图像处理 attilax总结v2
- atitit.项目设计模式---ioc attilax总结
- Atitit 修改密码的功能流程设计 attilax总结
- atitit.attilax.com产品 软件项目通用框架类库总结
- atitit.项目设计模式---ioc attilax总结
- atitit。浏览器缓存机制 and 微信浏览器防止缓存的设计 attilax 总结
- Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结
- Atitit (Sketch Filter)素描滤镜的实现 图像处理 attilax总结
- atitit.导出excel的设计----查询结果 导出为excel的实现java .net php 总结
- Atitit 订单处理原理与功能设计attilax总结
- Atitit.自定义存储引擎的接口设计 api 标准化 attilax 总结 mysql
- atitit.html编辑器的设计要点与框架选型 attilax总结
- Atitit.java c#这类编程语言的设计失败点attilax总结
- Atitit 发帖机实现(4 )- usbQBM1601 gui操作标准化规范与解决方案attilax总结