Skip to main content

Actions

The ballerina/websub package exposes the following clients:

ClientPurpose
Subscription ClientSends subscription and unsubscription requests to a WebSub hub.
Discovery ServiceDiscovers WebSub hub and topic URLs from a resource URL via HTTP Link headers.

For event-driven integration, see the Trigger Reference.


Subscription client

Sends subscription and unsubscription requests to a WebSub hub.

Configuration

FieldTypeDefaultDescription
httpVersionhttp:HttpVersionHTTP_2_0HTTP protocol version to use.
http1Settingshttp:ClientHttp1Settings{}HTTP/1.x specific settings.
http2Settingshttp:ClientHttp2Settings{}HTTP/2 specific settings.
timeoutdecimal60Maximum wait time for a response in seconds.
followRedirectshttp:FollowRedirects()Redirect handling configuration.
poolConfighttp:PoolConfiguration()Connection pooling configuration.
authhttp:ClientAuthConfig()Client authentication configuration.
retryConfighttp:RetryConfig()Retry configuration for failed requests.
responseLimitshttp:ResponseLimitConfigs{}Response size limit configuration.
secureSockethttp:ClientSecureSocket()SSL/TLS configuration.
circuitBreakerhttp:CircuitBreakerConfig()Circuit breaker configuration for fault tolerance.

Initializing the client

import ballerina/websub;

configurable string hubUrl = ?;

websub:SubscriptionClient subscriptionClient = check new (hubUrl);

Operations

Subscription management

subscribe

Sends a subscription request to the WebSub hub for the specified topic.

Parameters:

NameTypeRequiredDescription
subscriptionRequestSubscriptionChangeRequestYesThe subscription request containing the topic URL, callback URL, and optional parameters such as secret and leaseSeconds.

Returns: SubscriptionChangeResponse|SubscriptionInitiationError

Sample code:

websub:SubscriptionChangeResponse response = check subscriptionClient->subscribe({
topic: "https://example.com/feed",
callback: "https://my-app.example.com/websub"
});

Sample response:

{"hub": "https://hub.example.com", "topic": "https://example.com/feed", "response": "<http:Response>"}
unsubscribe

Sends an unsubscription request to the WebSub hub for the specified topic.

Parameters:

NameTypeRequiredDescription
unsubscriptionRequestSubscriptionChangeRequestYesThe unsubscription request containing the topic URL and callback URL.

Returns: SubscriptionChangeResponse|SubscriptionInitiationError

Sample code:

websub:SubscriptionChangeResponse response = check subscriptionClient->unsubscribe({
topic: "https://example.com/feed",
callback: "https://my-app.example.com/websub"
});

Sample response:

{"hub": "https://hub.example.com", "topic": "https://example.com/feed", "response": "<http:Response>"}

Discovery service

Discovers WebSub hub and topic URLs from a resource URL via HTTP Link headers.

Configuration

FieldTypeDefaultDescription
httpVersionhttp:HttpVersionHTTP_2_0HTTP protocol version to use.
http1Settingshttp:ClientHttp1Settings{}HTTP/1.x specific settings.
http2Settingshttp:ClientHttp2Settings{}HTTP/2 specific settings.
timeoutdecimal60Maximum wait time for a response in seconds.
followRedirectshttp:FollowRedirects()Redirect handling configuration.
poolConfighttp:PoolConfiguration()Connection pooling configuration.
authhttp:ClientAuthConfig()Client authentication configuration.
retryConfighttp:RetryConfig()Retry configuration for failed requests.
responseLimitshttp:ResponseLimitConfigs{}Response size limit configuration.
secureSockethttp:ClientSecureSocket()SSL/TLS configuration.
circuitBreakerhttp:CircuitBreakerConfig()Circuit breaker configuration for fault tolerance.

Initializing the client

import ballerina/websub;

configurable string resourceUrl = ?;

websub:DiscoveryService discoveryClient = check new (resourceUrl);

Operations

Resource discovery

discoverResourceUrls

Discovers the WebSub hub URL and topic URL from the resource URL by parsing HTTP Link headers.

Parameters:

NameTypeRequiredDescription
expectedMediaTypesstring?|string[]NoExpected media types for the resource (used in the Accept header).
expectedLanguageTypesstring?|string[]NoExpected language types for the resource (used in the Accept-Language header).

Returns: [string, string]|ResourceDiscoveryFailedError

Sample code:

[string hubUrl, string topicUrl] = check discoveryClient->discoverResourceUrls();

Sample response:

["https://hub.example.com", "https://example.com/feed"]