Restangular 和 _links

Restangular and _links

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

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

哪个returns:

{
  "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 获取链接模块、事件、主题等?

假设您在 res 对象中有您的响应,您可以使用此代码解析您的 url(找到 here,仅当您使用绝对 url 时才需要小号):

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

然后您可以将 Restangular 用于:

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();

这就是我用来让它工作的。

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