url2sql原始想法及参考实现

首先YY一种前景,浏览器登录帐号,显示是一个简洁的IDE,编写保存刷新OK,网站完成。

在这样的一个设想中,在线编辑器(前端部分,如http://runjs.cn/)的实现应该不是大的问题,后端涉及业务逻辑保存数据诸多功能,比如说J2EE就是干这个事的。呃,换个直指本质思路。

http://www.oschina.net/news/36941 –> select * from news where id=36941

对比上面,无非是将url转换为sql然后取其执行结果,再加上html/css/js之类的包装展现在我们现前。后台开发人员说穿了就在做这件事!

那么,我们能否更狠一些,扔掉JAVA,直接就建一个url<-->sql之间的映射呢?

1,将URL转换为sql

/news –>select * from news where id=${id}

假设建立好如上映射关系,请求链接为http://www.oschina.net/news?id=36941,接下来的问题就是如何将url转化为sql呢,我的做法是利用正则取Sql
中的${id}, 然后从请求(request)中取得id的值,从而实现。

当然,可以支持Restful,建立如下映射,就可以实现http://www.oschina.net/news/36941的访问了。这一块的代码,很多地方借鉴了@jFinal

/news –>select * from news where id=${0}

2,给页面返回什么样的数据

我是这么想的,在PC端浏览器访问,更期望返回html+数据。而在其它形态的产品(如各种系统的客户端),似乎有点涉及跨设备,因此,只有json和xml两种可选。我倾向于json且目前也只实现了json版本。

这块代码借鉴了一些开放平台,如微博开放平台、天翼开放平台等。我做了如下约定,举例说明:

http://www.oschina.net/news/36941.json –>将Sql结果转为json返回,这是纯数据接口

http://www.oschina.net/news/36941.jsonp –>将数据以兼容jQuery方式的jsonp返回。提供这样的接口的目的是前后端独立并行开发,方便测试。

http://www.oschina.net/news/36941 –>这里借鉴了Bigpipe思想,具体的做法是:先在约定目录下找news.html,读出并写到客户端,然后执行Sql并将其结果(json)转为js写到客户端。

3,进阶

如果单纯只是映射,执行Sql,未免心理太不踏实了。我设计是这样的,数据校验->拦截器->sql/js.

数据校验,也是用JS实现的,如果校验失败,返回json中code=-2.可关注vsame

拦截器,用正则匹配拦截的URL.js处理具体逻辑,返回code!=0表示拦截。

sql/js. 目前一个url仅支持执行一个Sql,通过js,可以执行多个Sql且可以写一些代码.

参考图:

运行流程

参考编码约定:每一个*.json请求必然会返回 codemsg 这两个字段

code = 0: 正确返回
code > 0: 业务---调用API时发生错误。
-20 <= code <= -1: 基础错误。
code <-50: 其它系统内部错误。

====================基础================

-1   服务器内部错误(500)
-2   请求参数无效。错误消息里会给出具体哪个参数不合法以及原因。(通常是数据校验,如果是登录,可自行构建错Map传参)
-3   无API访问权限。
-4   IP没有权限。
-5   API不存在。
-6   访问频率超限
<=-50    系统内部错误。 

====================业务===============

1    用户未登录

4,前端

在web端,我使用了jQuery.tmpl作为前端模板技术,类似于Jsp\veloycity。只不过把模板技术写在前台了。
嗯,前端还是比较薄弱,前两天买了本《JavaScript Web富应用开发》,正在抽时间读。

5,后续

  • 自动化测试(*.json非常方便实现)
  • 多Sql语句支持
  • 相关前端js(数据校验功能)完善
  • 常用模块积累,如可视化创建表格,登录,微博呀

5,感谢阅读

如果你觉的 url2sql 还不错,移步投票页面支持一下

原博文链接:http://my.oschina.net/gaollg/blog/103629

你可能感兴趣的:(url2sql)