0

次の情報を使用して、WSO2 API Manager (1.10.0) で API を作成しました。

役職:

/regularPath/* 

API URL:

http://<ip-address-1>/t/tenant.com/api/1.0.0/

HTTP エンドポイント:

http://<ip-address-2>:8181/{uri.var.newRestVar}

問題は、HTTP エンドポイントに複数のパスがあることです。たとえば、次のようになります。

http://<ip-address-2>:8181/mainService/cityInfo
http://<ip-address-2>:8181/country/cityInfo
http://<ip-address-2>:8181/country/dataKey/amountOfUsers
http://<ip-address-2>:8181/main/city/data/users

結果の API URL は次のようになります。

http://<ip-address-1>/t/tenant.com/api/1.0.0/regularPath/mainService/cityInfo
http://<ip-address-1>/t/tenant.com/api/1.0.0/regularPath/country/cityInfo
http://<ip-address-1>/t/tenant.com/api/1.0.0/regularPath/country/dataKey/amountOfUsers
http://<ip-address-1>/t/tenant.com/api/1.0.0/regularPath/main/city/data/users

私の最初のアプローチは、変数を使用して API URLREST_URL_PREFIXの一部の後のパス(例: ) を取得し、その値を変数に割り当てることでした。1.0.0regularPath/country/dataKey/amountOfUsersuri.var.newRestVar

次は、API Manager で作成した API Manager (Carbon) の変更された Service Bus 構成です。

...    
<inSequence>
    <filter regex="PRODUCTION" source="$ctx:AM_KEY_TYPE">
        <then>
            <property expression="get-property('SYSTEM_TIME')" name="api.ut.backendRequestTime"/>

            <log>
                <property expression="$trp:To" name="ToURL"/>
            </log>

            <property expression="$axis2:REST_URL_POSTFIX" name="restURL" scope="default" type="STRING"/>

            <log>
                <property
                    expression="get-property('restURL')" name="logRestURL"/>
            </log>

            <script description="JS" language="js">
                <![CDATA[
                    var unmodifiedRestPostfix = new String(mc.getProperty("restURL"));  
                    print("value = " + unmodifiedRestPostfix);
                    unmodifiedRestPostfix = unmodifiedRestPostfix.replace("/regularPath/", "");      
                    mc.setProperty("uri.var.newRestVar", unmodifiedRestPostfix);
                ]]>
            </script>
            <log>
                 <property expression="get-property('uri.var.newRestVar')" name="URI_VAR_NEWRESTVAR"/>
            </log>                                   
            <send>
                <endpoint name="admin-AT-tenant.com--API-Main_APIproductionEndpoint_0">
                    <http uri-template="http://<ip-address-2>:8181/{uri.var.newRestVar}"/>
                </endpoint>
            </send>
...

しかし、うまくいきません。ログを確認しましたが、すべて問題ないようです。

TID: [35] [] [2016-04-11 16:47:01,955] @bank.com [35] [AM] INFO {org.apache.synapse.mediators.builtin.LogMediator} -  To: local://axis2services/api/1.0.0/regularPath/mainService/cityInfo, MessageID: urn:uuid:091613ce-9fd3-4094-8638-5b112
a4214ad, Direction: request, logRestURL = /regularPath/mainService/cityInfo {org.apache.synapse.mediators.builtin.LogMediator}
a4214ad, Direction: request, URI_VAR_NEWRESTVAR = /regularPath/mainService/cityInfo {org.apache.synapse.mediators.builtin.LogMediator}

前述の API のパスを使用して HTTP エンドポイントに正常にアクセスするには、どの構成を変更する必要がありますか?

4

1 に答える 1

0

シナプス構成を変更せずに同じことを行うことができます。手順は次のとおりです。それがあなたにとっての解決策になることを願っています

次のようにAPIを作成します

API context : api/{version}/regularPath

注: AM 1.10 では、コンテキスト内のバージョンをテンプレートとして定義できます。バージョンを定義すると、上記のコンテキストがバージョンを取得します

resources: 
POST   mainService/cityInfo
POST   country/cityInfo
POST   country/dataKey/amountOfUsers
POST   main/city/data/users

HTTP Endpoint
http://<ip-address-2>:8181

その後、 backend を呼び出すことができます。シナプス構成にカスタム変更を追加する必要はありません

 http://<ip-address-2>:8181/country/dataKey/amountOfUsers

http://<ip-address-1>/t/tenant.com/api/1.0.0/regularPath/country/dataKey/amountOfUsers

追加情報

何か問題が発生した場合は、ワイヤ ログを有効にして、ゲートウェイで出入りするリクエストの種類を確認できます。ワイヤーログを有効にしてそれを使用してデバッグする方法については、http://mytecheye.blogspot.com/2013/09/wso2-esb-all-about-wire-logs.html を参照してください。

于 2016-04-12T16:00:18.497 に答える