@devup-api/fetch
v0.1.24
Published
Type-safe API client built on top of fetch.
Readme
@devup-api/fetch
Type-safe API client built on top of fetch.
Installation
npm install @devup-api/fetchUsage
Create API Instance
import { createApi } from '@devup-api/fetch'
const api = createApi('https://api.example.com', {
headers: {
'Content-Type': 'application/json'
}
})Making Requests
GET Request
// Using operationId
const result = await api.get('getUsers', {
query: { page: 1, limit: 20 }
})
// Using path
const result = await api.get('/users/{id}', {
params: { id: '123' },
query: { include: 'posts' }
})POST Request
const result = await api.post('createUser', {
body: {
name: 'John Doe',
email: '[email protected]'
},
headers: {
Authorization: 'Bearer token'
}
})PUT Request
const result = await api.put('updateUser', {
params: { id: '123' },
body: {
name: 'Jane Doe'
}
})PATCH Request
const result = await api.patch('patchUser', {
params: { id: '123' },
body: {
name: 'Jane Doe'
}
})DELETE Request
const result = await api.delete('deleteUser', {
params: { id: '123' }
})Response Handling
All methods return a promise that resolves to:
type DevupApiResponse<T, E> =
| { data: T; error?: undefined; response: Response }
| { data?: undefined; error: E; response: Response }Example:
const result = await api.get('getUser', { params: { id: '123' } })
if (result.data) {
// Success - result.data is fully typed based on your OpenAPI schema
console.log(result.data.name)
console.log(result.data.email)
} else if (result.error) {
// Error - result.error is typed based on your OpenAPI error schemas
console.error(result.error.message)
}
// Access raw Response object
console.log(result.response.status)Using Path Parameters
// Path parameters are automatically replaced
const result = await api.get('/users/{userId}/posts/{postId}', {
params: {
userId: '123',
postId: '456'
}
})
// URL becomes: /users/123/posts/456Using Query Parameters
const result = await api.get('/users', {
query: {
page: 1,
limit: 20,
sort: 'name'
}
})
// URL becomes: /users?page=1&limit=20&sort=nameAPI Methods
api.get(path, options)- GET requestapi.GET(path, options)- GET request (uppercase alias)api.post(path, options)- POST requestapi.POST(path, options)- POST request (uppercase alias)api.put(path, options)- PUT requestapi.PUT(path, options)- PUT request (uppercase alias)api.patch(path, options)- PATCH requestapi.PATCH(path, options)- PATCH request (uppercase alias)api.delete(path, options)- DELETE requestapi.DELETE(path, options)- DELETE request (uppercase alias)
Type Safety
All API methods are fully typed based on your OpenAPI schema:
- Path parameters are type-checked
- Request bodies are type-checked
- Query parameters are type-checked
- Response types are inferred automatically
- Error types are inferred automatically
License
Apache 2.0
