Introduzione a Efesto
Efesto è un framework con routing basato sul filesystem per costruire API HTTP documentate e type-safe. Crei un file, Efesto trasforma la sua posizione in una rotta e i tuoi schemi diventano sia validazione sia documentazione OpenAPI. Funziona su due stack:
- Express (
efesto) — lo stack originale. Classi di servizio con metodi_get/_post, OpenAPI scritto in file.yamlgenerati, validazione tramite express-validator e un sistema di generazione dei tipi TypeScript in grado di modificare i file di servizio in-place. - Bun / Elysia (
efesto/elysia) — un entrypoint separato. Le rotte sono idiomatiche, native di Elysia (o l'opzionale classeBaseApiServicedi Efesto); validazione e OpenAPI provengono nativamente da TypeBox.
Entrambi gli stack condividono un'unica idea: il percorso del file è la rotta.
routes/user/index.ts serve /user, routes/user/[id].ts serve /user/:id.
Scegli il tuo stack
Express (efesto) | Bun/Elysia (efesto/elysia) | |
|---|---|---|
| Runtime | Node.js + Express | Bun + Elysia |
| File di rotta | class extends BaseApiService | istanza Elysia nativa oppure class extends ApiService |
| Handler | _get(req, res, next) | (ctx) => value |
| Validazione | express-validator (_<m>Validation) | schema TypeBox (body/query/params) |
| OpenAPI | .yaml generato + Magic Types | @elysiajs/openapi nativo da TypeBox |
| Tipi | .d.ts generato (+ modifica in-place) | inferiti nativamente da TypeScript |
| Stato | stabile | beta |
Se hai già un'app Node/Express, usa lo stack Express. Se parti da Bun, usa lo stack Elysia. I concetti (routing da filesystem, permessi ABAC) valgono per entrambi; l'implementazione differisce e ogni guida mostra entrambi tramite tab.
Cosa ti offre Efesto
- Routing da filesystem — cartelle e file
[param]mappano percorsi e parametri di rotta. - OpenAPI guidato dagli schemi — documenta un endpoint dove lo scrivi; Efesto emette il documento OpenAPI.
- Magic Types (Express) — scrivi
string::email!invece di un verboso oggetto schema. Vedi Magic Types. - Generazione dei tipi (Express) — mantieni i tipi TypeScript sincronizzati con i tuoi schemi, riscrivendo opzionalmente per te le firme dei metodi. Vedi Generazione dei tipi.
- ABAC — dichiara
permission: [action, model]su un endpoint; Efesto lo verifica rispetto a un'ability CASL che fornisci tu. Vedi Permessi ABAC. - Hook, non lock-in — autenticazione, gestione degli errori, caching e upload di file sono integrazioni leggere attorno a strumenti standard (express-validator, Multer, Redis), non sottosistemi su misura.
Cosa Efesto non è
Efesto collega gli hook; non implementa strategie di autenticazione, storage su cloud, rate limiting o un framework di caching. Quelli vivono nel tuo codice, usando le librerie che scegli tu. Ogni guida è esplicita su dove finisce il framework e inizia il tuo codice.
Comincia da Installazione.