GoSqlGo 2.0 发布,HTML 里直接写 SQL 和业务代码

栏目: 软件资讯 · 发布时间: 3年前

内容简介:GoSqlGo是一个运行在服务端的工具,开启了GoSqlGo服务后,前端可以直接在前端写SQL和Java代码操作后端数据库,独立完成简单的CRUD功能开发,不需要后端参与 。在开发结束后再通过打包工具,将前端的SQL和代码布署...

GoSqlGo是一个运行在服务端的工具,开启了GoSqlGo服务后,前端可以直接在前端写 SQLJava 代码操作后端数据库,独立完成简单的CRUD功能开发,不需要后端参与 。在开发结束后再通过打包工具,将前端的SQL和代码布署到后端服务器以实现安全性。

GoSqlGo的竞品是GraphQL之类在可以在前端进行业务操作的工具,但区别在于:
1.GoSqlGo支持直接在前端写SQL,GraphQL不支持
2.GoSqlGo支持在前端写Java,GraphQL不支持。
3.GoSqlGo不存在API,而GraphQL之类 工具 基于API及文档。没有API的优点是消除了前后端勾通成本,前端直接存取数据库,相当于左手递东西右手来接,开发效率当然是最高的。 

例如下面这个示例中所有的页面展示和后端逻辑都写在一个html里,是个单页面应用,小小一段html包含了5次GoSqlGo远程AJAX调用,也就是说,省略了五个API和文档:

<!DOCTYPE html>
<html>
 <head>
 <script src="/js/jquery-1.11.3.min.js"></script>
 <script src="/js/jquery-ajax-ext.js"></script>
 <script src="/js/gosqlgo.js"></script>
 </head>
 <body>
    <script>document.write($java(`return new WebBox("/WEB-INF/menu.html");`)); </script>
    <h2>Transaction demo, use jQuery</h2>
    <script> 
	  function getUserListHtml(){
		  var users=$qryMapList(`select * from account where amount>=? order by id`,0);
		  var html="User List:<br/>";
		  for(var i=0;i<users.length;i++) 
			  html+="User ID:" +  users[i].ID+", AMOUNT:"+ users[i].AMOUNT+"<br/>"; 
	      return html;		   
	  }
	</script>
	<div id="msgid" class="msg"></div> 
	<section>
		<header>Account A</header>
		<div id="A" class="amount">
			<script>
				document.write($qryObject(`select amount from account where id=? and amount>=?`, 'A',0));
			</script>
		</div>
	</section>
	<section>
		<header>Account B</header>
		<div id="B" class="amount">
			<script>
			    account=$qryEntity(`com.demo.entity.Account, select * from account where id=?`, 'B');
				document.write(account.amount);
			</script>
		</div>
	</section>
	<script>
	  function transfer(from, to, money){ 
			var rst = $$javaTx(`
					int money = Integer.parseInt($3);
					if (money <= 0)
					     return new JsonResult(0, "Error: Illegal input.");
					Account a = new Account().setId($1).load();
					if (a.getAmount() < money)
					     return new JsonResult(0, "Error:No enough balance!");
					Account b = new Account().setId($2).load();
					a.setAmount(a.getAmount() - money).update();
					b.setAmount(b.getAmount() + money).update();
					    return new JsonResult(200, "Transfer success!").setDataArray(a.getAmount(), b.getAmount());
			        `, from,to,money); 
		  $("#msgid").text(rst.msg);	
		  if(rst.code==200) { 
	 	      $("#"+from).text(rst.data[0]);
	 	      $("#"+to).text(rst.data[1]);
	 	      $("#msgid").css("background", "#dfb");
		  }
		  else $("#msgid").css("background", "#ffbeb8");		  
		}
	</script>
	<section>
		<header>Transfer</header>
		<form onsubmit="return false" action="##" method="post">
			<input id="amount" name="amount" value="100" class="amount">
			<button name="btnA2B" value="true" onclick="transfer('A','B', $('#amount').val())">From account A to account B</button>
			<button name="btnB2A" value="true" onclick="transfer('B','A',$('#amount').val())">From account B to account A</button>
		</form>
	</section>
 </body>
</html>

GoSqlGo的适用场景:
最适用于快速、原型开发、业务逻辑简单、业务与页面高度绑定的场合。GoSqlGo是独立的服务,通常使用token进行签权,可以与任意项目混搭使用,可以开启一个或多个GoSqlGo服务器实现与页面绑定的、简单的CRUD工作、以及所有简单到中等复杂度的SQL查询。理论上只要开启了GoSqlGo服务,所有的查询操作都可以在前端独立完成,不需要后端 程序员 参与。

GoSqlGo不适用场景:
复杂的业务、需要考虑业务重用的方法、以及要实现特殊功能(如文件上传等)的方法不适用GoSqlGo。这些方法留给传统的开发方式去完成即可。
为什么复杂的业务不适用?很简单,因为目前GoSqlGo把Java写在前端,相当于创造了一个"真.Javascript"脚本语言,目前这个脚本语言还没有IDE支持,当代码量大时,省略掉API的时间将被缺少IDE这个缺点抵消。

本次更新内容:
1. 将GoSqlGo做成一个独立的产品,而不再是必须作为Servlet插件存在。见server目录,双击run_server.bat即可启动GoSqlGo服务,它自带了一个Undertow Web服务器,缺省运行在80端口。
2.添加了develop_token配置。develop_token仅用于开发阶段,在开发阶段,当前端没有或传来的develp_token与服务端不符时将拒绝访问,以实现开发阶段的安全性。
3.添加了token配置和TokenSecurity接口,用户必须编写一个实现了TokenSecurity接口的实例。通过token、GoSqlGo方法ID来进行任意GoSqlGo调用方法的权限检查。server目录中的演示项目包含了用户登录和权限检查的简单示例。
4.在返回的JSON字段中添加了debugInfo字段,也就是说JSON返回内容扩充为{code, msg, data, debugInfo} 4个字段 。debugInfo这个字段可以返回服务端错误,包括编译错误,对于前端来说,不需要重启远程的后端GoSqlGo服务器,只需要修改html再刷新就可以进行除错定位,见下面图片:

GoSqlGo 2.0 发布,HTML 里直接写 SQL 和业务代码

GoSqlGo相当于是一个DIY版的Serverless服务器。
在开发阶段,要返回debugInfo字段,必须在gosqlgo.properties配置文件里配置debug_info=true,而在产品布署阶段则需要关闭这个debug_info字段输出以避免暴露服务端细节。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Designing Web Navigation

Designing Web Navigation

James Kalbach / O'Reilly Media / 2007-8-15 / USD 49.99

Thoroughly rewritten for today's web environment, this bestselling book offers a fresh look at a fundamental topic of web site development: navigation design. Amid all the changes to the Web in the pa......一起来看看 《Designing Web Navigation》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具