在这样的一个设想中,在线编辑器(前端部分,如http://runjs.cn/)的实现应该不是大的问题,后端涉及业务逻辑保存数据诸多功能,比如说J2EE就是干这个事的。呃,换个直指本质思路。
http://www.oschina.net/news/36941
–> select * from news where id=36941
对比上面,无非是将url转换为sql然后取其执行结果,再加上html/css/js之类的包装展现在我们现前。后台开发人员说穿了就在做这件事!
那么,我们能否更狠一些,扔掉JAVA,直接就建一个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}
我是这么想的,在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写到客户端。
如果单纯只是映射,执行Sql,未免心理太不踏实了。我设计是这样的,数据校验->拦截器->sql/js
.
数据校验,也是用JS实现的,如果校验失败,返回json中code=-2.可关注vsame
拦截器,用正则匹配拦截的URL.js处理具体逻辑,返回code!=0表示拦截。
sql/js. 目前一个url仅支持执行一个Sql,通过js,可以执行多个Sql且可以写一些代码.
参考图:
参考编码约定:每一个*.json
请求必然会返回 code
和 msg
这两个字段
code = 0: 正确返回
code > 0: 业务---调用API时发生错误。
-20 <= code <= -1: 基础错误。
code <-50: 其它系统内部错误。
====================基础================
-1 服务器内部错误(500)
-2 请求参数无效。错误消息里会给出具体哪个参数不合法以及原因。(通常是数据校验,如果是登录,可自行构建错Map传参)
-3 无API访问权限。
-4 IP没有权限。
-5 API不存在。
-6 访问频率超限
<=-50 系统内部错误。
====================业务===============
1 用户未登录
在web端,我使用了jQuery.tmpl作为前端模板技术,类似于Jsp\veloycity。只不过把模板技术写在前台了。
嗯,前端还是比较薄弱,前两天买了本《JavaScript Web富应用开发》,正在抽时间读。
如果你觉的 url2sql
还不错,移步投票页面支持一下
原博文链接:http://my.oschina.net/gaollg/blog/103629