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

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=123

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

特点::

全功能接口。

开发效率不是最高

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 总结的更多相关文章

  1. atitit。流程图的设计与制作 attilax 总结

    atitit.流程图的设计与制作 attilax 总结 1. 流程图的规范1 2. 绘图语言2 2.1. atitit.CSDN-markdown编辑器2 2.2. js-sequence-diagr ...

  2. atitit。流程图的设计与制作&#160;attilax&#160;总结

    atitit.流程图的设计与制作 attilax 总结 1. 流程图的规范1 2. 画图语言2 2.1. atitit.CSDN-markdown编辑器2 2.2. js-sequence-diagr ...

  3. Atitit.自定义存储引擎的接口设计 api 标准化 attilax 总结  mysql

    Atitit.自定义存储引擎的接口设计 api 标准化 attilax 总结  mysql 1. 图16.1:MySQL体系结构1 2. 16.7. 创建表create()虚拟函数:2 3. 16.8 ...

  4. Atitit..状态机与词法分析  通用分词器 分词引擎的设计与实现 attilax总结

    Atitit..状态机与词法分析  通用分词器 分词引擎的设计与实现 attilax总结 1. 状态机 理论参考1 2. 词法分析理论1 3. 词法分析实例2 4. ---code fsm 状态机通用 ...

  5. Atitit.java c#这类编程语言的设计失败点attilax总结

    Atitit.java c#这类编程语言的设计失败点attilax总结 1. Npe1 2. Api粒度过小而又没有提供最常用模式1 3. checked exception(jeig n jyejy ...

  6. atitit.html编辑器的设计要点与框架选型 attilax总结

    atitit.html编辑器的设计要点与框架选型 attilax总结 1. html编辑器的设计要求1 1.1. 障碍訪问 1 1.2. 强大Ajax上传 1 1.3. Word完美支持 2 1.4. ...

  7. ATITIT.翻译模块的设计与实现 api attilax 总结

    ATITIT.翻译模块的设计与实现 api attilax 总结 1. 翻译原理1 2. TMX格式是国际通用格式(xml)1 2.1. 方法/步骤2 3. TRADOS2 4. ATITIT.翻译软 ...

  8. Atitit.数据库分区的设计 attilax  总结

    Atitit.数据库分区的设计 attilax  总结 1. 分区就是分门别类的文件夹 (what)1 2. 分区的好处(y)1 3. 分区原则(要不要分区,何时分区)how2 4. 主要的分表类型有 ...

  9. Atitit.面向接口的web 原理与设计重写 路由启动绑定配置url router rewriting urlpage  mvc mvp的 java c#.net php js

    Atitit.面向接口的web 原理与设计重写 路由启动绑定配置url router rewriting urlpage  mvc mvp的 java c#.net php js 原理 通过vm带入启 ...

随机推荐

  1. cocos2d-js 越来越慢的定时器schedule 制作不变慢的定时器

    对于动画控制,可能一点误差,大家不会察觉,但如果多次循环累积或网络同步等,大家就会很清楚意识到schedule的误差问题. 首先做一个例子证明一下: var InaccuracyTestLayer = ...

  2. js 正则表达式校验必须包含字母、数字、特殊字符

      1.情景展示 在注册时,密码要求必须同时包含:字母.数字.特殊字符,如何实现? 2.原因分析 用正则表达式进行校验,是最方便的! 3.解决方案 // 密码必须由 8-64位字母.数字.特殊符号组成 ...

  3. 代理服务 SQUID 测试

    第一部分:SQUID基础 Squid代理服务的基本配置: http_port 3128                    #设置监听的IP与端口号 cache_mem 64 MB          ...

  4. 老古董---ASP.NET中aspx页面runat="server"

    自从 mvc3 被广泛的推进生产环境后,这个runat="server" 慢慢被人遗忘了... asp.net 的 webForm 基于控件的 html  渲染过程是否还记得呢?是 ...

  5. Centos6下编译安装gcc6.4.0

    Centos6自带的gcc4.4.7不支持c++11, 于是编译安装最新版的gcc wget https://gmplib.org/download/gmp/gmp-6.1.2.tar.xz .tar ...

  6. Centos下和Win7下查看端口占用情况

    Centos #会列出所有正在使用的端口及关联的进程/应用 netstat -nap #portnumber要用具体的端口号代替,可以直接列出该端口听使用进程/应用 lsof -i :portnumb ...

  7. 第十九章,指针小练习(C++)

    #include <iostream> int main(int argc, char** argv) { int i = 1; int *n ; n=&i;//*n=i 这样的赋 ...

  8. [转载]RHEL-6启动时提示:“/usr/libexec/gconf-sanit

    原文地址:RHEL-6启动时提示:"/usr/libexec/gconf-sanity-check-2 exited with status 256"作者:huage 系统环境:R ...

  9. 原创工具binlog2sql:从MySQL binlog得到你要的SQL

    从MySQL binlog得到你要的SQL.根据不同设置,你可以得到原始SQL.回滚SQL.去除主键的INSERT SQL等. 用途 数据回滚 主从切换后数据不一致的修复 从binlog生成标准SQL ...

  10. C语言终极面试及答案分析

    第一部分:基本概念及其它问答题 .关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: ). 在函数体,一个被声明为静态的变量在这一函数 ...