WSO2 API上下文变得太大

时间:2019-01-24 05:48:53

标签: api wso2

当我不断添加越来越多的switch中介程序案例时,我的api文件大小会不断增长……在wso2中拆分和组织它们的最佳方法是什么?以下是其中一个文件的示例示例...

问题在于案件越来越多,文件大小变得太大。

有时“案例”之一可能像100行!在此示例中,我当然使用(...)进行了混淆。

我将不胜感激。理想情况下,有一种方法可以将其分成较小的文件大小。谷歌搜索后很难找到它。我很确定我不是第一个遇到这个问题的人。

您还可以在这里看到该文件中正在重复使用fixDate(given_time)函数,最好是一次包含此函数并在整个文件中使用它的最佳方法。

感谢您的见解!

该文件为\ synapse-config \ api \ Applications.xml ...,并且文件大小正在不断增加...

<?xml version="1.0" encoding="UTF-8"?>
<api context="/applications" name="Applications" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="GET">
        <inSequence>
            <property name="DISABLE_CHUNKING" scope="axis2" type="STRING" value="true"/>
            ....
        ...
        ...

            <property expression="$url:page" name="uri.var.page" scope="default" type="STRING"/>
            <script language="js"><![CDATA[

            ...
        ></script>
            <payloadFactory description="PayloadFactory" media-type="json">
                <format>
                    $1
                </format>
                <args>
                    <arg evaluator="xml" expression="get-property('uri.var.ats_credentials')"/>
                </args>
            </payloadFactory>
            <property expression="json-eval($.auth_code)" name="uri.var.auth_code" scope="default" type="STRING"/>
            <log level="full">

            </log>
            <switch source="get-property('uri.var.ats_type')">
                <case regex="CASE 1">

                    <payloadFactory media-type="json">
                        <format>{
                            "filters": [
                            {
                            "name": "applicantworkflow.updateddate",
                            "value": [
                            "$1"
                            ],
                            "secondaryValue": [
                            "$2"
                            ]
                            },
                            {
                            "name":
                            "applicantworkflow.id",
                            "value": [
                            "$3"
                            ],
                            "operator": "&gt;"
                            }
                            ] 

                .......

                <case regex="CASE 2">
                    <script language="js"><![CDATA[function fixDate(given_time) {

            ......


        <case regex="CASE 3">
                    <script language="js"><![CDATA[function fixDate(given_time) {

            ......


        <case regex="CASE 4">
                    <script language="js"><![CDATA[function fixDate(given_time) {

            ......


        //FILE SIZE KEEPS GROWING..... with different cases......


                <default>
                    <log description="Fault Log" level="custom">
                        <property expression="fn:concat('Invalid ATS - ', get-property('uri.var.ats_type'))" name="message"/>
                    </log>
                    <payloadFactory media-type="json">
                        <format>{
                            "Error": "Invalid ATS"
                            }
                        </format>
                        <args/>
                    </payloadFactory>
                    <respond description="Respond"/>
                </default>
            </switch>
        </inSequence>
        <outSequence>
            <send/>
        </outSequence>
        <faultSequence>
            <send/>
        </faultSequence>
    </resource>
    <handlers>
        <handler class="com.tti.security.OpenSourceAuthHandler"/>
    </handlers>
</api>

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是使用单独的序列。为每种情况(或至少变得非常大的情况)创建一个单独的序列。然后从切换介体使用序列介体调用序列。

首先将序列保存在添加到项目中的序列文件中:

<sequence name="case1_sequence" xmlns="http://ws.apache.org/ns/synapse">
<case regex="CASE 1">

                    <payloadFactory media-type="json">
                        <format>{
                            "filters": [
                            {
                            "name": "applicantworkflow.updateddate",
                            "value": [
                            "$1"
                            ],
                            "secondaryValue": [
                            "$2"
                            ]
                            },
                            {
                            "name":
                            "applicantworkflow.id",
                            "value": [
                            "$3"
                            ],
                            "operator": "&gt;"
                            }
                            ] 
..
</sequence>

然后在switch语句中使用序列介体调用序列。

<switch source="get-property('uri.var.ats_type')">
  <case regex="CASE 1">
    <sequence key="case1_sequence"/>
  </case>
  ..
</switch>