加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

超媒体(HATEOAS)驱动的AngularJS应用程序中的URL处理

发布时间:2020-12-17 07:13:49 所属栏目:安全 来源:网络整理
导读:我们正在寻找关于在由HATEOAS REST API支持的Web应用程序中处理URL(以及与每个URL相关的状态)的一些建议,更具体地说是 如何避免将Web应用程序URL与REST API URL相结合 如何在单个视图中处理多个资源 但是,首先让我提供更多背景信息: 我们正在使用超媒体约束
我们正在寻找关于在由HATEOAS REST API支持的Web应用程序中处理URL(以及与每个URL相关的状态)的一些建议,更具体地说是

>如何避免将Web应用程序URL与REST API URL相结合
>如何在单个视图中处理多个资源

但是,首先让我提供更多背景信息:

我们正在使用超媒体约束的REST层之上构建一个Angular Web应用程序. (注意:我更喜欢在HATEOAS上使用术语’超媒体(约束)’).

根据超媒体约束的规定,REST API会在任何时间点提供应用程序中的可用操作和链接.因此,Web应用程序不应包含REST API的任何硬编码URL,除了“root”(假设概念确实存在于REST API中).

另一方面,Web应用程序中的每个页面都需要是可收藏的.因此,我们无法创建一个黑盒应用程序(使用单个URL并在SPA中处理所有状态更改而不更改URL).这意味着Web应用程序还具有其URL空间,该空间需要以某种方式映射到REST API URL空间.这已经与超媒体理念发生冲突.

在Angular应用程序中,我们使用UI路由器来处理应用程序状态.以下是我们如何运作:

>我们只定义状态,没有URL
>我们定义了一个$urlRouterProvider.otherwise处理程序,它将当前Web应用程序URL映射到相应的REST API URL,检索与该REST URL对应的资源的表示形式,并将其传递给控制器??(在$stateParams中).
>然后,控制器可以使用表示中的数据(以及链接和操作),就像它本身(或通过服务)进行REST调用一样

到目前为止这么好(或不是真的),因为这种方法有一些缺点:

> Web应用程序URL映射到REST API URL,因此两个URL空间都是耦合的,这与使用超媒体约束的基本假设之一相冲突:我们无法在不更改Web应用程序的情况下更改REST API URL.
>在$urlRouterProvider.otherwise处理程序中,我们检索当前Web应用程序URL的表示形式.但在某些情况下,我们在单个视图中有两个资源(使用UI路由器嵌套状态):例如项目列表和单个项目的详细信息.但是只有一个URL,因此只检索项目详细信息的表示,并且项目列表保持为空.

因此,我们希望听到一些关于我们如何改进处理两个URL空间的方法的建议.是否有更好的方法使REST API指示Web应用程序的(可用)行为,并且仍然在Web应用程序中具有可收藏的URL?因为现在我们有某种混合方法,感觉不完全正确.

提前致谢.

问候,

吕克

解决方法

这是一个艰难的设置.粗略地说,您希望将书签添加到API中,而RESTful系统在某种程度上会阻止书签.

一种可能的解决方案是“书签服务”,它返回当前正在呈现的资源的书签(bit.ly like)URL,保证兼容,因为您可以更改规范URL结构,书签服务总是可以转换位就像网址到规范网址一样.听起来很复杂,但我们一直看到这个,我们称之为SEO网址,例如:/ product-name / maps to products / today,但可能是/ catalog / old-products /明天.

如何匹配显示2个资源的UI,第一个是像资源一样的摘要列表,第二个是特定资源,这真的很棘手.我希望这样一个页面能够知道它在url中显示的内容的状态(可能在片段中).因此,它可能是处理这些命令的控制器,它可能需要(列表资源和扩展资源)作为输入.我打赌网址看起来像:

列表= HTTP://路径/到/列表/结果&安培;扩大= HTTP://自/链路/路径/

所以你的最后一部分是确保工作顺利进行.这又是书签问题.如果您不想构建书签服务,我建议的是,如果您想要拥有此类书签,则需要将人员转换为新的URL.当请求到http://path/to/list/results并且您想要切换它时,您应该301将它们重定向到新的规范URL并且应用程序应该更新书签.这样的重定向可以包括& flag = deprecate_message参数,以在UI中触发客户端书签旧的应该被替换的呈现.或者,响应可以在内部转发,并且弃用标记&旧URL中的响应中包含的规范(或最新)链接.这导致分阶段过渡.

总结:我还没有看到HATEOAS是一种治疗倒退的方法.转发兼容性,但它比现有技术好得多.这表示你仍然必须在你的API的v1中做出关于你希望用户如何移动到v2的决定.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读