将Extjs与HAL集成

时间:2015-02-06 23:29:51

标签: javascript rest extjs backbone.js spring-data-rest

如何绑定输出HAL的Spring DATA REST,使用ExtJS(v4.1)客户端,ExtJS不支持HAL,但我如何将Extrages集成像Hyperagent.js或任何支持HAL的JS库这样的库数据模型,通过HAL将商店与服务器链接。

这种架构的优点和缺点是什么?

1 个答案:

答案 0 :(得分:2)

这是一个非常有趣的问题。关于如何将ExtJ连接到后端的信息不多。当我开始为ajax代理开发自定义后端时,我没有发现自己正在寻找的信息。我只能从我有限的经历中写出一个肯定有偏见的答案,我希望你能从不同的观点得到其他答案。

我开始想要编写一个通用的,符合标准的,客户端无关的RESTful API,它可以按原样公开数据库中的表。最后,我最终得到了一个高度ExtJs特定的后端,它实现了许多我认为他们宁愿属于前端的功能。

ExtJs对后端施加了什么

ExtJs在视图和商店之间存在严格的关系。视图绑定到直接绑定到后端的存储。这要求后端必须提供数据,因为它将显示在网格中。真正错过的(ExtJs 5在某种程度上已经缓解了这种情况)是能够从另一家商店的数据中创建商店。这导致有义务以与最终视图相关的定制方式公开数据(我们已经松散地分离了API和应用程序之间的关注点)。

当您想要使用分页,远程过滤或排序等功能时,这会更进一步。如果您在某些时候有大量数据,则必须考虑性能问题。 ExtJs发送分页参数的方式(通过默认启用的方式),排序和过滤看起来很奇怪,我认为这需要你在这一点上调整你的后端ExtJs。如果您使用过滤器很多,您甚至需要在后端配置它们,因为过滤器属性(例如以vs开头包含和区分大小写)很遗憾不会进入服务器。同样,表示元素更多地将自身引入后端。

ExtJs 4对关联的支持有限(并且与版本5不兼容)。 ExtJs不支持REST的高级功能,例如由@Jaimie链接的帖子中解释的功能。 ExtJs采用扁平的REST方法,每个表都有自己的端点。有一种方法可以从树状数据结构中的链接表中发送数据,我无法使其工作,但是如果你实现了,你最终会在后端使用另一个ExtJs特定功能。

我目前的做法

根据ExtJs方面的所有这些要求,我觉得我不得不写一些特别是ExtJs的东西。我在开始时试图避免的是我的后端的力量:特异性。

我有一个类,它可以为任何mysql表实现crud操作,分页,过滤和排序,所有这些都通过身份验证来保护。它完全符合ExtJs的期望。

我可以为表创建子类以允许更细粒度的控制:

  • 使用ACL授权
  • 提供加入或视图
  • 更新或删除前的扩展验证
  • 自定义过滤器
  • 通过websocket发送通知以进行特殊操作
  • 将任何数据公开为表格(例如目录中的文件列表)

结论

正如您所看到的,后端具有非常强大的功能,与数据提供商相距甚远。

这不是关于如何集成HAL REST api的问题的答案,但它以某种方式回答了利弊部分:ExtJs在其后端有这样的特定要求,如果不实现它们,你将失去太多的功能。修改ExtJs连接到服务器的方式可能是一个选项,但我不知道你必须在多大程度上重写代码。这可能需要一项重要的投资。