WSO2 API 管理器 v1.8.0

WSO2 API Manager v1.8.0

我有一个简单的用例,将路径参数从 API 消费者映射到后端 API 端点。我做了很多研究,但还没有找到关于如何做到这一点的具体答案。据我了解,如果不使用 uri 模板,则无法完成路径参数的映射。现在的问题是 API 管理器不支持来自 API Publisher 用户界面的 uri-template,您必须改用 url-mapping。 WSO2 开发人员的一篇博客说,您可以转到单独的突触配置并将其手动更改为 uri 模板。但是在实践中发生的是,对 synapde 配置所做的更新以某种方式触发了发布者 UI 否则会发生的数据库更新,最终结果是它不起作用。有人可以提供有关如何映射路径参数的前进方向吗?仅供参考 - 查询参数映射对我有用,因为它不需要 uri-template 并且可以使用 url-mapping 本身来实现。

APIM 1.8 支持 uri-template 和 url-mapping.You 可以在资源部分定义您的 url-template(或者如果您想要 uri-mapping)。请查看我添加了 url-template 和 url-mapping

的突触配置

在 publisher 中我添加了 /json 作为 url 模式用于 url-mapping 和 /json/{id} 作为 uri-template

    <?xml version="1.0" encoding="UTF-8"?>
<api xmlns="http://ws.apache.org/ns/synapse"
     name="admin--mytst"
     context="/mytest"
     version="1"
     version-type="url">
   <resource methods="GET" url-mapping="/json" faultSequence="fault">
      <inSequence>
         <filter source="$ctx:AM_KEY_TYPE" regex="PRODUCTION">
            <then>
               <send>
                  <endpoint name="admin--mytst_APIproductionEndpoint_0">
                     <http uri-template="http://localhost.com"/>
                  </endpoint>
               </send>
            </then>
            <else>
               <sequence key="_sandbox_key_error_"/>
            </else>
         </filter>
      </inSequence>
      <outSequence>
         <send/>
      </outSequence>
   </resource>
   <resource methods="GET" uri-template="/json/{id}" faultSequence="fault">
      <inSequence>
         <filter source="$ctx:AM_KEY_TYPE" regex="PRODUCTION">
            <then>
               <send>
                  <endpoint name="admin--mytst_APIproductionEndpoint_1">
                     <http uri-template="http://localhost.com"/>
                  </endpoint>
               </send>
            </then>
            <else>
               <sequence key="_sandbox_key_error_"/>
            </else>
         </filter>
      </inSequence>
      <outSequence>
         <send/>
      </outSequence>
   </resource>
   <handlers>
      <handler class="org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler"/>
      <handler class="org.wso2.carbon.apimgt.gateway.handlers.throttling.APIThrottleHandler">
         <property name="id" value="A"/>
         <property name="policyKey" value="gov:/apimgt/applicationdata/tiers.xml"/>
      </handler>
      <handler class="org.wso2.carbon.apimgt.usage.publisher.APIMgtUsageHandler"/>
      <handler class="org.wso2.carbon.apimgt.usage.publisher.APIMgtGoogleAnalyticsTrackingHandler">
         <property name="configKey" value="gov:/apimgt/statistics/ga-config.xml"/>
      </handler>
      <handler class="org.wso2.carbon.apimgt.gateway.handlers.ext.APIManagerExtensionHandler"/>
   </handlers>
</api>`enter code here`