0

我有一个 Mule 4 系统层 API。它目前以手动方式设置,以根据自定义查询搜索返回数据列表:

随机存取存储器:

queryable:
    queryString:
      type: string
      example: "CustomerId=100"

邮递员要求:

{{systemlayerapi}}:{{port}}/api/customers?CustomerId=100

存储变量:

<set-variable value='#[attributes.queryString replace /([\\])/ with ("") replace /(["])/ with ("")]' doc:name="queryString" doc:id="79fcfb07-7947-4011-8ed4-ef8c6e28cdd4" variableName="queryString" />

翻译成系统请求:

%dw 2.0
output application/xml inlineCloseOn="empty", skipNullOn = "everywhere"
---
{
    content:
    {
        function @(controlid: uuid()): {
            readByQuery: {
                fields: "*",
                (if ( vars.queryString != null or vars.queryString != "" )
                        query: vars.queryString
                    else
                        query: "")
            }
        }
    }
}

请记住,我设置了单个端点来获取唯一事件 (/api/customers/100),这是常见的做法。但是我选择了这种方式来检索基于外键的文档列表。如果他们想搜索美国的所有客户,他们可以执行“/customers?COUNTRY=US”例如。这会正确地将查询传递给系统,该系统将返回所有客户的分页结果集,其中 COUNTRY 的外键等于美国。

所以。我用“fields = *”参数设置了这个。鉴于上述示例,我将为居住在美国的所有客户返回所有客户字段。使用中的内存经常出现峰值并进行大量垃圾收集。我认为为这么多记录返回这么多字段会占用资源或导致内存泄漏,我可以通过让开发人员选择根据他们想要返回的字段进行过滤来减少负载。

假设我正在开发一个客户流程 API,我只想要美国所有客户的 FIRSTNAME、LASTNAME。我如何添加到我的代码中以返回这些结果?我不希望它将过滤器附加到 queryString 变量:

{{systemlayerapi}}:{{port}}/api/customers?query=Country=US&filter=FIRSTNAME,LASTNAME

不确定这是否是一个简单的请求,我只是对 Mule 和 APIKit 不够熟悉,不知道它是如何完成的。提前致谢。

4

1 回答 1

0

您应该从 API 规范开始添加第二个查询参数。编辑 RAML 文件,然后在 Studio 中右键单击项目,然后单击 Mule / Regenerate Flows。然后您必须编辑流程以自定义您的逻辑。

于 2021-10-06T16:47:45.110 回答