Restangular和_links

时间:2016-02-07 09:26:49

标签: angularjs restangular

我正在开发一个AngularJS应用程序。该应用程序使用RESTful / HATEOAS API。 API具有以下端点,其中包括:

http://localhost:8001/api/tests/1

返回:

{
  "title": "Test",
  "description": "Test",
  "created": "2016-01-09T11:52:01+0100",
  "enabled": true,
  "is_speed_test": true,
  "test_id": 1,
  "view": [],
  "report_card": [],
  "cap": [],
  "tag": [],
  "_links": {
    "self": {
      "href": "http://localhost:8001/api/tests/2"
    },
    "module": {
      "href": "http://localhost:8001/api/subjects/2/modules/1"
    },
    "event": {
      "href": "http://localhost:8001/api/events/1"
    },
    "topics": {
      "href": "http://localhost:8001/api/subjects/2/modules/1/topics"
    },
    "creatorUser": {
      "href": "http://localhost:8001/api/users/admin"
    }
  }
}

如何使用Restangular来获取链接的模块,事件,主题等?

2 个答案:

答案 0 :(得分:0)

我们假设您在res对象中有回复,您可以使用此代码解析您的网址(找到here,仅在您使用绝对网址时才需要):

var getLocation = function(href) {
  var l = document.createElement("a");
  l.href = href;
  return l;
};

然后你可以使用Restangular with:

Restangular.one(getLocation(res._links.module).pathname).get();
Restangular.all(getLocation(res._links.topics).pathname).getList();
Restangular.all(getLocation(res._links.creatorUser).pathname).post(newUser);

当然,您仍然需要知道使用哪种方法以及响应是列表还是对象。

如果主机名与您配置的Restangular配合使用的主机名不同:

Restangular.withConfig(function(conf) {
  conf.setBaseUrl(getLocation(res._links.module).hostname);
}).one(getLocation(res._links.module).pathname).get();

答案 1 :(得分:0)

这就是我以前的工作方式。

Restangular.oneUrl('module', test._link.module.href);