If you’ve got legacy applications written in WSDL or SOAP, and you are planning to expose it as a rest endpoint, Azure API Management seems to be good option at the moment. Another option is apigee; Although, it seems to miss some of the features thats available through Azure API management. AWS doesnt seem to have any support out of the box for this particular scenario.

I will use a public calculator wcf service available here for showing whats involved in setting it up in Azure API Management.

Azure API Management - SOAP to REST

From the Azure Portal, Search for API management and select Create.

Search for API Management Search for API Management

Give your API management service a name, select appropriate subscription, resource group, location, org name, etc in the following form.

The process of actually activating the service creation took about 30 minutes for me.

After the creation and activation of the service, navigate to the API tab, select add API and select WSDL tile.

Create new WSDL API Create new WSDL API

In the following screen, select Full option and enter fill out the form appropriately.

Full create from WSDL wizard Full create from WSDL wizard

Notice that the import method can be either SOAP pass-through and SOAP to REST and I have selected “SOAP to Rest”. Selecting the “Full” option has also given me option to configure versioning for the API as well. There are 3 options for Versioning schema. “Path” (which I have chosen here), “Header” and “Query string”.

SOAP to REST Azure API management design screen SOAP to REST Azure API management design screen

As part of the import process, Azure API Management is generating special policies that to the inbound transform from JSON to a SOAP envelope, and vice versa on the outbound flow.

To test the restful apis, let’s go to the “developer portal” by clicking on the link at the top left hand corner. And navigate to “Calculator API”. Once you are at the Calculator API v1 documentation site, select “Try It”. You can also use “Test” tab from with Azure Portal do the same steps below.

Azure API Management - Making a request Azure API Management - Making a request

In the screenshot above, I am making the POST request to the Add operation 1+1. In the response you can see, I got 2 back as the answer. Notice in url, the version v1 is in the path. Azure API Management has added the headers Ocp-Apim-Trace: true and Ocp-Apim-Subscription-Key for me. Ocp-Apim-Subscription-Key is used to authenticate the request.

You can disable the need to require a subscription key for making the requests through the Product the API is associated with from the Azure Portal. However, please be aware that doing so, you will loose all metrics associated with the different users and any other functionalities that you may wish to apply differently to different users. This might be a good option for you if you plan to call the Calculator API from a SPA application. You can then choose to authenticate the user using OAuth 2.0 or OpenID Connect. These options are available under Settings from the Azure Poral.

Ocp-Apim-Trace: true header allows you to diagnose the API requests, such as the policies, transformations, and any errors in the pipeline. You can select the “Trace” tab to take a look at the response.

Authentication

I have already mentioned the ability to choose an authentication option above. The possible options are None , OAuth 2.0 , and OpenID Connect. There is also a policy that you can add to the api endpoints that can validate JWT Token as well.

Application Insights

You can configure to use an Application Insights instance for monitoring the API. And this could be an individual Application Insight instance per API version.

Azure API Management - Application Insight settings Azure API Management - Application Insight settings

Advanced options in the screenshot above allows you to set Headers and First bytes of body per pipeline.

Application Insight - Application map Application Insight - Application map

Next steps

You can image rewriting each API endpoint to point to different backend one at a time. Azure API Management makes it easy to do this. From the API Design view , You can select individual operation and edit the backend for that operation.

![Migrate API Management Operation][https://res.cloudinary.com/chekkan/image/upload/v1549403307/Screen_Shot_2018-12-14_at_15.55.36_iontjs.png] Migrate API Management Operation

You can overwrite the http(s) endpoint and make the operation point to a totally new endpoint. An Azure Function endpoint perhaps?. The Azure Resource option only seems to allow you to select a Logic App. But, would make sense to allow other resources as well.

Additional Resources