Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

MULE API Kit: MULE and RAML

DZone's Guide to

MULE API Kit: MULE and RAML

Here's an example of MULE and RAML working together in one potent combination.

· Integration Zone
Free Resource

Share, secure, distribute, control, and monetize your APIs with the platform built with performance, time-to-value, and growth in mind. Free 90-day trial of 3Scale by Red Hat

RAML: REST API Modeling Language. RAML is used to design and manage the whole REST API lifecycle.

MULE API Kit: Helps to build the APIs from Anypoint Studio using a RAML file.

I will be explaining the generating flows from the RAML file and executing it.

Prerequisite: Basic knowledge of RAML and basic knowledge of mule flows.

Step 1:

Create a new project in MULE.

Step 2:

Create a RAML file using the RAML API editor in Anypoint Studio (I am using version 6.0.0).

#%RAML 0.8
    title: RAMLwithMULE
    version: 1.0
    baseUri: http://localhost:8080/api

    /get:
        get:
            description: sample
            responses:
                200:
                    body:
                        text/plain:
                            example: This is get call, MULE flow from RAML
    /show:
        get:
            description: sample
            responses:
                200:
                    body:
                        text/plain:
                            example: This is get call and name show, MULE flow from RAML


Step 3:

Generate flows from RAML.  Right click on RAML file ->MULE->Generate Flows from RAML.


Step 4:

A MULE XML file will be generated based on the RAML file.

Flow xml image-

Image title

Flow XML -

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:apikit="http://www.mulesoft.org/schema/mule/apikit" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/apikit http://www.mulesoft.org/schema/mule/apikit/current/mule-apikit.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
    <http:listener-config name="test2-httpListenerConfig" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
    <apikit:config name="test2-config" raml="test2.raml" consoleEnabled="true" consolePath="console" doc:name="Router"/>
    <flow name="test2-main">
        <http:listener config-ref="test2-httpListenerConfig" path="/api/*" doc:name="HTTP"/>
        <apikit:router config-ref="test2-config" doc:name="APIkit Router"/>
        <exception-strategy ref="test2-apiKitGlobalExceptionMapping" doc:name="Reference Exception Strategy"/>
    </flow>
    <flow name="get:/get:test2-config">
        <set-payload value="This is get call, generated MULE flow from RAML" doc:name="Set Payload"/>
    </flow>
    <flow name="get:/show:test2-config">
        <set-payload value="This is get call and name show, generated MULE flow from RAML" doc:name="Set Payload"/>
    </flow>
    <apikit:mapping-exception-strategy name="test2-apiKitGlobalExceptionMapping">
        <apikit:mapping statusCode="404">
            <apikit:exception value="org.mule.module.apikit.exception.NotFoundException" />
            <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/>
            <set-payload value="{ &quot;message&quot;: &quot;Resource not found&quot; }" doc:name="Set Payload"/>
        </apikit:mapping>
        <apikit:mapping statusCode="405">
            <apikit:exception value="org.mule.module.apikit.exception.MethodNotAllowedException" />
            <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/>
            <set-payload value="{ &quot;message&quot;: &quot;Method not allowed&quot; }" doc:name="Set Payload"/>
        </apikit:mapping>
        <apikit:mapping statusCode="415">
            <apikit:exception value="org.mule.module.apikit.exception.UnsupportedMediaTypeException" />
            <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/>
            <set-payload value="{ &quot;message&quot;: &quot;Unsupported media type&quot; }" doc:name="Set Payload"/>
        </apikit:mapping>
        <apikit:mapping statusCode="406">
            <apikit:exception value="org.mule.module.apikit.exception.NotAcceptableException" />
            <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/>
            <set-payload value="{ &quot;message&quot;: &quot;Not acceptable&quot; }" doc:name="Set Payload"/>
        </apikit:mapping>
        <apikit:mapping statusCode="400">
            <apikit:exception value="org.mule.module.apikit.exception.BadRequestException" />
            <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/>
            <set-payload value="{ &quot;message&quot;: &quot;Bad request&quot; }" doc:name="Set Payload"/>
        </apikit:mapping>
    </apikit:mapping-exception-strategy>
</mule>


Run the project as a MULE application and access the API.

Two methods defined in the RAML file:

This is a get call, generated MULE flow from RAML.

This is get call and method name show, generated MULE flow from RAML.


Explore the core elements of owning an API strategy and best practices for effective API programs. Download the API Owner's Manual, brought to you by 3Scale by Red Hat

Topics:
mule ,raml

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}