使用AngularJS的HATEOAS客户端

Rol*_*olf 30 rest hateoas angularjs spring-data-rest

我想知道Angular中是否隐藏了某些功能,或者某些第三方库是否可以轻松创建与HATEOAS兼容的Restful客户端.

在后端,我使用Spring Data/REST生成HATEOAS JSON API.然而,消费它是另一个故事.

例如,我有这3个实体:

  • 公司 {name, address}
  • 雇员 {firstName, lastName, employer[Company]}
  • 活动 {rate, day, employee[Employee], client[Company]}

并请求一个活动(模型中最复杂的实体)产生这样的东西:

{
    links: [],
    content: [{
            rate: 456,
            day: 1366754400000,
            links: [{
                rel: "self",
                href: "http://localhost:8080/api/activities/1"
            },
            {
                rel: "activities.activity.client",
                href: "http://localhost:8080/api/activities/1/client"
            },
            {
                rel: "activities.activity.employee",
                href: "http://localhost:8080/api/activities/1/employee"
            }]
        }]
}
Run Code Online (Sandbox Code Playgroud)

我的API就REST而言(由链接标识的资源).例如,一个Activity有一个Employee.我真正想要使用的是:{rate: 456, day: 1366754400000, employee: {firstName:"xxx", lastName:"xxx" ...}}.

但是,正如您在第一个输出中看到的,我的Activity仅包含指向员工的链接,而不是其数据.Angular或第三方库中是否有任何内容可以解析这些链接并嵌入生成的数据?

有什么输入吗?

提前致谢!

Far*_*arm 20

Checkout angular-hateoas.这是一个AngularJS模块,用于在启用了HATEOAS的REST API中使用$ resource.


st.*_*ver 7

您可以编写一个响应转换来检查返回的对象,检查链接,并在返回响应之前解决它们.请参阅$ http服务文档中的"转换请求和响应"部分.

像这样的东西:

transformResponse: function(rawData) {
  var json = JSON.parse( rawData );
  forEach( json.content.links, function(link) {
    // resolve link...
  });
  return json;
}
Run Code Online (Sandbox Code Playgroud)

由于"解析链接"步骤本身是$ http调用,因此也将解析子引用.但是,由于这些是异步的,你可能会返回一个承诺而不是真正的价值; 我不知道转换函数是否允许这样做.

正如@charlietfl指出的那样,请注意,这将导致多个HTTP调用返回单个实体.即使我喜欢HATEOAS的概念,如果进行了太多的调用,这可能会导致缓慢.我建议您的服务器直接返回数据或其中一些数据,以获取详细信息.