Roe*_*and 20 php ajax api-design laravel angularjs
随着Web应用程序需求的增长,我发现自己编写了越来越多的API驱动的Web应用程序.我使用像AngularJS这样的框架来构建与这些API通信的富Web客户端.目前我使用PHP(Lumen或Laravel)作为服务器端/ API.
问题是,我发现自己经常在客户端和服务器端之间重复业务逻辑.
当我说业务逻辑时,我的意思是订单表格的规则如下:
为了使这个应用程序既响应又快速,计算逻辑(以及其他业务逻辑)正在客户端完成.由于我们不应该信任客户端,因此我在服务器端重新验证这些数字.这种逻辑变得相当复杂,在这两个地方编写这种复杂的逻辑会感觉很危险.
我有三个解决方案:
使需要业务逻辑的所有内容都对API进行ajax调用.所有业务逻辑都将存在于一个地方,并且可以进行一次测试.这可能很慢,因为客户端必须等待他们对订单表单进行的每次更改才能获得更新的值和结果.拥有一个非常快的API将有助于此.主要缺点是,当用户连接不良(移动设备)时,这可能无法正常工作.
在客户端和服务器端编写业务逻辑.客户端在表单上进行更改时会获得即时反馈,并且我们会在服务器上提交后验证所有数据.这里的缺点是我们必须复制所有业务逻辑,并测试双方.这当然是更多的工作,会使未来的工作变得脆弱.
相信客户!?!在客户端编写所有业务逻辑,并假设他们没有篡改数据.在我目前的情况下,我正在研究一个引用构建器,它总是得到人类的审查,所以也许这实际上是可以的.
老实说,我对任何解决方案都不满意,这就是我向社区寻求建议的原因.我很想听听你对这个问题的意见或方法!
当我决定使用Laravel创建一个用于后端的应用程序和用于前端的Angular 2时,我遇到了同样的问题.在我看来,到目前为止还没有避免业务逻辑重复的解决方案,因为:
目前,PHP和JavaScript无法从一个转换为另一个.如果我们可以使用相同的语言编写业务逻辑然后将它们嵌入到后端和前端,那会不会很好.从这一点来看,它引出了另一个观点:
为了实现这个目标,我们应该只用一种语言编写业务逻辑,到目前为止JavaScript是最好的解决方案.如您所知,TypeScript/EMCA Script帮助我们以OOP方式编写代码.Meteor框架NodeJS基础架构帮助我们用JavaScript编写代码,以便在后端和前端运行.
因此,从我的角度来看,我们可以使用TypeScript/EMCA来编写业务逻辑包,例如,用JavaScript编写的验证类可以在两端实现,所以你只需要写一次,但是它会被调用两次前端和后端也.
这是我的观点.希望看到这个非常有趣的话题的其他解决方案.
你还可以做一件事.
仅使用JavaScript创建验证和业务逻辑代码.但是要把它作为松散耦合.如果可能,只将JSON作为输入,JSON作为输出.
然后在PHP服务器旁边设置一个nodejs服务器,将这些逻辑提供给客户端.因此,在客户端,它可以在没有AJAX调用的情况下使用.
然后从服务器端(PHP),当您需要验证并运行所有这些业务逻辑时,将cURL调用到nodejs以验证这些数据.这意味着它是从PHP服务器到nodejs服务器的http调用.Nodejs服务器将有另一个代码,它将获取这些数据并使用相同的代码进行验证并返回结果.
通过这种方式你可以做到
您需要做的只是在PHP服务器旁边设置一个nodejs.但是您不需要将所有代码更改为nodejs服务器.
一种可能的解决方案是以XML或JSON Schema等声明性抽象语言声明验证规则.
然后在客户端,比如AngularJS - 您可以将这些规则转换为现成的表单渲染器.因此,现在在客户端,您最终会得到验证声明规则的表单.
然后在服务器端API上,您需要创建一个可重用的验证引擎,该引擎将根据定义的规则进行验证.
您最终得到的是一个单独的地方,您的JSON模式或您声明性地定义规则的地方,您的表单和验证规则已定义.
| 归档时间: |
|
| 查看次数: |
2818 次 |
| 最近记录: |