WSO2ESB REST API资源优先级

WSO2ESB REST API资源优先级,rest,wso2,wso2esb,esb,Rest,Wso2,Wso2esb,Esb,我在WSO2ESB中有这样一个API配置: <api xmlns="http://ws.apache.org/ns/synapse" name="b2e_rmq_getmessage" context="/b2e_rmq_getmessage"> <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges/{exchangeid}/keys/{keyid}/message*"> &

我在WSO2ESB中有这样一个API配置:

<api xmlns="http://ws.apache.org/ns/synapse" name="b2e_rmq_getmessage" context="/b2e_rmq_getmessage">
    <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges/{exchangeid}/keys/{keyid}/message*">
    <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges/{exchangeid}/keys*">
    <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges*">
    <resource methods="GET" uri-template="/tenants*">
</api>

问题在于,在这段代码中消息的路由方式并不明显。它们甚至被随机路由,并且这个随机顺序被缓存。 例如,如果我保存此API并使用第二个(键*)选项调用它,则它可以调用第四个(租户*)选项

但随后我打开API配置并再次保存它——我用第二个(keys*)选项调用它,它可以调用第三个(exchanges*)选项

我的实验表明,代码编写的顺序并不重要

我怎样才能优先处理这个案件?我的目标是在几个uri符合条件的情况下路由到更复杂的uri


请注意,为了能够使用rest参数,我无法去掉地址末尾的通配符。此外,我无法更改URI模板,因为这是一个面向资源的模型。

我发现没有办法以“医学上正确”的方式解决这个问题。我的方法是严格重写uri映射。例如,事实上,我们只能以两种方式调用“get tenants”方法:“/tenant”(无通配符),“/tenant?*”

那么,给你:

<api xmlns="http://ws.apache.org/ns/synapse" name="b2e_elasticsearch_getrmqresource" context="/b2e_elasticsearch_getrmqresource">
    <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges/{exchangeid}/keys/{keyid}/messages?*" inSequence="b2e_elasticsearch_getrmqresource_getmessage_in_seq" outSequence="b2e_elasticsearch_getrmqresource_generic_out_seq" faultSequence="b2e_elasticsearch_getrmqresource_generic_fault_seq"/>
    <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges/{exchangeid}/keys/{keyid}/messages" inSequence="b2e_elasticsearch_getrmqresource_getmessage_in_seq" outSequence="b2e_elasticsearch_getrmqresource_generic_out_seq" faultSequence="b2e_elasticsearch_getrmqresource_generic_fault_seq"/>
    <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges/{exchangeid}/keys?*" inSequence="b2e_elasticsearch_getrmqresource_getroutingkey_in_seq" outSequence="b2e_elasticsearch_getrmqresource_generic_out_seq" faultSequence="b2e_elasticsearch_getrmqresource_generic_fault_seq"/>
    <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges/{exchangeid}/keys" inSequence="b2e_elasticsearch_getrmqresource_getroutingkey_in_seq" outSequence="b2e_elasticsearch_getrmqresource_generic_out_seq" faultSequence="b2e_elasticsearch_getrmqresource_generic_fault_seq"/>
    <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges" inSequence="b2e_elasticsearch_getrmqresource_getexchange_in_seq" outSequence="b2e_elasticsearch_getrmqresource_generic_out_seq" faultSequence="b2e_elasticsearch_getrmqresource_generic_fault_seq"/>
    <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges?*" inSequence="b2e_elasticsearch_getrmqresource_getexchange_in_seq" outSequence="b2e_elasticsearch_getrmqresource_generic_out_seq" faultSequence="b2e_elasticsearch_getrmqresource_generic_fault_seq"/>
    <resource methods="GET" uri-template="/tenants?*" inSequence="b2e_elasticsearch_getrmqresource_gettenant_in_seq" outSequence="b2e_elasticsearch_getrmqresource_generic_out_seq" faultSequence="b2e_elasticsearch_getrmqresource_generic_fault_seq"/>
    <resource methods="GET" uri-template="/tenants" inSequence="b2e_elasticsearch_getrmqresource_gettenant_in_seq" outSequence="b2e_elasticsearch_getrmqresource_generic_out_seq" faultSequence="b2e_elasticsearch_getrmqresource_generic_fault_seq"/>
</api>