Hi Folks,
This series covers all about:
Connecting and Exposing API Endpoint from SAP Cloud Integration
Here is the list of blogs:
Part 1:
Pre-requisites and Configuration
Part 2:
Connect, Expose & Test API Endpoint
In Part 1, we discussed regarding creating Services and Instances required for API Management. In nutshell, we covered creation of initial instances required for SAP API Management and SAP BTP Server.
In this blog post, we will discuss regarding exposing Integration Flow Endpoint as an API.
Design Simple I-Flow
In Cloud Integration tenant, I have designed a simple i-flow:
API Connectivity Test
It will generate Sender HTTPS endpoint. Content Modifier body is updated with some dummy message to display in response.

1. Create an API Provider
Access
API Portal by selecting
Configure >
APIs

Hit
Create button to create an API Provider.

In
Overview, Enter the
Name and Description of API Provider

Under
Connection, Select as below:
Type
: Cloud Integration,
Authentication
: OAuth2ClientCredentials
For
Cloud Integration Management Host,
Client Id and
Client Secret, follow below steps:
- In BTP Cockpit, Go to Instances and Subscriptions in your subaccount.
- Access Service Key Credentials for api Plan for service Process Integration Runtime.

Copy
ClientId, clientsecret and
url escaping the prefix of
https://

Paste the copied content below
as shown:

Once done,
Save.

Test Connection to check connectivity between SAP API Management and SAP BTP Server.

If everything looks fine, you are ready to use this API Provider to browse through the Integration Flows and generate an API for any chosen Integration Flow.
2. Create an API
Navigate API Portal,
Design >
APIs

Select
Createbutton
.

API 1: To Connect with SAP Cloud Integration Flow
Select radio button:
API Provider. In API provider dropdown, select the provider created in above steps and hit
Discover.

Select the i-flow whose endpoint is to be exposed as an API and hit
Next.

PS: It will ask to Create an API Provider again. These credentials can be fetched from SAP BTP Cockpit as described in below steps:
Step1: In SAP BTP Cockpit, navigate to
Instances and Subscriptions of your subaccount, open the
Service Key Credentials of
integration-flow plan.

This time, Copy the t
okenurl, clientid and clientsecret from service key credentials:

And
paste it in the dialog box as shown below and hit
Done.

Enter
Version:
v1 (optional) and
Create.

Assign the Policies
Select
Policies and assign them to the API Proxy URL as shown:

In the
Proxy Endpoint >
PreFlow add the required Policies for demo purposes.
I added
Spike Arrest and
OAuth 2.0.
Spike Arrest Policy:

Oauth V2.0 Policy:

- Spike Arrest: The SpikeArrest policy protects against traffic surges with the <Rate> element. This element throttles the number of requests processed by an API proxy and sent to a backend, protecting against performance lags and downtime.
- OAuth 2.0: This policy helps to verify the incoming token for OAuth Authentication
Post policies update, Click
Save and
Deploy the API Proxy.
It will deploy the generated
API Proxy URL with assigned Policies:

API 2: Create an API to Generate Token
Create an API for Generating the token using OAuth 2.0 Authentication to access SAP BTP Integration flow. Provide below details as shown:

In Policies, assign
OAuth v2.0 Policy in ProxyEndpoint > Preflow as we did earlier:

Make Sure you change the XML code Operation
VerifyAccessToken to
GenerateAccessToken as shown below

Code here:
<OAuthV2 async="false" continueOnError="false" enabled="true" xmlns="http://www.sap.com/apimgmt">
<Operation>GenerateAccessToken</Operation>
<GenerateResponse/>
<SupportedGrantTypes>
<GrantType>client_credentials</GrantType>
</SupportedGrantTypes>
</OAuthV2>
Add
oAuthToken flow under
ProxyEndPoint and add the below condition string:
(proxy.pathsuffix MatchesPath "/OAuthToken" OR proxy.pathsuffix MatchesPath "/OAuthToken/**" OR proxy.pathsuffix MatchesPath "/OAuthToken(**")AND(request.verb = "POST")

Add another flow under
ProxyEndPoint as DefaultFaultFlow and assign
Fault Raise policy to catch any error or fault:

Also, provide the given condition string for
DefaultFaultFlow:
proxy.pathsuffix MatchesPath "/OAuthToken" OR proxy.pathsuffix MatchesPath "/OAuthToken/**" OR proxy.pathsuffix MatchesPath "/OAuthToken(**"
3. Create a Product
Once APIs are created, we need to add them under a product.
Go to
Product tab and select
create

Enter the details (
Name and
Title will be suffice) for the product:

In
API tab, Click
Add and select the APIs we created in above steps and hit
OK.

After adding the APIs, Publish the Product.

4. Create an Application
Access
API Business Hub Enterprise as shown below:

On the home screen, you will find the created Product.

Select the product, Click on
Subscribe >
Create New Application

Enter the Application
Title and Save.

The Application is created with the subscribed product as shown below:

Go Back to API Portal. Open the created Application and note somewhere in notepad
Application Key and
Application Secret (it will be used during API Tesing via Postman):

5. Test the API:
Open
Postman to test the API.
Use
Get Method and paste the API Proxy URL for
API 1.
and In Authorization tab, select Type:
OAuth 2.0:
Now, at right side menu, add any Token Name. Select details as below:
Grant Type: |
Client Credentials |
Client Id: |
add Application Key copied above |
Client Secret |
add Application Secret copied above |
Access Token URL |
Enter the API Proxy Url of API 2 |
Screenshot below:

Now, Click on
Get New Access Token and hit
Proceed. Click on
Use Token.
Add test payload in postman
Body and click on
Send

Hooray..!!
We got
Status:
200 OK and a response back as configured in content modifier body in iflow.
Hope you had a good read.