Optimisataion

Not applicable

Hi currently i need to execute validation before each service execution exclude 2 of them. I already have (see code) and please help me to optimize in any way my preflow part. Every time when I add route with validation, I should add one more condition into all preflow steps. It is obvious incorrect and I sure exist the better way. And if you will be so kind please have a look on my target endpoints. Is everything OK. Or I need to separate all staff into different proxy endpoints?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
    <Description/>
    <DefaultFaultRule name="fault-rule">
        <Step>
            <Name>GetFaultData</Name>
        </Step>
        <Step>
            <Condition>(error_code is null)</Condition>
            <Name>GetFaultDataForAlreadyCreatedExceptions</Name>
        </Step>
        <Step>
            <Name>OnErrorPolicy</Name>
        </Step>
    </DefaultFaultRule>
    <PreFlow name="PreFlow">
        <Request>
            <Step>
                <Condition>(proxy.pathsuffix MatchesPath "/session/ttl/**") or (proxy.pathsuffix MatchesPath "/session/validate") or (proxy.pathsuffix MatchesPath "/session/renew") or (proxy.pathsuffix MatchesPath "/invoiceInfo/**")</Condition>
                <Name>GetDetailsFromCache</Name>
            </Step>
            <Step>
                <Condition>(proxy.pathsuffix MatchesPath "/session/ttl/**") or (proxy.pathsuffix MatchesPath "/session/validate") or (proxy.pathsuffix MatchesPath "/session/renew") or (proxy.pathsuffix MatchesPath "/invoiceInfo/**") and (DetailsFromCache is null)</Condition>
                <Name>ThrowNewEmptyDetailsException</Name>
            </Step>
            <Step>
                <Condition>(proxy.pathsuffix MatchesPath "/session/ttl/**") or (proxy.pathsuffix MatchesPath "/session/validate") or (proxy.pathsuffix MatchesPath "/session/renew") or (proxy.pathsuffix MatchesPath "/invoiceInfo/**")</Condition>
                <Name>SaveUserToken</Name>
            </Step>
            <Step>
                <Condition>(proxy.pathsuffix MatchesPath "/invoiceInfo/**")</Condition>
                <Name>SaveRequestBody</Name>
            </Step>
            <Step>
                <Condition>(proxy.pathsuffix MatchesPath "/session/ttl/**") or (proxy.pathsuffix MatchesPath "/session/validate") or (proxy.pathsuffix MatchesPath "/session/renew") or (proxy.pathsuffix MatchesPath "/invoiceInfo/**")</Condition>
                <Name>PushDataFromCacheToRequestOrResponseBody</Name>
            </Step>
            <Step>
                <Condition>(proxy.pathsuffix MatchesPath "/session/ttl/**") or (proxy.pathsuffix MatchesPath "/session/validate") or (proxy.pathsuffix MatchesPath "/session/renew") or (proxy.pathsuffix MatchesPath "/invoiceInfo/**")</Condition>
                <Name>ExtractMemwordFromDetails</Name>
            </Step>
            <Step>
                <Condition>(proxy.pathsuffix MatchesPath "/session/ttl/**") or (proxy.pathsuffix MatchesPath "/session/validate") or (proxy.pathsuffix MatchesPath "/session/renew") or (proxy.pathsuffix MatchesPath "/invoiceInfo/**") and (memword IsNot null)</Condition>
                <Name>ThrowNewMemwordExistException</Name>
            </Step>
        </Request>
        <Response/>
    </PreFlow>
    <PostFlow name="PostFlow">
        <Request/>
        <Response>
            <Step>
                <Name>Add-CORS</Name>
            </Step>
        </Response>
    </PostFlow>
    <Flows>
        <Flow name="create">
            <Description/>
            <Condition>(proxy.pathsuffix MatchesPath "/session/open") and (request.verb = "POST")</Condition>
            <Request>
                <Step>
                    <Name>SaveMessageId</Name>
                </Step>
                <Step>
                    <Name>GetUsernameFromJSON</Name>
                </Step>
            </Request>
            <Response>
                <Step>
                    <Name>GetResponseCode</Name>
                </Step>
                <Step>
                    <Name>GetUserID</Name>
                </Step>
                <Step>
                    <Condition>(response_code equals "memword")</Condition>
                    <Name>GetResponseMemword</Name>
                </Step>
                <Step>
                    <Condition>(response_code equals "success")</Condition>
                    <Name>GenerateJSONForSuccess</Name>
                </Step>
                <Step>
                    <Condition>(response_code equals "memword")</Condition>
                    <Name>GenerateJSONForMemword</Name>
                </Step>
                <Step>
                    <Name>ExtractDetailsFromResponse</Name>
                </Step>
                <Step>
                    <Name>ExtractTTLFromResponse</Name>
                </Step>
                <Step>
                    <Condition>(response_code equals "success") or (response_code equals "memword")</Condition>
                    <Name>SaveDetailsInCache</Name>
                </Step>
                <Step>
                    <Condition>(response_code startsWith "fail")</Condition>
                    <Name>ThrowNewAuthFailException</Name>
                </Step>
            </Response>
        </Flow>
        <Flow name="hello">
            <Description/>
            <Request/>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/hello") and (request.verb = "GET")</Condition>
        </Flow>
        <Flow name="invalidate">
            <Description/>
            <Request>
                <Step>
                    <Name>GetDetailsFromCache</Name>
                </Step>
                <Step>
                    <Name>InvalidateSession</Name>
                </Step>
                <Step>
                    <Name>GetDetailsFromCache</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/session/close") and (request.verb = "POST")</Condition>
        </Flow>
        <Flow name="validate">
            <Description/>
            <Request/>
            <Response>
                <Step>
                    <Condition>(proxy.pathsuffix MatchesPath "/session/ttl/**") or (proxy.pathsuffix MatchesPath "/session/validate") or (proxy.pathsuffix MatchesPath "/session/renew") or (proxy.pathsuffix MatchesPath "/session/invoiceInfo/**")</Condition>
                    <Name>GenerateJSONForValidate</Name>
                </Step>
            </Response>
            <Condition>(proxy.pathsuffix MatchesPath "/session/validate") and (request.verb = "POST")</Condition>
        </Flow>
        <Flow name="openMemword">
            <Description/>
            <Request>
                <Step>
                    <Name>GetDetailsFromCache</Name>
                </Step>
                <Step>
                    <Name>SaveMessageId</Name>
                </Step>
                <Step>
                    <Name>SaveRequestVariablesForMemwordOpen</Name>
                </Step>
                <Step>
                    <Name>PushDataFromCacheToRequestOrResponseBody</Name>
                </Step>
                <Step>
                    <Condition>(DetailsFromCache is null)</Condition>
                    <Name>ThrowNewEmptyDetailsException</Name>
                </Step>
                <Step>
                    <Name>ExtractOwnerFromJSON</Name>
                </Step>
                <Step>
                    <Name>GenerateJSONForServerRequestOpenMemword</Name>
                </Step>
            </Request>
            <Response>
                <Step>
                    <Name>GetResponseCode</Name>
                </Step>
                <Step>
                    <Name>PushDataFromCacheToRequestOrResponseBody</Name>
                </Step>
                <Step>
                    <Condition>(response_code  NotEquals "success")</Condition>
                    <Name>ThrowNewDifferentMemwordException</Name>
                </Step>
                <Step>
                    <Name>ExtractOwnerFromJSON</Name>
                </Step>
                <Step>
                    <Name>ExtractTTLFromJSON</Name>
                </Step>
                <Step>
                    <Name>GenerateJSONForMemwordOpen</Name>
                </Step>
                <Step>
                    <Name>ExtractTTLFromResponse</Name>
                </Step>
                <Step>
                    <Name>ExtractDetailsFromResponse</Name>
                </Step>
                <Step>
                    <Name>SaveDetailsInCache</Name>
                </Step>
            </Response>
            <Condition>(proxy.pathsuffix MatchesPath "/session/open/memword") and (request.verb = "POST")</Condition>
        </Flow>
        <Flow name="ttl">
            <Description/>
            <Request>
                <Step>
                    <Name>GetDetailsFromCache</Name>
                </Step>
                <Step>
                    <Name>PushDataFromCacheToRequestOrResponseBody</Name>
                </Step>
                <Step>
                    <Name>ExtractOwnerFromJSON</Name>
                </Step>
                <Step>
                    <Name>InvalidateSession</Name>
                </Step>
                <Step>
                    <Name>SaveMessageId</Name>
                </Step>
                <Step>
                    <Name>ExtractTTLFromURL</Name>
                </Step>
            </Request>
            <Response>
                <Step>
                    <Name>GenerateJSONForTTL</Name>
                </Step>
                <Step>
                    <Name>ExtractDetailsFromResponse</Name>
                </Step>
                <Step>
                    <Name>ExtractTTLFromResponse</Name>
                </Step>
                <Step>
                    <Name>SaveDetailsInCache</Name>
                </Step>
            </Response>
            <Condition>(proxy.pathsuffix MatchesPath "/session/ttl/**") and (request.verb = "POST")</Condition>
        </Flow>
        <Flow name="renew">
            <Description/>
            <Request>
                <Step>
                    <Name>GetDetailsFromCache</Name>
                </Step>
                <Step>
                    <Name>PushDataFromCacheToRequestOrResponseBody</Name>
                </Step>
                <Step>
                    <Name>ExtractOwnerFromJSON</Name>
                </Step>
                <Step>
                    <Name>ExtractTTLFromJSON</Name>
                </Step>
                <Step>
                    <Name>InvalidateSession</Name>
                </Step>
                <Step>
                    <Name>SaveMessageId</Name>
                </Step>
            </Request>
            <Response>
                <Step>
                    <Name>GenerateJSONForRenew</Name>
                </Step>
                <Step>
                    <Name>ExtractDetailsFromResponse</Name>
                </Step>
                <Step>
                    <Name>ExtractTTLFromResponse</Name>
                </Step>
                <Step>
                    <Name>SaveDetailsInCache</Name>
                </Step>
            </Response>
            <Condition>(proxy.pathsuffix MatchesPath "/session/renew") and (request.verb = "POST")</Condition>
        </Flow>
        <Flow name="searchInvoice">
            <Description/>
            <Request>
                <Step>
                    <Name>GetDetailsFromCache</Name>
                </Step>
                <Step>
                    <Name>ExtractOwnerFromJSON</Name>
                </Step>
                <Step>
                    <Name>GenerateJSONRequestForInvoice</Name>
                </Step>
                <Step>
                    <Name>GetUserIdForInvoice</Name>
                </Step>
                <Step>
                    <Condition>(name NotEquals userID)</Condition>
                    <Name>ThrowNewSessionOwnerNotEqualsUserIDException</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/invoiceInfo/search") and (request.verb = "POST")</Condition>
        </Flow>
        <Flow name="countInvoice">
            <Description/>
            <Request>
                <Step>
                    <Name>GetDetailsFromCache</Name>
                </Step>
                <Step>
                    <Name>ExtractOwnerFromJSON</Name>
                </Step>
                <Step>
                    <Name>GenerateJSONRequestForInvoice</Name>
                </Step>
                <Step>
                    <Name>GetUserIdForInvoice</Name>
                </Step>
                <Step>
                    <Condition>(name NotEquals userID)</Condition>
                    <Name>ThrowNewSessionOwnerNotEqualsUserIDException</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/invoiceInfo/counts") and (request.verb = "POST")</Condition>
        </Flow>
    </Flows>
    <HTTPProxyConnection>
        <BasePath>/mobilegw</BasePath>
        <Properties/>
        <VirtualHost>default</VirtualHost>
        <VirtualHost>secure</VirtualHost>
    </HTTPProxyConnection>
    <RouteRule name="validateCredentials">
        <Condition>(proxy.pathsuffix MatchesPath "/session/open") and (request.verb = "POST")</Condition>
        <TargetEndpoint>opensession</TargetEndpoint>
    </RouteRule>
    <RouteRule name="validateMemword">
        <Condition>(proxy.pathsuffix MatchesPath "/session/open/memword") and (request.verb = "POST")</Condition>
        <TargetEndpoint>openmemword</TargetEndpoint>
    </RouteRule>
    <RouteRule name="service-user">
        <Condition>(proxy.pathsuffix MatchesPath "/hello") or (proxy.pathsuffix MatchesPath "**/invoiceInfo/**")</Condition>
        <TargetEndpoint>service-user</TargetEndpoint>
    </RouteRule>
    <RouteRule name="noroute"/>
</ProxyEndpoint>
0 0 115