Azure API Management
Description:
So my organization needed a way to send API calls to a third party application that required a static IP from us outbound
so they could whitelist inbound. We ended up using Azure API management to accomplish this. To further clarify, you can have Azure Logic Apps, Azure Functions, Azure $x call this API management endpoint and it will forward the API calls to a third party. This is a huge win since most organizations I work with will want a single IP to whitelist. This allows me to send API payloads from many Azure tools and only provide a single IP to a third party vendor. If only there was a way to do this with binary files (SFTP transfers without a virtual machine) as well…
To Resolve:
- First, deploy an instance in the Azure portal.
- This takes a while. After it is done, in the Azure Portal go to:
- API’s blade => Echo API => Settings tab => Take note of
Web Service: http://echoapi.cloudapp.net/api
.
- API’s blade => Echo API => Settings tab => Take note of
- For your organizations API’s, you will replace this with the base URI of the endpoint you want to connect to. For example, for Service Now this is
yourcompany.service-now.com/api
. Let’s go ahead and create it:- In API’s blade => Click
Add API
=> TypeSN Test
as display nameSN-Test
as namehttps://yourcompany.service-now.com/api
for Web Service URL/sn-test/
as the API URL Suffix. This is the first part of the URL you will hit to go to SN Test e.g.https://my-org.azure-api.net/sn-test/
- On the same blade, go to Design tab. This lists all the operations you can perform on your API.
- Click
Add Operation
=> Name itGet Request
=> On Front End => Edit => URLGET /now/table/sc_request
=> Save
- Click
- On the same blade, go to the Test tab. Click on
Get Request
and click on the eye icon in bottom right to get theOcp-Apim-Subscription-Key
under the HTTP Request section. We will need this to test from Postman.
- In API’s blade => Click
- Now inside Postman:
- Set operation to
GET
- Set URL to
https://my-org.azure-api.net/sn-test/now/table/sc_request?sysparm_query=sys_id%3D1e04601adb2ad0106b29d411ce96199e
- First part
https://my-org.azure-api.net/sn-test/
is your API Management instance which redirects to the API you just created - Second part
/now/table/sc_request
is how to hit SN Request table via API. - Last part
?sysparm_query=sys_id%3D1e04601adb2ad0106b29d411ce96199e
is a query put in any SN sys Id you want.
- First part
- Under
Authorization
tab, setup what your organization uses. We use Basic so I put in Username/Password of our API user. - Under
Headers
tab, put inOcp-Apim-Subscription-Key
andOcp-Apim-Trace
as keys and values are what you copied as the key andtrue
. - Send it. Should be good to go!
- Set operation to
- At this stage, you can keep adding API endpoints and operations as you see fit. But what if you already have some as Postman collections? Well that is where you need to use OpenMan to convert Postman 2.1 collections to OpenAPI spec for Azure API Management. I had to do this so this is what I did:
- Export v2.1 in Postman to
c:\scripts
- In wsl:
- Type:
pip3 install openman
- Type:
openman convert /mnt/c/scripts/p.json /mnt/c/scripts/spec2.yaml
- Type:
- Inside Azure API Management portal, go to API’s => Add API => OpenAPI Spec => Browse => Upload the yml file, ignore errors
- Export v2.1 in Postman to
- At this point, you should be good to go but wanted to include some additional info: To learn more about API Management, what I did was click on
Echo API
and went to Design tab =>Post Create Resource
=> FrontEnd => Edit => Then looked at bottom sections: Template, Query, Headers, Request, Responses.- These are similar to Postman tabs. Inside each one you put a key and an example. For example, go to the
Request
sub-tab:- Type:
application/json
under Content-Type - Type
{"vehicleType": "train","maxSpeed": 125,"avgSpeed": 90,"speedUnit": "mph"}
under Sample - Save
- Type:
- In Postman
- Set operation to
POST
- Set endpoint to
https://my-org.azure-api.net/echo/resource
- Set headers to:
Content-Type
:application/json
Ocp-Apim-Subscription-Key
:mykey-89de6714c26795e09
Ocp-Apim-Trace
:true
- Set body to:
1 2 3 4 5 6
{ "vehicleType": "train-blahblahblah", "maxSpeed": 125, "avgSpeed": 90, "speedUnit": "mph" }
- Send => Response should come back with a json object with a
vehicleType
oftrain-blahblahblah
- Set operation to
- Now replace url with:
http://echoapi.cloudapp.net/api/resource
=> Delete the subscription headers and send again => should get the same thing. Get it?
- These are similar to Postman tabs. Inside each one you put a key and an example. For example, go to the
Comments