Guide

Come costruire una REST API: progettazione, sicurezza e deploy

Per costruire una REST API, elenca le risorse che gestisce la tua app (utenti, ordini, prenotazioni), assegna a ciascuna un URL come /orders e /orders/{id}, e usa i metodi HTTP per le azioni: GET per leggere, POST per creare, PATCH per aggiornare, DELETE per eliminare. Restituisci JSON con codici di stato significativi, valida ogni input, richiedi autenticazione e controlli di permesso per singolo record lato server, e pagina le liste. Poi documenta gli endpoint e pubblica l'API dietro HTTPS.

Questa guida copre le decisioni di progettazione, un insieme di route svolte, i prompt per un AI app builder e gli errori che causano falle di sicurezza. Se le API ti sono nuove, inizia da cos'è un'API.

Quando ti serve una REST API

  • Il tuo frontend web deve salvare e caricare dati da un server
  • Un'app mobile, un partner o uno strumento di automazione ha bisogno di accedere ai tuoi dati
  • Altri servizi ti inviano eventi (webhook)
  • Stai dividendo il lavoro tra un team frontend e un team backend

REST è lo stile più diffuso, ma non l'unico. REST vs GraphQL spiega quando un singolo endpoint di query flessibile è la scelta migliore.

Progetta prima: risorse e route

Scrivi i sostantivi della tua app e ciò che le persone fanno con essi. Per una semplice app di prenotazioni:

MetodoRouteCosa faCodice di successo
GET/api/bookingsElenca le prenotazioni del chiamante (paginato)200
POST/api/bookingsCrea una prenotazione201
GET/api/bookings/{id}Recupera una prenotazione200
PATCH/api/bookings/{id}Modifica alcuni campi200
DELETE/api/bookings/{id}Annulla una prenotazione204
GET/api/healthControllo di integrità per il monitoraggio200

Queste corrispondono a create, read, update e delete; vedi cos'è il CRUD. Convenzioni utili da seguire:

  • Sostantivi al plurale, niente verbi negli URL: /bookings, non /getBookings.
  • Annida un solo livello quando chiarisce la proprietà: /bookings/{id}/notes.
  • Le azioni che non sono CRUD possono essere sotto-risorse: POST /bookings/{id}/cancel è più chiaro di una PATCH "magica".
  • Nomi coerenti per i campi, come created_at ovunque.

Codici di stato ed errori

Usa i codici HTTP standard così i client capiscono cosa è successo senza analizzare il testo:

CodiceSignificatoUsalo quando
200OKLettura o aggiornamento riuscito
201CreatedUna POST ha creato qualcosa
204No ContentSuccesso senza nulla da restituire
400Bad RequestL'input non ha superato la validazione
401UnauthorizedNon hai effettuato l'accesso o il token non è valido
403ForbiddenHai effettuato l'accesso ma non sei autorizzato
404Not FoundNon esiste, oppure il chiamante non deve sapere che esiste
409ConflictDuplicato, oppure lo slot è già prenotato
429Too Many RequestsLimite di richieste raggiunto
500Server ErrorQualcosa si è rotto dal tuo lato

Restituisci gli errori in un'unica forma JSON coerente, per esempio {"error": {"code": "slot_taken", "message": "Quell'orario non è più disponibile."}}, e non includere mai stack trace o errori del database nelle risposte.

Opzioni e compromessi

DecisioneScelta sempliceAlternativa
Dove vive l'APIRoute API nel tuo framework webUn servizio API separato, utile per più client o un linguaggio diverso
AutenticazioneCookie di sessione per la tua web appToken (bearer token o chiavi API) per app mobile e terze parti
Paginazione?page=2&limit=20Basata su cursore (?after=...), più stabile per liste grandi che cambiano
VersionamentoNessuno finché non hai utenti esterni/v1/ nel percorso, quando altri ne dipendono
DocumentazioneUn README che elenca le routeUna specifica OpenAPI, da cui gli strumenti possono generare documentazione interattiva e codice client

Passo dopo passo

  1. Elenca risorse e route come sopra, incluso chi può chiamare ciascuna.
  2. Modella i dati nel tuo database con i campi e le relazioni che ti servono.
  3. Costruisci prima le route di lettura, poi create, update e delete.
  4. Valida l'input in ogni scrittura con una libreria di schema: campi obbligatori, tipi, lunghezze, valori ammessi. Rifiuta i campi sconosciuti.
  5. Aggiungi l'autenticazione, poi l'autorizzazione per singolo record: caricare /bookings/42 deve verificare che la prenotazione 42 appartenga al chiamante, non solo che qualcuno abbia effettuato l'accesso.
  6. Pagina ogni lista e limita la dimensione della pagina.
  7. Limita le richieste per il login e le route costose. Vedi rate limiting.
  8. Configura CORS solo se browser di altri domini devono chiamare l'API, ed elenca esplicitamente quelle origini. Come risolvere gli errori CORS spiega gli errori che vedrai.
  9. Scrivi documentazione e test per ogni route, inclusi i casi di errore.
  10. Pubblica con i segreti nelle variabili d'ambiente, HTTPS, log e un controllo di integrità.

