Skip to content

APIs & integration

API gateway + MuleSoft proxies over internal services

One authenticated REST call in place of a three-step sign-in against legacy RPC services.

Problem

Internal backend services spoke an RPC dialect through a bridge, and calling one meant a three-step auth sequence: get an OAuth token, sign in to mint a JWT, then attach that JWT to every downstream call. Every consumer reimplemented it, usually wrong.

What I built

I designed the data mesh API layer and built MuleSoft proxy APIs over three internal services: accounts and auth, the job scheduler, and ad inventory. The proxy does the OAuth exchange and JWT minting server-side, forwards to the right backend, and normalizes the bridge's responses into plain JSON, so a consumer sends one REST request instead of three. Shipped across dev, QA, and prod with GitLab CI/CD and per-environment routing. I also prototyped a unified GraphQL schema for sourcing and joining data products by field, and a proxy over the Snowflake SQL API as a single entry point.

Scope

The data-mesh API layer: proxy APIs that turn an internal RPC dialect and a three-step auth flow into one authenticated REST call.

My role

I designed the API layer and built the proxies over three internal services.

Architecture

  • MuleSoft proxies in front of an accounts/auth service, the job scheduler, and ad inventory.
  • The proxy runs the OAuth exchange, mints the JWT, forwards to the right backend, and unwraps the RPC response into plain JSON.
  • Shipped across dev, QA, and prod through GitLab CI/CD, with honest per-environment routing.
  • Prototypes: a unified GraphQL schema over the data products, and a proxy over the Snowflake SQL API.

Outcomes

  • One REST call replaces a three-step sign-in every consumer used to reimplement.
  • Auth, rate limiting, and logging live in one place instead of scattered across callers.
  • A single entry point a consumer can use without knowing which backend it hits.

Stack

MuleSoftRESTGraphQLOAuth / OIDCApache ThriftPython