Continuing our series, let's delve into the practical implementation using the api-def package.
Recap:
- We explored the concept of the api-defpackage in the previous post.
- It centralizes API definitions and provides a consistent interface for making API requests.
Implementation Breakdown (Part 1: api-def-package Setup)
Project Setup:
- Existing Project: Assuming you've bootstrapped your application based on the previous post Bootstrapping With Turbo Repo. 
- 
Dependencies: Install the required packages using npm or yarn: 
 npm install @zodios/core zod typescript axios eslint
API Definition:
- Create a folder named - userunder- srcto store API definitions specific to user data.
- 
Define the API schema using Zod: 
 import { z } from "zod"; export const UserProfileSchema = z.object({ firstName: z.string(), lastName: z.string(), email: z.string().email(), }); export const Users = z.array(UserProfileSchema); export const UserSchema = { UserProfileSchema, Users, };
- Create separate files for types and query keys for better organization. 
API Endpoint:
- 
Use Zodios to create the API endpoint for fetching users: 
 import { makeEndpoint } from "@zodios/core"; import { UserSchema } from "./user-schema"; export const getUsers = makeEndpoint({ method: "post", path: "user/search", alias: "getUsers", parameters: [ { type: "Body", name: "getUsersPayload", schema: UserSchema.UserProfileSchema.partial(), }, ], response: UserSchema.Users, });
Query Key:
- 
Define a method to generate query keys for caching and invalidation: 
 import { User } from "./user-type"; export const GetUserKeys = { getUsers: (requestBody: Partial<User.UserProfile>) => { return [ { requestBody, }, ]; }, };
API Client:
- 
Create an API client using Zodios to make API calls based on the defined endpoint: 
 import { Zodios, makeApi } from "@zodios/core"; import { getUsers } from "./user/user-endpoint"; const api = makeApi([getUsers]); export const ApiClient = new Zodios("http://localhost:3000/api/", api);
Export:
- 
Export all the components (schemas, types, query keys, API client) from a central index file: 
 export * from "./queryKey"; export * from "./schemas"; export * from "./types"; export * from "./apiclient";
This completes the implementation of the api-def package. In the next part, we'll demonstrate how to integrate this package with a Next.js application for client-side and server-side API fetching.
Stay tuned for the next post!
 

 
    
Top comments (0)