@zodified-api/core
v2.3.2
Published
A type-safe API client and server library using Zod
Readme
ZodifiedAPI
ZodifiedAPI is a library that provides a type-safe, framework-agnostic solution for building and consuming APIs using TypeScript. It features an interface similar to Zodios but wraps around fetch instead of axios. Additionally, it includes a powerful mocking feature that is particularly useful for testing and development.
Features
- Type Safety: Ensures type safety throughout your API, from request validation to response handling.
- Plugin Support: Easily add and manage middleware functions with support for custom plugins.
- Zod Integration: Leverages Zod for schema validation, making it easy to define and validate your API schemas.
- Framework Agnostic: Provides a generic API server class that can be integrated with common server frameworks.
- Mocking Capabilities: Use the
useMockfunction to simulate API responses during testing or development. - Fetch Wrapper: Unlike Zodios, ZodifiedAPI wraps around
fetchinstead ofaxios. - Retry Mechanism: Includes automatic retry functionality for network errors and temporary server issues.
Installation
You can install the library via npm:
npm install @zodified-api/coreor via yarn:
yarn add @zodified-api/coreUsage
1. Define API Configuration
First, define your API configuration using zod for schema validation.
import { z } from 'zod';
import { makeApi, makeEndpoint } from '@zodified-api/core';
const userSchema = z.object({
id: z.number(),
name: z.string(),
});
const getUser = makeEndpoint({
method: 'get',
path: '/user',
alias: 'getUser',
description: 'Get user',
parameters: [
{
type: 'Query',
name: 'id',
schema: z.number(),
description: 'User ID',
},
],
response: userSchema,
});
export const api = makeApi([getUser]);2. Create an API Client
Based on the API configuration, you can create a type-safe API client.
import { Zodified } from '@zodified-api/core';
import { api } from './api-config';
const ApiClient = new Zodified('https://api.example.com', api);
const userData = await ApiClient.get('/user', { queries: { id: 1 } });
console.log(userData); // { id: 1, name: 'John Doe' }3. Using the Mocking Feature
The useMock function allows you to simulate API responses, which is useful during testing or when the backend is not yet implemented.
ApiClient.useMock({
get: {
'/user': {
response: { id: 1, name: 'John Doe' },
delay: 100,
},
},
post: {
'/user': {
response: { id: 2, name: 'Jane Doe' },
},
},
}, 500); // Adds a 500ms delay4. Making Requests
ZodifiedAPI allows you to make requests to API endpoints using methods like get, post, put, patch, and delete.
const updatedUser = await ApiClient.put('/user', { payload: { id: 1, name: 'New Name' } });
console.log(updatedUser); // { id: 1, name: 'New Name' }API Reference
makeApi(endpoints: ZodifiedEndpointDefinition[])
Creates an API configuration object based on the provided endpoint definitions.
makeEndpoint(config: ZodifiedEndpointConfig)
Defines an API endpoint. You can specify the HTTP method, path, validation schema, and more.
Zodified
A class for making type-safe API requests.
- Methods:
get(path: string, config?: RequestConfig): Sends a GET request to the specified API endpoint and returns a type-safe response.post(path: string, data: object, config?: RequestConfig): Sends a POST request to the specified API endpoint and returns a type-safe response.put(path: string, data: object, config?: RequestConfig): Sends a PUT request to the specified API endpoint and returns a type-safe response.patch(path: string, data: object, config?: RequestConfig): Sends a PATCH request to the specified API endpoint and returns a type-safe response.delete(path: string, config?: RequestConfig): Sends a DELETE request to the specified API endpoint and returns a type-safe response.useMock(mockData: MockData<Api>, delay?: number): Uses mock data to simulate API responses.
Contributing
Contributions are welcome! Feel free to submit a Pull Request or open an Issue.
License
This project is licensed under the MIT License.
