我已经开始实施网络前端处理由提供服务的RESTful服务Spring Data Rest
在传统的关系数据库。 这是用做AngularJS
和angular-hal
,我发现非常适合图书馆HATEOAS
的理念和形式主义Spring Data Rest
。
举例来说,我只需要知道第一API端点(“/”),然后我所有的查询都是通过关系,而不关心的URL来完成。 我的问题是要能够直接访问显示我的实体之一的页面。
让我们来接触信息库的例子。 如果我从主页开始,然后通过联系人列表浏览,然后选择我想详细可查看联系人,是没有问题的。
但我不能直接访问显示联系人的详细信息的页面:资源是从列表控制器编辑控制器注入,编辑控制器无法知道这个请求的URL,如果不被列表控制器告诉。
问题的根源是,随着Spring Data Rest
,实体对他们的任何公共领域的id
(不是JSON),以及库没有API relation
通过ID进行搜索。
我想到了一些解决方案,但我不喜欢任何人。
1.工作在后端周围
- a添加
Projection
与方法getId()
所有实体需要被书签 - 添加相应的
findById()
存储库中的接口 - 使用该ID在前台作为参数(或路径)的网址,并通过调用新的可用的搜索关系解决资源。
- 缺点 :这迫使我们重新手动所有DTO的春天休息的数据自动生成的,所以我们正在失去的框架的目的之一。
- 问 :有没有配置Spring自动揭露那些ID字段和findById方法的方法吗?
2.使用自我关系
- 获取与所述实体的自URI
angular-hal
$href('self')
方法 - 使用它作为页面的参数,并通过调用一个新的解决资源
halClient.$get(resourceUri)
就可以了 - 缺点 :URI应前,把在页面网址,以避免错误beeing后处理由于其他的“http://”在地址栏中。 我想它做一些base64编码的,但是这是耗时。
- 缺点 :这种公开API URL走向世界,而这个数据可能是至关重要的,需要留隐患(即使这将是通过一个调试器看网络流量访问过)。
3.忘记HATEOAS
- 不要用关系和发现能力打扰
- 删除
angular-hal
,只需使用$resource
与普通的旧网址映射 - 缺点 :这是倒退,感觉就像没有遵循以下原则...
所以,我失去的东西吗? 什么是关于数据的完整的基于REST的HATEOAS环境的接入的最佳做法是什么?