公式、REST 和 SQL 存储过程

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

Espresso Logic 的关键支柱之一是使用 JavaScript 调用存储过程的可扩展性。许多公司都有使用存储过程来封装特定逻辑的 COTS 应用程序。当他们来到 Espresso 并询问有关公开 REST 服务的问题时,他们想知道并担心他们将如何公开他们的逻辑。

首先,Espresso Logic 读取大多数现代数据库的模式并为每个表、视图和存储过程创建一个 ORM。连接到 SQL 的即时 REST 特性使它成为一个很好的起点。这些对象反过来成为默认的 REST 端点,并成为自定义资源(用户定义的嵌套文档)和业务逻辑服务的构建块。这篇文章将探讨如何将存储过程公开为 REST 和逻辑领域中的一等公民。

调用存储过程

所有 REST 请求看起来都很相似,因为它们都是对服务器的 HTTP GET 调用。 URL 可能因帐户和项目而异,但调用过程的概念与调用表或视图的概念相同。但是,参数的处理方式略有不同。在此示例中,该过程有一个参数“ given_employee_id ”,它以“ arg”开头。 类似于 C# 在绑定变量时使用 @ 的方式。


 http://espressologic.com/rest/el-dev/sample/v1/demo:get_employee?arg.given_employee_id = 1

回复

调用过程的响应在 Espresso Logic 中略有不同。系统将返回一个 JSON 响应,其中包括参数列表、列元信息和任何行结果。这有助于调用者了解返回的内容。由于 Sproc 可能会返回多个结果集和结果中的多行。


 http://espressologic.com/rest/el-dev/sample/v1/demo:get_employee?arg.given_employee_id = 1


程序即公式

知道过程可以作为 REST 资源调用,我们现在结合声明逻辑的力量在我们的公式中使用它们。公式是返回计算结果的表达式。例如,我们可能想在我们的订单输入系统中创建一个新订单。我们允许我们的客户将他们的客户信息和项目/数量作为嵌套文档中的单个 POST 传递。我们现有的系统有一系列程序,可以调用这些程序来创建批次标题、订单日期、装运地点、仓库通知、订单号、生产线顺序、套件零件爆炸、客户特定产品项目定价。

我们的遗留代码可能是一大段代码或一系列函数调用,它们将各种用户值绑定为参数以创建各种中间值。我们已经了解单元测试的工作原理——也就是说——我们想要测试最小的工作单元,所以在 Espresso 中,我们在包含用户提供的值和系统生成的值的表上创建一个公式。这些公式将以正确的顺序自动调用(很像电子表格使用内部依赖树确定正确的计算顺序)。


公式作为模式

模型中的每个属性要么由客户提供(客户编号、发货方法仓库位置),要么使用将调用过程的公式计算得出。每个公式的模式都是相同的——识别字段、建立参数列表、处理过程和处理结果。在此示例中,我们使用已从先前公式计算出的顺序 no 获取下一行序列 no。

在这个例子中,我们调用一个过程并传入订单号(“ ”是当前表的完整对象模型)。我们进行调用,处理结果并提取新值。

Javascript 公式


 http://espressologic.com/rest/el-dev/sample/v1/demo:get_employee?arg.given_employee_id = 1

附加属性

一个不错的特性是 Espresso Logic 将允许 REST 调用者 POST 在当前表中找不到的附加属性。要启用此功能,您需要告诉系统 忽略额外的属性。 这可以通过将其传递到 URL ( IgnoreExtraAttributes=true) 或通过对特定 POST 资源名称使用请求事件来 完成 req.setUserProperty(“IgnoreExtraAttributes”,true);

在我的代码中——我会使用下面的代码来查看这些额外的属性是否存在


 http://espressologic.com/rest/el-dev/sample/v1/demo:get_employee?arg.given_employee_id = 1

GET 呢?

一个经常被忽视的特性是响应事件。我所做的是使用类型“ JavaScript ”为每个 GET 存储过程创建一个客户资源,然后简单地返回 {}; (空集)。所以在这个例子中,我们创建了一个名为 getCustomerInfo 的自定义资源。现在我们创建一个响应事件来寻找这个命名资源,调用我们的存储过程,提取响应并将其附加到 JSON。


 http://espressologic.com/rest/el-dev/sample/v1/demo:get_employee?arg.given_employee_id = 1


概括

使用 REST 服务器与您现有的 ERP 或 SQL 后端集成可以快速而简单。在 Espresso 的几行代码中添加将存储过程移动到服务器的逻辑,可以轻松扩展现有投资并允许您构建新的移动和 Web 前端。立即查看 Espresso Logic, 免费试用并将您自己的程序与规则联系起来。