【问题标题】:admin-on-rest: How use <Resource /> component with custom API end pointsadmin-on-rest:如何将 <Resource /> 组件与自定义 API 端点一起使用
【发布时间】:2017-07-07 08:06:40
【问题描述】:

我正在使用 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]

如何使用&lt;Resource /&gt; 组件实现此目的?

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

感谢您的帮助。

【问题讨论】:

    标签: admin-on-rest


    【解决方案1】:

    您可以使用 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 代码,下面使用的 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)}))
    }
    

    【讨论】:

    • 谢谢,我会尝试这样的,让你知道。顺便说一句,我知道能够设置 组件的过滤器属性,但它们在 where 子句中使用。我说的过滤器是一个关系过滤器,它使 Loopback 延迟加载相关模型的内容(没有 where 子句)。
    • 那是查询中的包含过滤器对吧? AOR 环回插件不考虑包含过滤器。这就是为什么您必须完全绕过它并从 Rest Wrapper 进行整个查询的原因。 ^^ 代码只是添加了包含过滤器。然后,您可以在资源请求中设置 include。
    • 但是我在哪里调用这个创建 API 所需 URL 的函数?我理解您在上面所说的和所做的,但是我在 组件中没有看到任何可以直接传递生成的 URL 的属性? 组件确实有一个过滤器属性,所以上面的函数似乎在操纵它的查询属性,所以如果我应该把它放在那个地方,我需要创建一个自定义 组件,对吧?
    • 好的,知道了。我刚刚分叉了环回休息客户端并进行了所有修改。现在工作。谢谢。
    • 这是一种方法。您还可以编写一个 Rest Wrapper。如果您只有 1 或 2 个 AOR 环回未涵盖的特殊情况,请在上面的文档中链接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    相关资源
    最近更新 更多