torc-api
Version:
torc-api is a lightweight wrapper to simplify HTTP requests
98 lines (65 loc) • 2.96 kB
Markdown
# torc-api
`torc-api` is a lightweight wrapper to simplify HTTP requests, similar to `axios`, but with a more explicit and strongly-typed approach. It includes two main classes: `API` for handling HTTP requests, and `Data` for structuring responses or payloads.
## 🚀 Installation
```bash
npm install torc-api
```
## 📦 Basic Example
### Fetch data with automatic JSON formatting
This is equivalent to calling `response.json()` manually:
```ts
import { API, Data } from 'torc-api'
const pokeApi = new API({
url: 'https://pokeapi.co/api/v2/pokemon'
})
async function fetchPokemon(pokemonName: string): Promise<Data<string>> {
const data = await pokeApi.get<string>({
endpoint: pokemonName,
formatToJSON: true
})
return data
}
fetchPokemon('ditto').then(data => console.log('data:', data))
```
### Get the raw Response object
If you set `formatToJSON` to `false` (which is the default), you'll receive the raw `Response` instead of a `Data` object:
```ts
async function fetchPokemon(pokemonName: string): Promise<Response> {
const response = await pokeApi.get({
endpoint: pokemonName,
formatToJSON: false
})
return response
}
```
## 🔧 API: Configuration
When creating an API instance, you can provide:
| Property | Type | Required | Description |
| -------- | ------------ | -------- | -------------------------------- |
| url | `string` | ✅ | Base URL for all requests |
| headers | `HeadersInit`| ❌ | Default headers for all requests (can be overridden per call) |
| options | `APIOptions` | ❌ | Default options for all requests |
## 📄 APIOptions
`APIOptions` extends the native `RequestInit` object and adds:
| Property | Type | Default | Description |
| ------------ | -------- | ------- | ----------------------------------------- |
| formatToJSON | `boolean`| `false` | Whether to automatically call `.json()` on the response |
| abortSeconds | `number` | `20` | Time (in seconds) before the request is automatically aborted |
## 📦 Data
The `Data<T>` class wraps a response value and potential error in a unified structure:
### Properties
| Property | Type | Description |
| -------- | -------------- | ------------------- |
| value | `DataValue<T>` | The response data |
| error | `DataError` | The error (if any) |
### Static Methods
| Method | Returns | Description |
| -----------------------------| ------------ | ------------------------------------- |
| `Data.failure(error: DataError)` | `Data<null>` | Creates a `Data` instance with a given error |
| `Data.success<T>(value: T)` | `Data<T>` | Creates a `Data` instance with a given value |