Mempercepat API Development dengan Claude Code: Dari Desain hingga Testing
Mempercepat API Development menggunakan Claude Code. Dari Desain hingga Testing. Dilengkapi contoh kode praktis.
Menghilangkan Bottleneck API Development
API development melibatkan banyak task berulang — desain endpoint, validasi, error handling, dan pembuatan test. Claude Code bisa menangani semua ini dengan cepat dan efisien.
Generate Endpoint Secara Batch
Buat semua CRUD endpoint sekaligus dengan Claude Code.
> Buat RESTful API untuk resource berikut.
> Framework: Express + TypeScript.
>
> Resource: Task
> Fields: id, title, description, status, dueDate, createdAt, updatedAt
> Endpoints: GET /tasks, GET /tasks/:id, POST /tasks, PUT /tasks/:id, DELETE /tasks/:id
> Validasi: gunakan zod
> Format respons: { data, meta, error }
Contoh Kode yang Di-generate
import { Router, Request, Response } from "express";
import { z } from "zod";
const TaskSchema = z.object({
title: z.string().min(1).max(200),
description: z.string().optional(),
status: z.enum(["todo", "in_progress", "done"]).default("todo"),
dueDate: z.string().datetime().optional(),
});
const router = Router();
router.get("/tasks", async (req: Request, res: Response) => {
const page = Number(req.query.page) || 1;
const limit = Number(req.query.limit) || 20;
const offset = (page - 1) * limit;
const tasks = await taskRepository.findAll({ offset, limit });
const total = await taskRepository.count();
res.json({
data: tasks,
meta: { page, limit, total, totalPages: Math.ceil(total / limit) },
});
});
router.post("/tasks", async (req: Request, res: Response) => {
const parsed = TaskSchema.safeParse(req.body);
if (!parsed.success) {
return res.status(400).json({
error: { message: "Validation error", details: parsed.error.issues },
});
}
const task = await taskRepository.create(parsed.data);
res.status(201).json({ data: task });
});
export default router;
Generate dari OpenAPI Specs
Jika sudah ada spesifikasi API, kamu bisa meneruskannya untuk men-generate implementasi.
> Implementasikan semua endpoint berdasarkan definisi di openapi.yaml.
> Sesuaikan validasi dengan definisi schema.
> Buat juga test untuk setiap endpoint.
Auto-Generate API Test
Membuat implementasi dan test secara bersamaan memastikan kualitas.
> Buat test untuk endpoint POST /tasks.
> Cakup success case, error case, dan boundary value.
import request from "supertest";
import { app } from "../app";
describe("POST /tasks", () => {
it("mengembalikan 201 dengan data valid", async () => {
const res = await request(app)
.post("/tasks")
.send({ title: "Test task", status: "todo" });
expect(res.status).toBe(201);
expect(res.body.data.title).toBe("Test task");
expect(res.body.data.id).toBeDefined();
});
it("mengembalikan 400 ketika title kosong", async () => {
const res = await request(app)
.post("/tasks")
.send({ title: "", status: "todo" });
expect(res.status).toBe(400);
expect(res.body.error).toBeDefined();
});
it("mengembalikan 400 untuk status tidak valid", async () => {
const res = await request(app)
.post("/tasks")
.send({ title: "Task", status: "invalid" });
expect(res.status).toBe(400);
});
});
Untuk strategi desain test yang detail, lihat Panduan Lengkap Strategi Testing.
Generate Middleware
Middleware umum untuk authentication, rate limiting, logging, dan lainnya juga bisa di-generate.
> Buat middleware JWT authentication.
> - Ekstrak token dari header Authorization
> - Periksa expiration
> - Set decoded user info pada req.user
> - Kembalikan HTTP status yang sesuai saat error
import { Request, Response, NextFunction } from "express";
import jwt from "jsonwebtoken";
interface AuthRequest extends Request {
user?: { id: string; email: string; role: string };
}
export function authenticate(
req: AuthRequest,
res: Response,
next: NextFunction
) {
const header = req.headers.authorization;
if (!header?.startsWith("Bearer ")) {
return res.status(401).json({ error: { message: "Authentication required" } });
}
try {
const token = header.slice(7);
const decoded = jwt.verify(token, process.env.JWT_SECRET!) as AuthRequest["user"];
req.user = decoded;
next();
} catch (err) {
if (err instanceof jwt.TokenExpiredError) {
return res.status(401).json({ error: { message: "Token expired" } });
}
return res.status(403).json({ error: { message: "Invalid token" } });
}
}
Unified Error Handling
Untuk mendesain respons error yang konsisten di seluruh API, lihat Pola Desain Error Handling.
Integrasi Database
Repository layer dan migrasi juga bisa dibuat secara bersamaan. Untuk mengotomatisasi operasi database, lihat Otomasi DB Migration.
Summary
Kunci API development dengan Claude Code adalah mendefinisikan spesifikasi yang jelas dan memberikan instruksi yang komprehensif. Biarkan Claude Code menangani task CRUD yang berulang agar kamu bisa fokus pada desain business logic.
Untuk best practice API, lihat dokumentasi resmi Anthropic dan panduan resmi Express.
Related Posts
Cara Mempercepat Side Project dengan Claude Code [Dengan Contoh]
Pelajari cara mempercepat project development personal secara drastis menggunakan Claude Code. Dilengkapi contoh nyata dan workflow praktis dari ide hingga deployment.
Cara Mengotomatisasi Refactoring dengan Claude Code
Pelajari cara mengotomatisasi code refactoring secara efisien menggunakan Claude Code. Dilengkapi prompt praktis dan pola refactoring konkret untuk project nyata.
Panduan Lengkap Konfigurasi CORS dengan Claude Code
Pelajari tentang panduan lengkap konfigurasi CORS menggunakan Claude Code. Dilengkapi tips praktis dan contoh kode.