Dev iconDevSep 19, 2026 ~1 min source read

I built a transport-independent foundation for JSON API clients in Perl

That led me to build HTTP::API::Core, a small, dependency-light foundation for building JSON HTTP API clients in Perl. Use HTTP::Tiny, LWP, Mojo::UserAgent, Furl, or your preferred transport for HTTP.

I built a transport-independent foundation for JSON API clients in Perl

Share this story

Send the public story page.

Useful takeaways from this story.

That led me to build HTTP::API::Core, a small, dependency-light foundation for building JSON HTTP API clients in Perl.

Use HTTP::Tiny, LWP, Mojo::UserAgent, Furl, or your preferred transport for HTTP.

It is deliberately not another HTTP client One of the main design decisions was not to replace the existing HTTP ecosystem.

Building the complete brief

The page is ready to read now. The fuller skim-friendly version will appear here automatically.

The useful part

That led me to build HTTP::API::Core, a small, dependency-light foundation for building JSON HTTP API clients in Perl. Use HTTP::Tiny, LWP, Mojo::UserAgent, Furl, or your preferred transport for HTTP. It is deliberately not another HTTP client One of the main design decisions was not to replace the existing HTTP ecosystem.

How it works

  • Perl already has good HTTP implementations: HTTP::Tiny LWP Mojo::UserAgent Furl HTTP::API::Core sits above the transport layer.
  • How much of this is actually specific to the API being wrapped?

Details worth keeping

Suddenly, it needs to handle: query parameters JSON encoding and decoding structured errors retries and Retry-After rate limits pagination authentication request IDs logging and metrics idempotency At that point, what started as a small API wrapper often becomes a collection of infrastructure code. Let HTTP::API::Core handle the repetitive policy around it. The HTTP implementation is responsible for making the request.

Keep reading in the app

Open the app view to save this story, compare related coverage, and continue from the same source.

Open in app