Loading...

Set up an API within Azure API Management to facilitate the implementation of server-sent events.

Set up an API within Azure API Management to facilitate the implementation of server-sent events.

Server-Sent Events (SSE) is a web technology designed to enable servers to transmit data to clients without the need for client-initiated requests. SSE proves to be highly advantageous for applications requiring real-time updates, such as chat platforms, news feeds, or stock price trackers. Traditionally, these applications would involve clients repeatedly requesting data from servers at predefined intervals.

 

This blog post delves into the configuration process of setting up a server-sent events (SSE) API within Azure API Management (APIM). APIM is a comprehensive service offering the creation, publication, management, and security of APIs. APIM facilitates SSE APIs by applying a specialized policy that enables the seamless transmission of streaming responses.

 

Step-by-Step Guide: Configuring a Sample SSE API in Azure API Management

 

To configure a sample SSE API in APIM, adhere to the following instructions:

 

  • Let's consider the following publicly accessible SSE API provided by Postman as an illustrative example:

   postman-echo.com/server-events/:numberOfEvents

 

anjalidivitha_0-1683869074960.png

 

  • Import this SSE API as a HTTP API into APIM, depending on your specific requirements,

anjalidivitha_1-1683869074994.png

 

  • Create a GET operation that includes a query parameter named 'eventscount' to specify the desired number of events to generate,

anjalidivitha_2-1683869075006.png

 

 

  • Navigate to the Inbound processing tab and incorporate the "Stream response content" policy as demonstrated below. 

anjalidivitha_3-1683869075029.png

 

<policies> <inbound> <base /> </inbound> <backend> <forward-request timeout="60" buffer-response="false" fail-on-error-status-code="true" /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies>

 

  • Save the policy and proceed to test the SSE API within APIM.

Testing:

 

  • Fetch the Request URL of the API endpoint from Azure Portal:

anjalidivitha_4-1683869075043.png

 

  • Utilize Postman or any other SSE-compatible tool to send a GET request to the APIM endpoint, including the query parameter ‘eventscount’ with a value of, for example, 10.

anjalidivitha_5-1683869075054.png

 

  • You should observe the streaming of 10 events with data being transmitted from the server and we can confirm that the APIM endpoint successfully streams the events retrieved from the backend server.

Potential causes for the SSE API not functioning as anticipated in APIM may include:

 

When utilizing APIM to access a backend API implementing SSE, it is essential to follow these guidelines for verification:

 

  • To prevent issues with SSE APIs in APIM, it is recommended to disable request/response body logging for Azure Monitor and Application Insights. These services offer application performance monitoring features, allowing the logging of request/response bodies at various stages of request execution. However, for SSE APIs, logging can cause unexpected buffering and potential problems. Azure Monitor and Application Insights diagnostic settings configured at the global/All APIs scope apply to all APIs within the service, but you can override these settings for individual APIs as needed. Disabling request/response body logging ensures improved performance and reliability of SSE APIs by avoiding unnecessary data collection.

anjalidivitha_6-1683869075057.png

  • SSE requires a persistent HTTP connection, which is supported by the dedicated API Management tiers (Premium, Standard, Basic, and Developer). However, the Consumption tier does not support persistent connections. Consider selecting a suitable service tier that supports SSE based on your requirements.
  • To prevent idle connections from timing out, it is recommended to use methods that keep them active. For example, you can set up a TCP keepalive signal on the backend side of the connection or ensure that the client sends data at least every 4 minutes.
  • To ensure clients receive events as soon as they occur, disable response buffering in the forward-request policy. This can be achieved by setting the buffer-response attribute to false, as demonstrated below:

 

<forward-request timeout="120" fail-on-error-status-code="true" buffer-response="false"/>

 

  • Avoid using policies that introduce delays in responses. Certain policies like validate-content can hold up response content, which is not suitable for SSE APIs.
  • Make sure to disable response caching to ensure that clients receive timely notifications.
  • Before launching your API, thoroughly test its performance under stress. Utilize common methods to simulate heavy load and identify any speed or stability issues.

I hope you find these guidelines helpful and informative. If you have any questions or feedback, please feel free to leave a comment below :)

 

Reference: https://learn.microsoft.com/en-us/azure/api-management/how-to-server-sent-events

 

Published on:

Learn more
Azure PaaS Blog articles
Azure PaaS Blog articles

Azure PaaS Blog articles

Share post:

Related posts

Azure Storage - TLS 1.0 and 1.1 retirement

Overview TLS 1.0 and 1.1 retirement on Azure Storage was previously announced for Nov 1st, 2024, and it was postponed recently to 1 year later...

1 year ago

Efficient Management of Append and Page Blobs Using Azure Storage Actions

  Overview In Azure Storage, Blob Lifecycle Management (BLM) allows you to automate the management of your data based on rules defined by...

1 year ago

[Azure AI Search] Internal Server Error when creating CMK encrypted objects

Scenario Customers follow the Microsoft doc to create CMK encrypted objects (data source, index etc.), but get the 500 Internal Serv...

1 year ago

Optimizing Azure Table Storage: Automated Data Cleanup using a PowerShell script with Azure Automate

Scenario This blog’s aim is to manage Table Storage data efficiently. Imagine you have a large Azure Table Storage that accumulates logs from ...

1 year ago

Optimizing Azure Table Storage: Automated Data Clean-up using a PowerShell script with Azure Automat

Scenario This blog’s aim is to manage Table Storage data efficiently. Imagine you have a large Azure Table Storage that accumulates logs from ...

1 year ago

Restoring Soft-Deleted Blobs with multithreading in Azure Storage Using C#

Blob soft delete is an essential feature that safeguards your data against accidental deletions or overwrites. By retaining deleted data for a...

1 year ago

Performing simple Azure Table Storage REST API operations using curl command.

The blog provides guidance to perform simple Table Storage REST API operations such as Create table, Delete Table, Insert entity, Delete entit...

1 year ago

Bulk delete all the old jobs from the batch account

Deleting a Job also deletes all Tasks that are part of that Job, and all Job statistics. This also overrides the retention period for Task dat...

1 year ago

Utilizing Azure Storage and Runbooks for scheduled automated backups of Azure SQL Databases

In this article, we are going to provide detailed steps to create a scheduled Azure SQL Database backup to storage account using automation. T...

2 years ago

[Azure Service Bus] JMS messages getting dead-lettered

The article discusses a problem where numerous messages end up in the dead letter queue (DLQ) when the JMS service bus consumer connects to th...

2 years ago
Stay up to date with latest Microsoft Dynamics 365 and Power Platform news!
* Yes, I agree to the privacy policy