cg-api-manager
v1.1.0
Published
A robust, modular, and efficient API management library for JavaScript/Node.js.
Readme
CG Smart API Manager 🚀
A robust, modular, and efficient API management library for JavaScript/Node.js.
Features include:
- Sequential API calls with delay (Queue)
- Request & response JSON validation
- Debouncing frequent requests
- Automatic retries
- Caching & deduplication
- TypeScript support
This architecture ensures:
Requests are queued and rate-limited Validation happens before and after API calls Retry happens automatically Same requests are deduplicated Responses can be cached
+-------------------+
| ApiManager |
|-------------------|
| request(config) |
+---------+---------+
|
v
+-------------------+
| Queue | <-- ensures sequential execution
+-------------------+
|
v
+-------------------+
| Debounce | <-- optional, prevent rapid repeated calls
+-------------------+
|
v
+-------------------+ +------------------+
| Validator |----->| Cache | <-- Check if result exists
+-------------------+ +------------------+
|
v
+-------------------+
| Retry | <-- retry logic
+-------------------+
|
v
+-------------------+
| Axios Request |
+-------------------+
|
v
+-------------------+
| Validator | <-- validate response
+-------------------+
|
v
+-------------------+
| RequestDeduper | <-- resolve same promises for same requests
+-------------------+
|
v
Response
npm install cg-api-manager
2.3 Basic Usage
import { ApiManager } from "cg-api-manager";
const api = new ApiManager({
delay: 500, // wait 500ms between requests
retry: 2, // retry twice on failure
cache: true, // enable caching
});
const UserSchema = {
type: "object",
properties: { id: { type: "number" }, name: { type: "string" } },
required: ["id", "name"],
};
async function fetchUsers() {
try {
const users = await api.request({
url: "https://jsonplaceholder.typicode.com/users",
method: "GET",
responseSchema: UserSchema,
});
console.log(users);
} catch (err) {
console.error(err);
}
}
fetchUsers();2.4 Advanced Features
Debouncing: Prevent repeated API calls.
api.debounceRequest({
url: "/search",
method: "GET",
debounce: 300,
});Caching: Avoid repeated network calls for the same request.
const result1 = await api.request({ url: "/users" });
const result2 = await api.request({ url: "/users" }); // from cacheRetry: Automatically retry failed requests.
const data = await api.request({ url: "/unstable-api", retry: 3 });Configuration Options
| Option | Type | Default | Description |
| -------------- | ------- | ------- | ----------------------------------- |
| delay | number | 0 | Time between queued requests in ms |
| retry | number | 0 | Number of retries on failure |
| cache | boolean | false | Enable caching |
| debounce | number | 0 | Debounce repeated requests in ms |
| requestSchema | object | null | JSON schema for request validation |
| responseSchema | object | null | JSON schema for response validation |
2.6 Error Handling
try {
await api.request({ url: "/bad-api" });
} catch (err) {
console.error("API Failed:", err.message);
}2.7 TypeScript Support
import { ApiManager } from "smart-api-manager";
const api: ApiManager = new ApiManager({ delay: 300 });
2.8 Contributing
Contributions are welcome! Please open issues or pull requests on GitHub.
2.9 License
MIT © [Chandan]
