文档章节

url2sql原始想法及参考实现

高雷
 高雷
发布于 2013/01/22 18:22
字数 1015
阅读 663
收藏 5

首先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

© 著作权归作者所有

高雷

高雷

粉丝 38
博文 7
码字总数 1995
作品 0
西安
程序员
私信 提问
加载中

评论(9)

songyouwei
songyouwei
很有新意!
幻影浪子
幻影浪子
挺有意思
高雷
高雷 博主

引用来自“JFinal”的评论

很有想法,支持一个,已投

QQQ
JFinal
JFinal
很有想法,支持一个,已投
高雷
高雷 博主

引用来自“wallace_lao”的评论

前端来影响实现业务,安全性问题值得考虑

@妖魔舞 目前只是个想法的实现。应该说和传统开法安全性相差不大,欢迎参与,共同改进。个人认为主要迈出两步:1,放弃后台模板技术(JSP,Veloycity...),改用前端模板技术。2,放弃后端控制器(如Struts),改用前端控制(一个页面明明它只有他自己知道每个链接指向哪?为何要Struts插一脚呢)
w
wallace_lao
前端来影响实现业务,安全性问题值得考虑
南湖船老大
南湖船老大
围观
李惟
李惟
排队围观
高雷
高雷 博主
@leeldy @李惟 @teleport @Leon°0.168 @黑暗教长 @宅男小何 @兔bug @leeldy url2sql原始想法及参考实现,移步一观
【Cloud Foundry 应用开发大赛】“Url2Sql”后端是前端的MySql

应用名称:Url2Sql 应用URL地址: 应用说明:本应用就是把复杂的后台代码转变为web页面可视化操作完成的工作。举例说,请求形如 的链接背后可能只是完成了一条形如的Sql。既然如此,为何每次...

高雷
2013/01/22
2.2K
19
大批量的IP地理位置查询如何保证性能问题?

最近做一个用户信息统计的课题,其中有一项是要根据来访者IP统计各个省份用户的流量信息。 网上有很多http接口实现ip位置查询,但是如果在统计的时候每个ip都连一次http获取位置在数据量大的...

kliyn
2014/04/24
584
7
Flutter学习中遇到的问题:已有项目加入Flutter模块

本文主要尝试解决如下几个问题: 如何在在已经项目加入Flutter 混合跳转 混合栈问题 混合栈数据问题 跳转黑屏是因为debug的缘故,打release包则没有。 1. 如何在在已经项目加入Flutter 直接参...

老实巴交的读书人
2018/09/24
0
0
c#如何处理自定义消息

C#自定义消息通信往往采用事件驱动的方式实现,但有时候我们不得不采用操作系统的消息通信机制,例如在和底层语言开发的DLL交互时,是比较方便的。下面列举了一些实现方式,以供参考。有关C...

橘子红了呐
2017/11/18
0
0
单链表复制你已经会了,如果我们再加个指针...

面试 18:复杂链表的复制(剑指 Offer 第 26 题) 在上一篇推文中,我们留下的习题是来自《剑指 Offer》 的面试题 26:复杂链表的复制。 请实现复杂链表的复制,在复杂链表中,每个结点除了 ...

nanchen2251
2018/08/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud Alibaba 实战(二) - 关于Spring Boot你不可不知道的实情

0 相关源码 1 什么是Spring Boot 一个快速开发的脚手架 作用 快速创建独立的、生产级的基于Spring的应用程序 特性 无需部署WAR文件 提供starter简化配置 尽可能自动配置Spring以及第三方库 ...

JavaEdge
今天
7
0
TensorFlow 机器学习秘籍中文第二版(初稿)

TensorFlow 入门 介绍 TensorFlow 如何工作 声明变量和张量 使用占位符和变量 使用矩阵 声明操作符 实现激活函数 使用数据源 其他资源 TensorFlow 的方式 介绍 计算图中的操作 对嵌套操作分层...

ApacheCN_飞龙
今天
7
0
五、Java设计模式之迪米特原则

定义:一个对象应该对其他对象保持最小的了解,又叫最小知道原则 尽量降低类与类之间的耦合 优点:降低类之间的耦合 强调只和朋友交流,不和陌生人说话 朋友:出现在成员变量、方法的输入、输...

东风破2019
昨天
23
0
jvm虚拟机结构

1:jvm可操作数据类型分为原始类型和引用类型,因此存在原始值和引用值被应用在赋值,参数,返回和运算操作中,jvm希望在运行时 明确变量的类型,即编译器编译成class文件需要对变量进行类型...

xpp_ba
昨天
5
0
聊聊nacos Service的processClientBeat

序 本文主要研究一下nacos Service的processClientBeat Service.processClientBeat nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java public class Service ex......

go4it
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部