admin-on-rest:如何将<resource>组件与自定义API端点一起使用

时间:2017-07-07 08:06:41

标签: admin-on-rest

我正在使用Loopback REST Client成功完成admin-on-rest而没有任何问题。它易于使用,并且非常适用于标准CRUD操作,但是我很快发现自己需要使用非传统的REST调用,如下所示:

http://www.remoteurl.com/api/getUsersWithRolesInfo

我还想在某些情况下使用Loopback的URL内过滤器,例如:

http://www.remoteurl.com/api/Users?filter=[include][profile]&filter=[include][posts]

如何使用<Resource />组件实现此目的?

最初我想过修改REST客户端以映射上述端点。但是,REST客户端将其调用映射到GET_ONEGET_MANY等类型。而我想要映射的是URL(如../getUserWithRolesInfo)。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用List组件传递永久过滤器,也可以使用ReferenceInput组件传递一次性过滤器。对于对API调用的更具体修改,您可以使用RestWrapper拦截对API的一些调用,并将其余调用传递给Loopback Rest Client。

https://marmelab.com/admin-on-rest/RestClients.html#decorating-your-rest-client-example-of-file-upload

Loopback REST客户端不考虑包含过滤器。您必须手动构建URL查询。像下面的东西。其中大部分来自AOR-Loopback Code,以及下面使用的queryParameters函数。你可以在那里找到它并根据你的需要进行修改。

function getListQueryConstructor(params, apiResource) {
  const page =  params.pagination.page
  const perPage = params.pagination.perPage
  const {field, order} = params.sort
  const query = {}
  if (params.filter.include) {
    query['include'] = params.filter.include
    delete params.filter.include
  }
  query['where'] = {...params.filter}
  if (field) {query['order'] = [field + ' ' + order]}
  if (perPage > 0) {
      query['limit'] = perPage;
      if (page >= 0) {
          query['skip'] = (page - 1) * perPage
      }
  }
  return (config.host + '/' + apiResource + '?' +  queryParameters({filter: JSON.stringify(query)}))
}