HTTP Client Library with builder pattern and interception support.
npm install @barisvarlik/api-clientbash
npm install api-client
`
Features
- Builder pattern for easy configuration
- Request and response interception
- Timeout support
- Type-safe responses (TypeScript)
- URL path and query parameter handling
Usage
$3
`javascript
import { createApiClient } from 'api-client';
// Create a client
const client = createApiClient()
.withBaseUrl('https://api.example.com')
.withDefaultHeader('Content-Type', 'application/json')
.build();
// Make a GET request
client.get('users')
.execute()
.then(data => console.log(data))
.catch(error => console.error(error));
// Make a POST request
client.post('users', { name: 'John', email: 'john@example.com' })
.execute()
.then(data => console.log(data))
.catch(error => console.error(error));
`
$3
`typescript
import { createApiClient } from 'api-client';
interface User {
id: number;
name: string;
email: string;
}
// Create a client
const client = createApiClient()
.withBaseUrl('https://api.example.com')
.withDefaultHeader('Content-Type', 'application/json')
.build();
// Make a GET request with type safety
client.get('users')
.execute()
.then(users => {
// TypeScript knows that users is User[]
users.forEach(user => console.log(user.name));
});
// Make a POST request with type safety
client.post('users', { name: 'John', email: 'john@example.com' })
.execute()
.then(user => {
// TypeScript knows that user is User
console.log(user.id);
});
`
$3
`javascript
client.get('users')
.withHeader('Authorization', 'Bearer token123')
.execute();
`
$3
`javascript
client.get('users')
.withTimeout(5000) // 5 seconds
.execute();
`
$3
`javascript
// Request interceptor
const authInterceptor = {
intercept: (request, url) => {
request.headers = {
...request.headers,
'Authorization': 'Bearer token123'
};
return request;
}
};
// Response interceptor
const loggingInterceptor = {
intercept: async (response) => {
console.log(Response status: ${response.status});
return response;
}
};
// Add interceptors to client
const client = createApiClient()
.withBaseUrl('https://api.example.com')
.withRequestInterceptor(authInterceptor)
.withResponseInterceptor(loggingInterceptor)
.build();
`
Important Note on Response Types
For JavaScript Users: This library currently only supports JSON responses by default. If your API returns non-JSON responses (like plain text), you will need to modify the Client.ts file to handle different content types.
For TypeScript Users: You can specify any return type using generics, but be aware that the underlying implementation expects JSON responses. If your API returns non-JSON data, you'll need to modify the client implementation.
API Reference
$3
- withBaseUrl(url: string): Set the base URL for all requests
- withDefaultHeader(name: string, value: string): Add a default header
- withDefaultHeaders(headers: HeadersInit): Add multiple default headers
- withRequestInterceptor(interceptor: RequestInterceptor): Add a request interceptor
- withResponseInterceptor(interceptor: ResponseInterceptor): Add a response interceptor
- build(): Create the ApiClient instance
$3
- get: Create a GET request
- post: Create a POST request
- put: Create a PUT request
- delete: Create a DELETE request
$3
- withHeader(name: string, value: string): Add a header to the request
- withTimeout(timeoutMs: number): Set a timeout for the request
- withRequestInterceptor(interceptor: RequestInterceptor): Add a request interceptor
- withResponseInterceptor(interceptor: ResponseInterceptor): Add a response interceptor
- execute()`: Execute the request and return a promise with the response