How to invoke APIs in SOAP style in Swagger
WSO2 API Manager has integrated Swagger to allow API consumers to explore APIs through a interactive console which is known as 'API Console'
This swagger based API Console supports invoking APIs i REST style out of the box. So this post going to show how we can invoke APIs in SOAP style in API console of WSO2 API Manager 1.7.0. For that we need to do few extra configurations.
1. Send SOAPAction and Content-Type header in the request
2. Enable sending SOAPAction header in the CORS configuration
First create an API for a SOAP Service. In this example I am using HelloService sample SOAP service of WSO2 Application Server. This HelloService has a operation named greet which accepts a payload as below.
Now we have to edit the default Swagger content and add SOAPAction and Content-Type header. For that go to 'Docs' tab and click 'Edit Content' for API definition.
{
"name": "SOAPAction",
"description": "OAuth2 Authorization Header",
"paramType": "header",
"required": false,
"allowMultiple": false,
"dataType": "String"
},
{
"name": "Content-Type",
"description": "OAuth2 Authorization Header",
"paramType": "header",
"required": false,
"allowMultiple": false,
"dataType": "String"
}
This swagger based API Console supports invoking APIs i REST style out of the box. So this post going to show how we can invoke APIs in SOAP style in API console of WSO2 API Manager 1.7.0. For that we need to do few extra configurations.
1. Send SOAPAction and Content-Type header in the request
2. Enable sending SOAPAction header in the CORS configuration
First create an API for a SOAP Service. In this example I am using HelloService sample SOAP service of WSO2 Application Server. This HelloService has a operation named greet which accepts a payload as below.
<soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://www.wso2.org/types"> <soapenv:header> <soapenv:body> <typ:greet> <!--Optional:--> <name>lakmali</name> </typ:greet> </soapenv:body> </soapenv:header></soapenv:envelope>
1. Create API
Figure-1 : Design API
Figure-2 : Implement API by giving SOAP endpoint
Figure-3 :Save and Publish API
2. Update Swagger API Definition
Now we have to edit the default Swagger content and add SOAPAction and Content-Type header. For that go to 'Docs' tab and click 'Edit Content' for API definition.
Figure-4: Edit Swagger API definition
Since we have to send a payload in the request, locate the POST http method in the content. Then add below content into the 'parameters' section of POST http method.
"name": "SOAPAction",
"description": "OAuth2 Authorization Header",
"paramType": "header",
"required": false,
"allowMultiple": false,
"dataType": "String"
},
{
"name": "Content-Type",
"description": "OAuth2 Authorization Header",
"paramType": "header",
"required": false,
"allowMultiple": false,
"dataType": "String"
}
Then the complete POST HTTP method definition would look like below.
Figure-5: Edited Swagger API definition
After doing the above changes Save & Close.
Now if you go to API Store and click on the created API, and the go to API Console, you should see the SOAPAction and Content-Type fields are added to the Swagger UI.
Figure-6: API Console with new header parameters
3. Add New Headers to CORS Configuration
Although we have added required headers, those will be sent in the request oly if they are set as allowed headers in the CORS configuration.
For that open APIM_HOME/repository/conf/api-manager.xml file and locate CORSConfiguration. Then add SOAPAction in to available list of Access-Control-Allow-Headers as below (Content-Type is added by default, So we have to only add SOAPAction).
Figure-7: API Console with new header parameters
After adding the headers, restart the api manager and invoke the API through API Console.
When invoking the API, set the SOAPAction according to your SOAP service. Also set the COntent-Type header as 'text/xml'
Figure-8: API Console Invoke API
If you face any issues with swagger invoke, please go through this.
Hi Lakmali,
ReplyDeleteDo you have the updated blog for version 1.8.0? The API Console looks differently now. The return is empty. Could you please show how to do the same in 1.8.0?
Thanks,
Mark
Hi Lakmali,
ReplyDeleteNice content, I'm trying to use in Swagger 2.0 with editor. If I had success I give you e feed baks.
Tks
Does this work with the current version of swagger?
ReplyDelete