如何将传入的查询参数传递给后端WSO2 API管理器



我使用的是wso2 API管理器3.2,在我的API中有一些头和查询参数。

我的API在URL中有这样的路径变量

http://example.com/data/readsomeData/{entityId}/{someId}

对于路径变量,我使用以下中介

<property name="REST_URL_POSTFIX" scope="axis2" action="remove"/>

而且效果很好。

我还更改了一些传入标头的名称。例如,传入的标头是IN_header,我将其转换为OUT_header。

我也使用这个中介

<property name="IN_HEADER" expression="get-property('transport', 'IN_HEADER')"/>
<property name="OUT_HEADER" expression="get-property('IN_HEADER')" scope="transport"/>
<property name="IN_HEADER" scope="transport" action="remove"/>

它也很好用。

上面描述的给定API也有一些可选的查询参数(limit,max,min(。例如,如果我在API中使用limit=10,我必须得到10条记录,而没有limit,我只能得到一条记录。在WSO2 API管理器发布服务器中,我将上述查询参数定义为其他参数。

问题是,当我使用每个查询参数时,我得到的结果与不使用查询参数的方式相同。我只有一张唱片。

我认为API管理器没有将查询参数传递到后端。

我不知道这个问题是否与我使用的调解员有关!

您可以用几种不同的方式来处理此问题,下面的示例也适用于3.2.0。因为删除了REST_URL_POSTFIX,APIM也删除了查询参数。因此,选项1:

你可以做一些类似于你对其他标题所做的事情。获取查询参数并将它们作为头添加以供进一步使用。(据我所知,$url简写也应该在3.2.0中提供——它按名称获取查询参数。(

<property name="limit" expression="$url:limit" scope="transport"/>
<property name="min" expression="$url:min" scope="transport"/>
<property name="max" expression="$url:max" scope="transport"/> 

或者,您可以从URL中获取查询参数,并在删除POSTFIX后将其放回。

<property name="newUrlPostfix" expression="substring after($axis2:REST_URL_POSTFIX, '?')"/> 
<property name="REST_URL_POSTFIX" scope="axis2" action="remove"/>
<property name="REST_URL_POSTFIX" scope="axis2" expression="concat('?', $ctx:newUrlPostfix"/>

最新更新