fluent-rest-client
v1.0.0
Published
A modern, fluent REST client.
Downloads
107
Maintainers
Readme
Fluent REST Client
A lightweight, chainable (fluent) REST API client built on Axios with automatic Auth & Refresh management.
🚀 Features
- ✨ Fluent Interface: Clean and readable resource building (e.g.,
client.resource('users').id(1).get()). - 🔐 Auto Auth: Injects Bearer Token from your storage callbacks.
- 🔄 Smart Refresh: Automatic 401 retry with a request queue to prevent multiple simultaneous refresh calls.
- 📦 Universal: Works in Node.js, Web, and React Native (you provide the storage methods).
📦 Installation
npm install fluent-rest-client axios🛠️ Usage
1. Initialize Client
import { FluentRestClient } from 'fluent-rest-client';
const api = new FluentRestClient('https://api.example.com', {
// Persistence logic (localStorage, AsyncStorage, etc.)
onGetToken: async () => localStorage.getItem('token'),
onSaveToken: async (token) => localStorage.setItem('token', token),
// Logic to get a new token using a refresh token
onRefreshToken: async () => {
const response = await axios.post('https://api.example.com/refresh', {
refresh_token: localStorage.getItem('refresh_token')
});
return response.data.access_token;
},
// (Optional) Generic handler for auth failures
onAuthError: (error) => {
window.location.href = '/login';
},
// (New) Retry config for 5xx/Network errors
retries: 3,
retryDelay: 1000
});2. Middlewares (Global Interceptors)
api.use({
request: (config) => {
console.log(`🚀 Sending ${config.method} to ${config.url}`);
return config;
},
response: (res) => {
console.log(`✅ Received ${res.status}`);
return res;
}
});3. Safe Mode (No more Try/Catch hell)
Handle errors in a clean way without wrapping everything in try/catch:
// returns { data, error, ok, status }
const { data, error, ok } = await api.resource('users').id(123).safe().get();
if (!ok) return showError(error);
console.log(data);4. Fluent Requests
// GET /users/1/posts?limit=5
const posts = await api.resource('users').id(1).sub('posts').query({ limit: 5 }).get();🛠️ Advanced Reliability
- Exponential Backoff: Automatic retries for server/network errors.
- Atomic Refresh: Concurrent requests queue until a single token refresh completes.
License
MIT
