API Design: REST, GraphQL e Best Practices per API Moderne

  • 11 Sep 2025
  • CODLAB Team
  • 4 min
  • 1327

Introduzione

Nell'era digitale odierna, le API (Application Programming Interfaces) rivestono un ruolo cruciale nello sviluppo di applicazioni web e mobile. Esse fungono da ponte tra diverse piattaforme software, permettendo loro di comunicare e scambiarsi dati in modo efficace. In questo contesto, la progettazione di API robuste, scalabili ed efficienti è fondamentale. Questo articolo esplora le due principali architetture API: REST e GraphQL, delineando le best practices per la creazione di API moderne che possano soddisfare le esigenze di business in continua evoluzione.

Architettura e Setup Iniziale

Prima di immergerci nella creazione di API, è essenziale configurare l'ambiente di sviluppo. Assumeremo l'uso di Python e Flask per REST API, e Node.js con Apollo Server per GraphQL. Entrambe le scelte sono ampiamente adottate nella comunità degli sviluppatori e offrono un ottimo punto di partenza per costruire API robuste.


# Installazione Flask per REST API
pip install flask

# Creazione di un semplice server Flask
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(debug=True)

// Installazione Apollo Server per GraphQL
npm install apollo-server graphql

// Creazione di un semplice Apollo Server
const { ApolloServer, gql } = require('apollo-server');

const typeDefs = gql\`
  type Query {
    hello: String
  }
\`;

const resolvers = {
  Query: {
    hello: () => 'Hello, world!',
  },
};

const server = new ApolloServer({ typeDefs, resolvers });

server.listen().then(({ url }) => {
  console.log(\`Server ready at ${url}\`);
});

Implementazione Dettagliata

Parte 1: Creazione di una REST API

La creazione di una REST API inizia con la definizione delle rotte e la gestione delle richieste GET, POST, PUT e DELETE. Concentriamoci su un esempio pratico: una API per un sistema di gestione di libri.


# Definizione di una semplice REST API per la gestione di libri
from flask import Flask, jsonify, request

app = Flask(__name__)
books = []

@app.route('/books', methods=['GET'])
def get_books():
    return jsonify({'books': books})

@app.route('/books', methods=['POST'])
def add_book():
    book = request.get_json()
    books.append(book)
    return jsonify(book), 201

@app.route('/books/<int:book_id>', methods=['PUT'])
def update_book(book_id):
    book = next((b for b in books if b['id'] == book_id), None)
    if not book:
        return jsonify({'message': 'Book not found'}), 404
    update_data = request.get_json()
    book.update(update_data)
    return jsonify(book)

@app.route('/books/<int:book_id>', methods=['DELETE'])
def delete_book(book_id):
    global books
    books = [b for b in books if b['id'] != book_id]
    return jsonify({'message': 'Book deleted'})

if __name__ == '__main__':
    app.run(debug=True)

Parte 2: Costruzione di un'API GraphQL

Migrando verso GraphQL, la creazione di un'API diventa più flessibile. Invece di definire molteplici endpoint, GraphQL usa un singolo endpoint attraverso il quale i client possono effettuare richieste complesse per ottenere esattamente i dati di cui hanno bisogno.


// Definizione di un semplice schema GraphQL per la gestione di libri
const { ApolloServer, gql } = require('apollo-server');

const books = [
  { id: 1, title: 'The Awakening', author: 'Kate Chopin' },
  { id: 2, title: 'City of Glass', author: 'Paul Auster' },
];

const typeDefs = gql\`
  type Book {
    id: ID
    title: String
    author: String
  }

  type Query {
    books: [Book]
    book(id: ID): Book
  }
\`;

const resolvers = {
  Query: {
    books: () => books,
    book: (_, { id }) => books.find(book => book.id == id),
  },
};

const server = new ApolloServer({ typeDefs, resolvers });

server.listen().then(({ url }) => {
  console.log(\`Server ready at ${url}\`);
});

Best Practices e Ottimizzazioni

  • Utilizzo di codici di stato HTTP appropriati: Assicuratevi di utilizzare i codici di stato HTTP corretti per rispondere alle richieste. Questo aiuta i client a comprendere il risultato delle loro richieste.
  • Validazione dell'input: È importante validare gli input del client per prevenire dati non validi o potenzialmente pericolosi di entrare nel sistema.
  • Uso di autenticazione e autorizzazione: Proteggete le vostre API con meccanismi di autenticazione e autorizzazione per garantire che solo gli utenti autorizzati possano accedere a dati sensibili.
  • Documentazione: Una documentazione chiara e completa è fondamentale per garantire che i client possano utilizzare l'API in modo efficace.

Conclusione

La progettazione di API moderne richiede un approccio ponderato e l'adozione di best practices. Sia REST che GraphQL offrono vantaggi significativi, e la scelta tra i due dipende dalle specifiche esigenze del progetto. Implementando le pratiche raccomandate discusse in questo articolo, gli sviluppatori possono creare API robuste, sicure e scalabili che serviranno efficacemente le esigenze delle applicazioni moderne.

Condividi questo articolo

Commenti

Nessun commento ancora. Sii il primo a commentare!

Lascia un commento

Non sarà pubblicata

Articoli Correlati

Hai un progetto in mente?

Sviluppiamo software personalizzato e soluzioni KI. Iniziamo insieme il tuo prossimo progetto.

Primo colloquio gratuito