Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

The API Gateway has a default mediation flow , which that is executed in each API invocation. You can do additional custom mediation for the messages in the API Gateway by extending their its mediation flow. An extension is provided as a synapse mediation sequence.

You can design all sequences using a tool like WSO2 Developer Studio, and store the sequence.xml file in the governance registry. The registry collection where sequences are stored is customsequences, which is available by default in apimgt governance registry location. The registry path is /_system/governance/apimgt/customsequences. Store the InSequence files in apimgt/customsequences/in folder and the OutSequence files in apimgt/customsequences/out folder. For example, if you have an in sequence file as testInSequence, you must save it in /_system/governance/apimgt/customsequences/in/testInSequence.xml and if you have an out sequence file as testOutSequence, save it in /_system/governance/apimgt/customsequences/out/testOutSequence.xml.

There are two ways to apply mediation extensions to messages. They are as follows:

...

Given below is the naming pattern of the sequence to follow when creating a global extension sequence.

...

The <DIRECTION> can be either In or Out. When the direction of the sequence is In, the extension is triggered on the in-flow (request path). When the direction of the sequence is Out, the extension is triggered on the out-flow (response path). Following Shown below is an example synapse configuration of a global extension sequence.

...

To test the code, copy it to an XML file (e.g., global_ext.xml) and save the file in the <APIM_HOME>/repository/deployment/server/synapse-configs/default/sequences directory. The above sequence prints a log message on the console on every API invocation.

...

Given below is the naming pattern to follow when creating of a per-API extension sequence.

<API_NAME>:v<VERSION>--<DIRECTION>

Following Shown below is an example synapse configuration of a per-API extension sequence. It is created for an API named admin--TwitterSearch with version 1.0.0.

Code Block
titleAPI Extension Sequence Example
<sequence xmlns="http://ws.apache.org/ns/synapse" name="admin--TwitterSearch:v1.0.0--In">
    <log level="custom">
        <property name="TRACE" value="API Mediation Extension"/>
    </log>
</sequence>
Info

NOTE: The tenant username must be given as <username>-AT-<domain> in the configuration. For example, if the tenant username is testuser and the domain is wso2.com, then the name attribute in the above configuration must be testuser-AT-wso2.com--TwitterSearch:v1.0.0–In. The @ sign must given as AT.

To test the code in super-tenant mode, copy it to an xml XML file (e.g., twittersearch_ext.xml) and save the file in the <APIM_HOME>/repository/deployment/server/synapse-configs/default/sequences directory, if you are using a standalone server. In multi-tenant mode, copy the file to the tenant's synapse sequence folder. For example, if tenant id is 1, then copy it to <API_Gateway>/repository/tenants/1/synapse-configs/default/sequences folder. 

The above sequence prints a log message on the console whenever the TwitterSearch API is invoked.

Selecting predefined APIs from the UI

Alternatively to the above approach, you can also attach extension sequences to an API using the API Publisher Web interface at the time the API is created. Log in to the API Publisher (https://localhost:9443/publisher) and click Add from the left panel. In the Add New API page that opens, navigate down to the Sequences section. There, you can select In/Out sequences for the API from the drop-down lists. For example,

Image Added

To populate these drop-down lists, you must add mediation sequences as explained in the beginning.

Invoking the extension sequences

When an API is published, a file with its synapse configuration gets is created on the API Gateway. If you inspect the This synapse configuration of an API, you will see has a set of handlers as shown in the following example:

...

The handler by the name APIManagerExtensionHandler triggers both global as well as per-API extension sequences. It reads the sequence names and determine determines what APIs need to must be invoked. By default, the extension handler is listed at last in the handler chain, and therefore is executed at last. You can configure the API Gateway to execute extension handlers first. To do that, open <APIM_HOME>/repository/conf/api-manager.xml file, uncomment the <ExtensionHandlerPosition> element section and provide the value top as follows:

...

For more information on Handlers, see Architecture Components.

 

Allowing publisher to select the predefined sequences

If we  have  custom sequences  with the naming convention as described above we can execute them. But if we want to allow publisher to select the sequences, when he defines the API, now we can do that via publisher webapp.

User can design all sequences using Dev Studio or any other tool, and store the sequence.xml file in the governance registry. We have introduced a new collection called "customsequences" at apimgt governance registry location. Store the InSequence files at   apimgt/customsequences/in folder 

Eg: If you have a in sequence file named as "testInSequence", you need to save the file here;

  /_system/governance/apimgt/customsequences/in/testInSequence.xml

Same like insequence, for Out Sequences, user need to create another folder called "out" parallel to "in" folder.

Eg: If you have a out sequence file named as "testOutSequence", you need to save the file here;

  /_system/governance/apimgt/customsequences/out/testOutSequence.xml

After saving the files, these seuences will be visible at publisher webapp, when publisher try to create an API. User has to check the option at the UI to select a custom sequence for InFlow and OutFlow.

Those sequences will be renamed and deployed to synapse when we publish the API to gateway.