Examples & Recipes
Below are complete, copy-pasteable examples of common architectural requirements solved elegantly with BoltFetch.
Recipe 1: Full CRUD Operations
A complete implementation of a Data Access Object (DAO) for a resource using a custom client.
typescriptimport { configureBoltFetchClient } from "boltfetch"; // Assuming you have configured a client const apiClient = configureBoltFetchClient({ baseUrl: "https://api.example.com/v1" }); export interface Todo { id: number; title: string; completed: boolean; } export const TodoAPI = { // CREATE create: async (title: string) => { return apiClient.post<Todo>('/todos', { title }); }, // READ (List) getAll: async () => { return apiClient.get<Todo[]>('/todos'); }, // READ (Single) getById: async (id: number) => { return apiClient.get<Todo>(`/todos/${id}`); }, // UPDATE update: async (id: number, updates: Partial<Todo>) => { return apiClient.patch<Todo>(`/todos/${id}`, updates); }, // DELETE delete: async (id: number) => { return apiClient.delete<{ success: boolean }>(`/todos/${id}`); } };
Recipe 2: Interacting with GraphQL
BoltFetch is inherently a REST client, but because GraphQL over HTTP is just sending POST requests with JSON payloads, it is remarkably easy to use BoltFetch as a lightweight GraphQL client.
typescriptimport { boltfetch } from "boltfetch"; interface GraphQlResponse<T> { data: T; errors?: Array<{ message: string }>; } async function queryGraphQL<T>(query: string, variables?: Record<string, any>) { const response = await boltfetch.post<GraphQlResponse<T>>( 'https://api.example.com/graphql', { query, variables } ); if (!response.success) { console.error("Network Error:", response.message); return null; } if (response.data.errors) { console.error("GraphQL Errors:", response.data.errors); return null; } return response.data.data; } // Usage const GET_USER = ` query GetUser($id: ID!) { user(id: $id) { name email } } `; const result = await queryGraphQL<{ user: { name: string } }>(GET_USER, { id: "1" });
Recipe 3: Parallel Requests
Often, you need to load multiple independent resources concurrently to speed up page load times. Because BoltFetch methods return standard Promises, you can combine them using Promise.all.
typescriptimport { boltfetch } from "boltfetch"; async function fetchDashboardData() { // Fire requests concurrently const [usersRes, statsRes, alertsRes] = await Promise.all([ boltfetch.get<User[]>('https://api.example.com/users'), boltfetch.get<Stats>('https://api.example.com/stats'), boltfetch.get<Alert[]>('https://api.example.com/alerts') ]); // Handle successes and failures independently return { users: usersRes.success ? usersRes.data : [], stats: statsRes.success ? statsRes.data : null, alerts: alertsRes.success ? alertsRes.data : [] }; }