Prompt per il tuo AI builder

Impalcatura:

Crea una REST API per le prenotazioni con queste route: GET /api/health, GET /api/bookings (paginato, massimo 50 per pagina), POST /api/bookings, GET /api/bookings/:id, PATCH /api/bookings/:id, DELETE /api/bookings/:id. Salva i dati nel nostro database. Valida i corpi delle richieste con una libreria di schema e rifiuta i campi sconosciuti. Restituisci gli errori JSON come {"error": {"code", "message"}} con i codici di stato corretti (400, 401, 403, 404, 409). Conserva i segreti nelle variabili d'ambiente.

Sicurezza:

Richiedi l'accesso su ogni route delle prenotazioni. Per ogni lettura, aggiornamento ed eliminazione, verifica lato server che la prenotazione appartenga all'utente corrente; restituisci 404 se non appartiene. Non accettare mai ID utente o ruoli dal corpo della richiesta. Limita POST /api/bookings a 20 al minuto per utente. Registra gli errori sul server senza restituire stack trace.

Documentazione:

Scrivi una descrizione OpenAPI di queste route e un breve README con esempi di richieste e risposte per ciascuna.

Testare la tua API

Testa dall'esterno del frontend, perché lo faranno gli attaccanti:

  • Ogni route funziona con input validi e restituisce la forma e il codice documentati
  • Campi mancanti o non validi restituiscono 400 con un messaggio chiaro
  • Nessun token restituisce 401 su ogni route protetta
  • L'utente A che richiede il record dell'utente B tramite ID ottiene 404 o 403
  • Le liste sono paginate; un limit enorme viene limitato
  • Le creazioni duplicate o in conflitto restituiscono 409, non 500
  • I rate limit restituiscono 429
  • Le risposte di errore non contengono stack trace, SQL o segreti
  • CORS consente solo le origini che intendi

Errori comuni

  • Controllare il login ma non la proprietà. È la falla più comune nelle API: qualsiasi utente connesso può leggere qualsiasi record cambiando l'ID.
  • Fidarsi del client. Prezzi, ruoli e ID utente nel corpo della richiesta possono essere modificati.
  • Restituire intere righe del database. Gli hash delle password e i campi interni finiscono all'esterno. Scegli cosa include ogni risposta.
  • Liste senza limiti. Una richiesta per ogni record può rallentare l'intera app.
  • 200 OK con un messaggio di errore dentro. Client e monitoraggio non possono capire che è fallito.
  • CORS impostato per consentire tutto su un'API che usa i cookie.
  • Nessun controllo di integrità né log, quindi scopri i guasti dagli utenti.

Per una verifica più ampia prima del lancio, vedi la checklist di sicurezza per app costruite con l'AI.

Costruire una REST API in Mythex

Puoi chiedere a Mythex un'API come parte della tua app o come servizio a sé. La ricetta della documentazione REST API backend include un prompt di partenza: indica framework e route, chiedi errori JSON chiari, conserva i segreti nelle variabili d'ambiente e includi un Dockerfile. I backend container in Node, Python, C#, Java e altri si pubblicano tramite un Dockerfile, e Mythex gestisce il deploy da Publish (backend API). Un progetto può far girare un sito e un server API affiancati, e puoi passare dall'uno all'altro nell'anteprima. Salva le chiavi come segreti del progetto e, se l'API richiede un database, chiedilo in chat. Per il lavoro programmato attorno alla tua API, vedi come eseguire job in background.

Domande

Che cos'è una REST API?

Una REST API è il modo in cui i programmi lavorano con i dati della tua app tramite HTTP. Ogni tipo di dato è una risorsa con un proprio URL, come /orders, e i metodi standard agiscono su di essa: GET per leggere, POST per creare, PATCH o PUT per aggiornare e DELETE per eliminare. I dati vengono di solito inviati in JSON.

In quale linguaggio dovrei costruire una REST API?

Usa quello che tu o il tuo team sapete mantenere. Node.js con Express o Fastify, Python con FastAPI e i framework C# o Java funzionano tutti bene. Le regole di progettazione per route, codici di stato, validazione e autenticazione contano più del linguaggio.

Come proteggo una REST API?

Richiedi l'autenticazione su ogni route non pubblica, verifica lato server che il chiamante possa accedere a ogni singolo record, valida tutti gli input, usa HTTPS, limita il numero di richieste e conserva i segreti nelle variabili d'ambiente. Non fidarti mai di ID o ruoli inviati dal client.

Mi serve un backend separato per una REST API?

Non sempre. Framework come Next.js possono servire le route API accanto alle pagine. Un servizio API separato ha senso quando più client (web, mobile, partner) la usano, oppure quando richiede un proprio linguaggio o una scalabilità dedicata.

Mythex · Pricing · Crea qualsiasi cosa con l'AI · Template per siti web e app · Mythex a confronto · Glossario per creare app con l'AI · Strumenti gratuiti per creare app con l'AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)