Parent : [[INDEX-CYBERSECU]]
Routes lookup OSINT par service
Problème
Un monolithe /api/osint devient ingérable avec 12+ sources (DNS, HIBP, ARCEP…).
Solution
Pattern App Router :
src/app/api/lookup/<service>/route.ts
Chaque route : GET + query params + NextResponse.json. Client (SearchHub) appelle par type de node.
Services exemple : dns, hibp, arcep, etc.
Avantages
- Isolation erreurs par service
- Rate limit / clés API par fichier
- Test unitaire par lookup
Implémentation
// src/app/api/lookup/[service]/route.ts
export async function GET(req: NextRequest) {
const service = req.nextUrl.pathname.split('/').pop();
const query = req.nextUrl.searchParams.get('q');
if (!query) return NextResponse.json(
{ error: 'Missing query param q' }, { status: 400 }
);
try {
const result = await lookupRegistry[service](query);
return NextResponse.json({ data: result });
} catch (err) {
return NextResponse.json(
{ error: { code: 'LOOKUP_FAILED', message: err.message } },
{ status: 502 }
);
}
}
// Registry pattern — chaque service s'enregistre
const lookupRegistry: Record<string, (q: string) => Promise<LookupResult>> = {
dns: lookupDNS,
hibp: lookupHIBP,
arcep: lookupARCEP,
};
Services typiques
| Service | Input | Output |
|---|---|---|
dns |
domain | A, AAAA, MX, TXT, NS records |
hibp |
Breaches list | |
arcep |
phone | Operator, allocation date |
shodan |
IP | Open ports, services |
whois |
domain | Registrar, dates |
Quand l'utiliser
Projet OSINT avec 3+ sources de lookup. En-dessous de 3, un seul endpoint suffit.
Source projet
osint-investigation-board/src/app/api/lookup/dns/route.tsosint-investigation-board/src/app/api/lookup/hibp/route.tsosint-investigation-board/src/app/api/lookup/arcep/route.ts
Liens connexes
- [[KNOW-PAT-164-osint-cascade-graph-real-data|KNOW-PAT-164]]
- [[KNOW-PAT-228]] — API REST Design (conventions routes)