Skip to main content
Version: 10.0

How to develop a bespoke backend service

Goal

Build a backend service that consumes AXIS Frontend APIs, applies your project's business logic, and exposes a stable API to downstream clients.

A bespoke service sits between AXIS Frontend APIs and your downstream consumers. It can aggregate, transform, enrich, filter, cache, or convert AXIS data before returning it to apps, devices, partner systems, or third-party consumers.

Do not build a bespoke service just to proxy AXIS Frontend APIs without adding integration value.

Recommended Architecture

Your bespoke backend service can include these components:

ComponentResponsibility
Client API layerReceives requests from apps, devices, or partner systems
Request context parserExtracts language, rating, device, subscription, segment, and other relevant request context
AXIS API clientsCalls AXIS Frontend APIs such as catalog, display, linear, search, and, where appropriate, UX metadata
Aggregation layerFans out to multiple AXIS APIs and merges responses
Transformation layerMaps AXIS responses to your client schema
Enrichment layerAdds data from partner or internal systems
Policy layerApplies project-owned business rules, such as geo restrictions or custom entitlement filtering
Cache layerStores reusable responses using context-aware cache keys
Resilience layerHandles timeouts, retries, stale cache fallback, partial responses, and circuit breakers
Monitoring and loggingTracks outbound latency, error rates, degraded responses, and AXIS errors with correlation context

Note: axis-api-uxmeta is user-specific. If your service uses user-scoped metadata such as bookmarks or watch history, confirm the required user context and authentication model for your implementation.

Step-by-step

Step 1: Define the service contract

Start by defining what your downstream clients need.

For each endpoint, document:

  • Request path
  • Required parameters
  • Optional parameters
  • User or request context
  • Response schema
  • Error schema
  • Cache behavior
  • Partial or degraded response behavior

Example endpoint:

GET /content/{id}?lang=en-gb&device=web_browser

Possible response sections:

{
"item": {},
"seasons": [],
"liveSchedule": null,
"offers": [],
"recommendations": []
}

Only include sections your service can reliably populate or intentionally degrade.

Step 2: Configure AXIS API Clients

Create dedicated clients for the AXIS services your backend uses.

Common clients include:

  • Catalog client for items and lists
  • Display client for pages and navigation config
  • Linear client for schedules and live programming
  • Search client for content discovery
  • UX metadata client where user-specific data is required

Each client should have:

  • Environment-specific base URL
  • JSON headers
  • Timeout
  • Retry policy where appropriate
  • Circuit breaker where appropriate
  • Logging that captures enough context for debugging

Obtain the actual hostnames for development, staging, and production from the platform team.

Step 3: Parse request context

Extract and normalize context from client requests.

The source guide identifies these essential AXIS query parameters:

  • lang
  • max_rating
  • device
  • sub

Forward relevant context to AXIS APIs.

If a context value affects the AXIS response, include it in your cache key. For example, if sub affects offer filtering, include sub in the cache key.

Step 4: Build AXIS requests

Map your service contract to AXIS API calls.

Example content detail fan-out:

GET /v0.1/items/{id}?expand=all&lang={lang}&max_rating={maxRating}&device={device}&sub={sub}
GET /v0.1/schedules/live?lang={lang}

Run independent calls in parallel. Do not make sequential calls unless one response is required to build the next request.

Step 5: Aggregate responses

Merge AXIS responses into your client response shape.

For a content detail page, aggregation may combine:

  • Item details
  • Season and episode hierarchy
  • Live schedule state
  • Offer data
  • External metadata from your own systems

If one optional dependency fails, do not fail the whole response unless the client contract requires it.

Step 6: Transform to your client's schema

Keep the transformation logic explicit.

Map:

  • AXIS field names to client field names
  • AXIS response structure to your client structure
  • AXIS errors to your client error contract

Avoid returning raw AXIS responses directly unless that is a deliberate API contract decision.

Step 7: Add enrichment

Call partner or internal systems when needed.

Source-backed enrichment examples include:

  • Ratings
  • Recommendations
  • User preferences
  • Entitlements
  • Analytics-derived data
  • Partner metadata

Design enrichment as optional where possible. If enrichment fails, return the AXIS data without enrichment rather than failing the entire response.

Step 8: Apply custom policies

Apply business rules your project owns.

Examples supported by the source include:

  • Geo restrictions
  • Custom entitlement filtering
  • Customer-specific content gating

Be careful with pagination. If you filter after fetching a page from AXIS, you may return fewer items than the requested page size. Either fetch a larger page or document the behavior to clients.

Step 9: Add error handling

Use a stable error contract for your clients.

Handle common cases:

CaseHandling
AXIS 404Return your client not-found response
AXIS bad request or query errorReturn your client bad-request response
AXIS temporarily unavailableReturn cached or partial response where possible
Optional enrichment failureOmit enrichment, return null, or return an empty value according to your contract
TimeoutReturn degraded response if available

AXIS Frontend APIs return a consistent service error body. Map those errors to your own contract and do not leak internal AXIS error messages directly to clients.

Log AXIS error codes and correlation IDs where available for debugging.

Step 10: Handle eventual consistency

AXIS Frontend APIs read from pre-built projections updated asynchronously.

After CMS publication, a content change may not be visible immediately through the Frontend APIs. The source guide describes this as typically seconds, and sometimes longer under high loads.

For post-publish reads, retry 404 briefly with exponential backoff before returning not found.

Example policy:

Attempt 1: immediate
Attempt 2: after 1 second
Attempt 3: after 2 seconds
Attempt 4: after 4 seconds

If your service caches AXIS responses, clients may experience:

projection propagation delay + your cache TTL

Factor this into TTL choices and client expectations.

Step 11: Add monitoring and alerts

Track enough operational signals to detect AXIS dependency issues and degraded responses.

Recommended signals include:

  • Outbound AXIS latency
  • Outbound AXIS error rates
  • AXIS error responses with correlation IDs
  • Partial response count
  • Stale cache responses
  • Enrichment failures
  • Timeout count
  • Circuit breaker state
  • Cache behavior for critical endpoints

Set alert thresholds for elevated error rates from AXIS endpoints.

Step 12: Test production scenarios

Test these scenarios before go-live:

  • Normal content detail response
  • Missing item
  • Missing list
  • AXIS timeout
  • Enrichment timeout
  • Cache hit and cache miss
  • Stale cache fallback
  • Post-publish 404 retry
  • Subscription-specific offer filtering with sub
  • Parental rating filtering with max_rating
  • Geo-filtering, if your service applies it
  • High-volume list aggregation
  • Partial response behavior

Production checklist

Before go-live, confirm:

  • Client API contract is documented.
  • AXIS base URLs are environment-specific.
  • lang, max_rating, device, and sub are forwarded correctly.
  • Independent calls run in parallel.
  • Cache keys include all response-changing parameters.
  • TTLs are appropriate for each content type.
  • Timeouts are configured on outbound HTTP clients.
  • Retry or circuit-breaker policies are configured.
  • Stale-cache or partial-response fallback is implemented where appropriate.
  • Partial response behavior is documented.
  • Internal AXIS errors are not leaked to clients.
  • AXIS API errors are logged with correlation context where available.
  • Outbound call latency and error rates are monitored.
  • Security, entitlement, and geo behavior are reviewed where applicable.

Was this page helpful?