API's ontwikkelen
API’s ontwikkelen
Een goede API is de ruggengraat van elke moderne applicatie. Claude Code is bijzonder sterk in het bouwen van API’s — van ontwerp tot implementatie.
API ontwerp met Claude
Begin met het ontwerp voordat je code schrijft:
Ik bouw een API voor een recepten-app. Gebruikers
kunnen recepten bekijken, opslaan en beoordelen.
Ontwerp de REST API endpoints met HTTP methods,
URL structuur en verwachte request/response bodies.
Claude ontwerpt een consistent API schema:
GET /api/recipes — Lijst alle recepten
GET /api/recipes/:id — Eén recept ophalen
POST /api/recipes — Nieuw recept aanmaken
PUT /api/recipes/:id — Recept bijwerken
DELETE /api/recipes/:id — Recept verwijderen
POST /api/recipes/:id/rate — Recept beoordelen
GET /api/users/:id/saved — Opgeslagen recepten
Laat Claude het hele API ontwerp eerst uitschrijven. Review het voordat je begint met implementeren. Het is veel makkelijker om een ontwerp aan te passen dan werkende code te refactoren.
Implementatie
Na goedkeuring van het ontwerp:
Implementeer de recipes API routes. Gebruik:
- Express.js als framework
- Prisma als ORM
- Zod voor request validatie
- Standaard error responses met status codes
Begin met GET /api/recipes en POST /api/recipes.
Claude bouwt de routes met validatie:
// Voorbeeld van wat Claude genereert:
const createRecipeSchema = z.object({
title: z.string().min(1).max(200),
ingredients: z.array(z.string()).min(1),
instructions: z.string().min(10),
prepTime: z.number().positive(),
});
app.post('/api/recipes', async (req, res) => {
const result = createRecipeSchema.safeParse(req.body);
if (!result.success) {
return res.status(400).json({ errors: result.error.issues });
}
// ...
});
Authenticatie toevoegen
Voeg JWT authenticatie toe aan de API.
- POST /api/auth/register — account aanmaken
- POST /api/auth/login — inloggen, JWT token teruggeven
- Beschermde routes: POST/PUT/DELETE vereisen een
geldig token in de Authorization header
- Publieke routes: GET requests zijn open
Laat Claude nooit hardcoded secrets in de code zetten. Gebruik altijd environment variables voor JWT secrets, database URLs en API keys. Check dit bij elke review.
Input validatie
Validatie is cruciaal voor veilige API’s. Claude kan dat grondig doen:
Voeg uitgebreide input validatie toe aan alle routes:
- Alle strings trimmen en sanitizen
- E-mail format checken
- Maximale lengtes op alle tekstvelden
- SQL injection preventie (via Prisma)
- Rate limiting op auth routes
Error handling
Een consistent error format maakt je API professioneel:
Maak een centrale error handler die alle errors
opvangt en een consistent JSON format teruggeeft:
{
"error": {
"code": "NOT_FOUND",
"message": "Recept niet gevonden",
"status": 404
}
}
Gebruik dit format voor alle error responses.
Een goede error handler bespaart je uren debugging later. Zorg dat elke error een duidelijke code, message en HTTP status heeft. Je frontend (en je gebruikers) zullen je dankbaar zijn.
API testen
Laat Claude tests schrijven voor elke route:
Schrijf integration tests voor de recipes API.
Test per route:
- Happy path (alles gaat goed)
- Validatie errors (ongeldige input)
- Auth errors (geen of ongeldig token)
- Not found (onbestaand recept)
Gebruik Vitest en supertest.
Claude schrijft uitgebreide tests:
describe('POST /api/recipes', () => {
it('maakt een recept aan met geldige data', async () => {
const res = await request(app)
.post('/api/recipes')
.set('Authorization', `Bearer ${token}`)
.send({ title: 'Pasta', ingredients: ['pasta'], ... });
expect(res.status).toBe(201);
});
it('weigert ongeldige data', async () => {
const res = await request(app)
.post('/api/recipes')
.set('Authorization', `Bearer ${token}`)
.send({ title: '' });
expect(res.status).toBe(400);
});
});
Wat je nu moet kunnen:
Je kunt nu API’s bouwen met Claude:
- Begin met het ontwerp (endpoints, methods, responses)
- Implementeer met validatie en error handling
- Voeg authenticatie toe waar nodig
- Test elke route met happy path en edge cases
Bouw een simpele API voor iets dat je interesseert (recepten, films, boeken) en test alle endpoints.