Summary
axios v1 has brought a few breaking changes, so now's the time to reconsider whether it still is the best solution we have.
Motivation(s)
http2/http3 support
streaming support
reduce dependencies
Downsides
Breaking change - axios is very tied to our responses, anyone who currently depends on them will have some work to do before they can upgrade
Alternatives to consider
axios : it's working, stick to it, but update to a v1.x.x+ version (no http2 support yet )
fetch: built into recent browsers and node 18+
gaxios : close to the axios interface, supports http2, no browser support
got : Seems to satisfy a lot constraints. No browser support and has a lot of dependencies
ky : tiny, no dependencies, supports deno
undici : from the core node devs, no browser support but much better performance
...
Criteria for success
Compatible license (required)
Node.js 18+ support (required)
Brings in a minimal set of dependencies (required)
Promise based (required)
Streaming support: allows us to expose the streaming ListObjects
http2/http3 support: reduces request overhead
Deno support (Support for Deno #17 )
Cloudflare Worker and Vercel support (Support for Cloudflare Workers/Vercel Edge Runtime #72 )
Better support for proxies (https://github.com/orgs/openfga/discussions/310 )
Browser support: needed for the Playground
Preferably not another dependency (bonus)
Error handling and automated retries (bonus - lets us drop our own implementation)
Credential flow support (bonus - lets us drop our own implementation)
Built-in caching support (bonus)
State (as of June 2024)
We're currently favouring undici and planning on starting work on this soon
Summary
axiosv1 has brought a few breaking changes, so now's the time to reconsider whether it still is the best solution we have.Motivation(s)
Downsides
Alternatives to consider
v1.x.x+ version (no http2 support yet)Criteria for success
State (as of June 2024)
We're currently favouring undici and planning on starting work on this soon