{"id":62265,"date":"2022-11-29T13:06:30","date_gmt":"2022-11-29T12:06:30","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=62265&#038;preview=true&#038;preview_id=62265"},"modified":"2023-06-07T09:39:16","modified_gmt":"2023-06-07T08:39:16","slug":"fastapi","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/fastapi\/","title":{"rendered":"Costruire un&#8217;App con FastAPI per Python"},"content":{"rendered":"<p>FastAPI \u00e8 un framework web veloce e leggero per la creazione di moderne interfacce di programmazione di applicazioni utilizzando <a href=\"https:\/\/kinsta.com\/it\/blog\/programmazione-orientata-agli-oggetti-python\/\">Python<\/a> 3.6 o superiore. In questo tutorial vi spiegheremo le basi della costruzione di un&#8217;applicazione con FastAPI e vi faremo capire perch\u00e9 \u00e8 stato nominato come uno dei <a href=\"https:\/\/www.infoworld.com\/article\/3637038\/the-best-open-source-software-of-2021.html#slide5\" target=\"_blank\" rel=\"noopener noreferrer\">migliori framework open-source del 2021<\/a>.<\/p>\n<p>Quando avrete tutto pronto a sviluppare le vostre applicazioni FastAPI, non dovrete cercare lontano per trovare un posto dove ospitarle. I servizi di <a href=\"https:\/\/sevalla.com\/application-hosting\/\">hosting di applicazioni<\/a> e di <a href=\"https:\/\/sevalla.com\/database-hosting\/\">hosting di database<\/a> di Kinsta offrono una piattaforma come servizio che si basa su Python.<\/p>\n<p>Impariamo prima le basi.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Vantaggi di FastAPI<\/h2>\n<p>Di seguito elenchiamo alcuni dei vantaggi che il <a href=\"https:\/\/fastapi.tiangolo.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">framework FastAPI<\/a> apporta a un progetto.<\/p>\n<ul>\n<li><strong>Velocit\u00e0:<\/strong> Come suggerisce il nome, FastAPI \u00e8 un framework molto veloce. La sua velocit\u00e0 \u00e8 paragonabile a quella di <a href=\"https:\/\/docs.sevalla.com\/templates\/overview\">Go<\/a> e <a href=\"https:\/\/docs.sevalla.com\/templates\/overview\">Node.js<\/a>, che sono generalmente considerati tra le opzioni pi\u00f9 veloci per la creazione di API.<\/li>\n<li><strong>Facile da imparare e da codificare:<\/strong> FastAPI ha gi\u00e0 previsto quasi tutto ci\u00f2 di cui avrete bisogno per realizzare un&#8217;API pronta per la produzione. In qualit\u00e0 di developer che usa FastAPI, non dovrete codificare tutto da zero. Con poche righe di codice potete avere un&#8217;API RESTful pronta per la distribuzione.<\/li>\n<li><strong>Documentazione completa:<\/strong> FastAPI usa gli standard di documentazione OpenAPI, quindi la documentazione pu\u00f2 essere generata dinamicamente. Questa documentazione fornisce informazioni dettagliate sugli endpoint, le risposte, i parametri e i codici di ritorno di FastAPI.<\/li>\n<li><strong>API con meno bug:<\/strong> FastAPI supporta la <a href=\"https:\/\/fastapi.tiangolo.com\/tutorial\/query-params-str-validations\/#add-more-validations\" target=\"_blank\" rel=\"noopener noreferrer\">convalida personalizzata dei dati<\/a>, il che consente a chi sviluppa di creare API con meno bug. Sviluppatrici e sviluppatori di FastAPI si vantano del fatto che il framework produce meno bug indotti dall&#8217;uomo, fino al 40% in meno.<\/li>\n<li><strong>Suggerimenti sui tipi:<\/strong> Il modulo dei tipi \u00e8 stato introdotto in Python 3.5. Questo modulo vi permette di dichiarare il tipo <code>type<\/code> di una variabile. Quando il tipo di una variabile viene dichiarato, gli IDE sono in grado di fornire un supporto migliore e di prevedere gli errori con maggiore precisione.<\/li>\n<\/ul>\n\n<h2>Come Iniziare a Usare FastAPI<\/h2>\n<p>Per seguire questo tutorial e iniziare a usare FastAPI, dovete prima fare alcune cose.<\/p>\n<p>Verificate di avere un editor di testo\/IDE per developer, come <a href=\"https:\/\/code.visualstudio.com\/download\" target=\"_blank\" rel=\"noopener noreferrer\">Visual Studio Code<\/a>. Altre opzioni sono <a href=\"https:\/\/kinsta.com\/it\/blog\/come-usare-sublime-text\/\" rel=\"noopener\">Sublime Text<\/a> ed <a href=\"https:\/\/www.espressoapp.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Espresso<\/a>.<\/p>\n<p>\u00c8 una pratica comune avere le vostre applicazioni Python e le loro istanze in esecuzione in ambienti virtuali. Gli ambienti virtuali permettono di eseguire contemporaneamente diversi set di pacchetti e configurazioni ed evitano conflitti dovuti a versioni di pacchetti incompatibili.<\/p>\n<p>Per creare un ambiente virtuale, aprite il <a href=\"https:\/\/kinsta.com\/it\/blog\/comandi-python\/#introduction-to-the-cli\">vostro terminale<\/a> ed eseguite questo comando:<\/p>\n<pre><code class=\"language-bash\">$ python3 -m venv env<\/code><\/pre>\n<p>Dovrete anche attivare l&#8217;ambiente virtuale. Il comando per farlo varia a seconda del sistema operativo e della shell che state usando. Ecco alcuni esempi di attivazione CLI per diversi ambienti:<\/p>\n<pre><code class=\"language-bash\"># On Unix or MacOS (bash shell): \n\/path\/to\/venv\/bin\/activate\n\n# On Unix or MacOS (csh shell):\n\/path\/to\/venv\/bin\/activate.csh\n\n# On Unix or MacOS (fish shell):\n\/path\/to\/venv\/bin\/activate.fish\n\n# On Windows (command prompt):\npathtovenvScriptsactivate.bat\n\n# On Windows (PowerShell):\npathtovenvScriptsActivate.ps1\n<\/code><\/pre>\n<p>(Alcuni IDE Python-aware possono anche essere configurati per attivare l&#8217;ambiente virtuale corrente.)<\/p>\n<p>Ora installate FastAPI:<\/p>\n<pre><code class=\"language-bash\">$ pip3 install fastapi<\/code><\/pre>\n<p>FastAPI \u00e8 un framework per la creazione di API, ma per testare le vostre API avrete bisogno di un server web locale. <a href=\"https:\/\/www.uvicorn.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Uvicorn<\/a> \u00e8 un server web Asynchronous Server Gateway Interface (ASGI) velocissimo per Python, ottimo per lo sviluppo. Per installare Uvicorn, eseguite questo comando:<\/p>\n<pre><code class=\"language-bash\">$ pip3 install \"uvicorn[standard]\"<\/code><\/pre>\n<p>Una volta completata l&#8217;installazione, create un file chiamato <strong>main.py<\/strong> nella directory di lavoro del vostro progetto. Questo file sar\u00e0 il punto di ingresso della vostra applicazione.<\/p>\n<figure id=\"attachment_139510\" aria-describedby=\"caption-attachment-139510\" style=\"width: 1151px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-project-layout.png\" alt=\"Vista di un progetto FastAPI di base all'interno di un IDE.\" width=\"1151\" height=\"475\"><figcaption id=\"caption-attachment-139510\" class=\"wp-caption-text\">Vista di un progetto FastAPI di base all&#8217;interno di un IDE.<\/figcaption><\/figure>\n<h3>Un Rapido Esempio di FastAPI<\/h3>\n<p>Per testare la vostra installazione di FastAPI, impostate rapidamente un endpoint di esempio. Nel vostro file <strong>main.py<\/strong>, incollate il seguente codice e salvate il file:<\/p>\n<pre><code class=\"language-python\"># main.py\nfrom fastapi import FastAPI\napp = FastAPI()\n@app.get(\"\/\")\nasync def root():\n return {\"greeting\":\"Hello world\"}\n<\/code><\/pre>\n<p>Lo snippet qui sopra crea un endpoint FastAPI di base. Di seguito trovate un riassunto di ci\u00f2 che fa ogni riga:<\/p>\n<ul>\n<li><code>from fastapi import FastAPI<\/code>: La funzionalit\u00e0 della vostra API \u00e8 fornita dalla classe FastAPI di Python.<\/li>\n<li><code>app = FastAPI()<\/code>: Create un&#8217;istanza FastAPI.<\/li>\n<li><code>@app.get(\"\/\")<\/code>: Si tratta di un decoratore python che specifica a FastAPI che la funzione sottostante \u00e8 responsabile della gestione delle richieste.<\/li>\n<li><code>@app.get(\"\/\")<\/code>: Si tratta di un decoratore che specifica il percorso. Crea un metodo <code>GET<\/code> sulla rotta del sito. Il risultato viene restituito dalla funzione wrapped.<\/li>\n<li>Altre possibili operazioni usate per comunicare sono <code>@app.post()<\/code>, <code>@app.put()<\/code>, <code>@app.delete()<\/code>, <code>@app.options()<\/code>, <code>@app.head()<\/code>, <code>@app.patch()<\/code> e <code>@app.trace()<\/code>.<\/li>\n<\/ul>\n<p>Nella directory dei file, eseguite il seguente comando nel vostro terminale per avviare il server API:<\/p>\n<pre><code class=\"language-bash\">$ uvicorn main:app --reload<\/code><\/pre>\n<p>In questo comando, <code>main<\/code> \u00e8 il nome del vostro modulo. L&#8217;oggetto <code>app<\/code> \u00e8 un&#8217;istanza della vostra applicazione e viene importato nel server ASGI. Il flag <code>--reload<\/code> indica al server di ricaricarsi automaticamente quando si apportano modifiche.<\/p>\n<p>Dovreste vedere qualcosa di simile nel vostro terminale:<\/p>\n<pre><code> $ uvicorn main:app --reload\nINFO: Will watch for changes in these directories: ['D:\\WEB DEV\\Eunit\\Tests\\fast-api']\nINFO: Uvicorn running on http:\/\/127.0.0.1:8000 (Press CTRL+C to quit)\nINFO: Started reloader process [26888] using WatchFiles\nINFO: Started server process [14956]\nINFO: Waiting for application startup.\nINFO: Application startup complete.\n<\/code><\/pre>\n<p>Nel vostro browser, andate su <code>http:\/\/localhost:8000<\/code> per confermare che l&#8217;API funziona. Dovreste vedere &#8220;Hello&#8221;: &#8220;World&#8221; come oggetto JSON nella pagina. Questo dimostra quanto sia facile creare un&#8217;API con FastAPI. Tutto ci\u00f2 che dovete fare \u00e8 definire una rotta e restituire il vostro dizionario Python, come si vede alla riga 6 dello snippet qui sopra.<\/p>\n<figure id=\"attachment_139513\" aria-describedby=\"caption-attachment-139513\" style=\"width: 900px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-hello-world-in-browser.png\" alt=\"Applicazione FastAPI Hello World in un browser web.\" width=\"900\" height=\"340\"><figcaption id=\"caption-attachment-139513\" class=\"wp-caption-text\">Applicazione FastAPI Hello World in un browser web.<\/figcaption><\/figure>\n<h3>Usare i Suggerimenti di Tipo<\/h3>\n<p>Se usate Python, siete abituati ad annotare le variabili con i tipi di dati di base come <code>int<\/code>, <code>str<\/code>, <code>float<\/code> e <code>bool<\/code>. Tuttavia, a partire dalla versione 3.9 di Python, sono state introdotte strutture di dati avanzate. Questo vi permette di lavorare con strutture di dati come <code>dictionaries<\/code>, <code>tuples<\/code> e <code>lists<\/code>. Con i suggerimenti di tipo di FastAPI, potete strutturare lo schema dei vostri dati usando i template <a href=\"https:\/\/pydantic-docs.helpmanual.io\/usage\/models\/\" target=\"_blank\" rel=\"noopener noreferrer\">pydantic<\/a> e poi usare i template pydantic per i suggerimenti di tipo e beneficiare della validazione dei dati che vi viene fornita.<\/p>\n<p>Nell&#8217;esempio che segue, l&#8217;uso dei suggerimenti di tipo in Python \u00e8 dimostrato con un semplice calcolatore del prezzo dei pasti, <code>calculate_meal_fee<\/code>:<\/p>\n<pre><code class=\"language-python\">def calculate_meal_fee(beef_price: int, meal_price: int) -&gt; int:\n total_price: int = beef_price + meal_price\n return total_price\nprint(\"Calculated meal fee\", calculate_meal_fee(75, 19))\n<\/code><\/pre>\n<p>Notate che i suggerimenti di tipo non modificano l&#8217;esecuzione del codice.<\/p>\n<h3>Documentazione API Interattiva di FastAPI<\/h3>\n<p>FastAPI usa <a href=\"https:\/\/github.com\/swagger-api\/swagger-ui\" target=\"_blank\" rel=\"noopener noreferrer\">Swagger UI<\/a> per fornire una documentazione interattiva automatica delle API. Per accedervi, navigate su <code>http:\/\/localhost:8000\/docs<\/code> e vedrete una schermata con tutti i vostri endpoint, metodi e schemi.<\/p>\n<figure id=\"attachment_139536\" aria-describedby=\"caption-attachment-139536\" style=\"width: 900px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/swagger-ui-fastapi-documentation-interface.png\" alt=\"Schermata dell'interfaccia Swagger UI per la documentazione.\" width=\"900\" height=\"1013\"><figcaption id=\"caption-attachment-139536\" class=\"wp-caption-text\">La documentazione di Swagger UI per FastAPI.<\/figcaption><\/figure>\n<p>Questa documentazione automatica dell&#8217;API basata sul browser \u00e8 fornita da FastAPI e non dovete fare altro per usufruirne.<\/p>\n<p>Un&#8217;alternativa alla documentazione API basata sul browser, anch&#8217;essa fornita da FastAPI, \u00e8 <a href=\"https:\/\/github.com\/Redocly\/redoc\" target=\"_blank\" rel=\"noopener noreferrer\">Redoc<\/a>. Per accedere a Redoc, andate su <code>http:\/\/localhost:8000\/redoc<\/code>, dove vi verr\u00e0 presentato un elenco dei vostri endpoint, dei metodi e delle rispettive risposte.<\/p>\n<figure id=\"attachment_139536\" aria-describedby=\"caption-attachment-139536\" style=\"width: 900px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/redoc-fastapi-documentation-interface.png\" alt=\"Schermata dell'interfaccia Redoc per la documentazione.\" width=\"900\" height=\"1112\"><figcaption id=\"caption-attachment-139536\" class=\"wp-caption-text\">La documentazione di Redoc per FastAPI.<\/figcaption><\/figure>\n<h3>Impostare i Percorsi in FastAPI<\/h3>\n<p>Il decoratore <code>@app<\/code> vi permette di specificare il <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Methods\" target=\"_blank\" rel=\"noopener noreferrer\">metodo<\/a> del percorso, come <code>@app.get<\/code> o <code>@app.post<\/code>, e supporta <code>GET<\/code>, <code>POST<\/code>, <code>PUT<\/code>, e <code>DELETE<\/code>, oltre alle opzioni meno comuni, <code>HEAD<\/code>, <code>PATCH<\/code>, e <code>TRACE<\/code>.<\/p>\n<h2>Costruire un\u2019App con FastAPI<\/h2>\n<p>In questo tutorial vi illustriamo la costruzione di un&#8217;applicazione <a href=\"https:\/\/www.codecademy.com\/article\/what-is-crud\" target=\"_blank\" rel=\"noopener noreferrer\">CRUD<\/a> con FastAPI. L&#8217;applicazione sar\u00e0 in grado di:<\/p>\n<ul>\n<li>Creare un utente<\/li>\n<li>Leggere il record del database di un utente<\/li>\n<li>Aggiornare un utente esistente<\/li>\n<li>Eliminare un particolare utente<\/li>\n<\/ul>\n<p>Per eseguire queste operazioni CRUD, creerete dei metodi che espongono gli endpoint dell&#8217;API. Il risultato sar\u00e0 un database in-memory in grado di memorizzare un elenco di utenti.<\/p>\n<figure id=\"attachment_139543\" aria-describedby=\"caption-attachment-139543\" style=\"width: 864px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/database-table-fastapi-crud-example.png\" alt=\"Diagramma della struttura delle tabelle del database per gli esempi CRUD.\" width=\"864\" height=\"551\"><figcaption id=\"caption-attachment-139543\" class=\"wp-caption-text\">Struttura della tabella del database per gli esempi CRUD.<\/figcaption><\/figure>\n<p>Userete la libreria <a href=\"https:\/\/pydantic-docs.helpmanual.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">pydantic<\/a> per eseguire la convalida dei dati e la gestione delle impostazioni utilizzando le annotazioni di tipo Python. Ai fini di questo tutorial, dichiarerete la forma dei vostri dati come classi con attributi.<\/p>\n<p>Questo tutorial utilizzer\u00e0 il database in-memory. Questo per iniziare rapidamente a utilizzare FastAPI per creare le vostre API. Tuttavia, per la produzione, potete usare qualsiasi database a vostra scelta, come <a href=\"https:\/\/kinsta.com\/it\/blog\/cosa-e-postgresql\/\">PostgreSQL<\/a>, <a href=\"https:\/\/kinsta.com\/it\/blog\/cosa-e-mysql\/\">MySQL<\/a>, <a href=\"https:\/\/kinsta.com\/it\/blog\/sqlite-vs-mysql\/#what-is-sqlite\">SQLite<\/a> o persino Oracle.<\/p>\n<h3>Creare l&#8217;Applicazione<\/h3>\n<p>Inizierete creando il vostro modello utente. Il modello utente avr\u00e0 i seguenti attributi:<\/p>\n<ul>\n<li><code>id<\/code>: Un identificatore univoco universale (UUID)<\/li>\n<li><code>first_name<\/code>: Il nome dell&#8217;utente<\/li>\n<li><code>last_name<\/code>: Il cognome dell&#8217;utente<\/li>\n<li><code>gender<\/code>: Il genere dell&#8217;utente<\/li>\n<li><code>roles<\/code>, cio\u00e8 un elenco contenente i ruoli <code>admin<\/code> e <code>user<\/code><\/li>\n<\/ul>\n<p>Iniziate creando un nuovo file chiamato <strong>models.py<\/strong> nella vostra directory di lavoro, quindi incollate il seguente codice in <strong>models.py<\/strong> per creare il vostro modello:<\/p>\n<pre><code class=\"language-python\">\n# models.py\nfrom typing import List, Optional\nfrom uuid import UUID, uuid4\nfrom pydantic import BaseModel\nfrom enum import Enum\nfrom pydantic import BaseModel\nclass Gender(str, Enum):\n male = \"male\"\n female = \"female\"\nclass Role(str, Enum):\n admin = \"admin\"\n user = \"user\"\nclass User(BaseModel):\n id: Optional[UUID] = uuid4()\n first_name: str\n last_name: str\n gender: Gender\n roles: List[Role]\n<\/code><\/pre>\n<p>Nel codice precedente:<\/p>\n<ul>\n<li>La vostra classe <code>User<\/code> estende <code>BaseModel<\/code>, che viene importata da <code>pydantic<\/code>.<\/li>\n<li>Avete definito gli attributi dell&#8217;utente, come discusso in precedenza.<\/li>\n<\/ul>\n<p>Il passo successivo \u00e8 la creazione del database. Sostituite il contenuto del file <strong>main.py<\/strong> con il seguente codice:<\/p>\n<pre><code class=\"language-python\">\n# main.py\nfrom typing import List\nfrom uuid import uuid4\nfrom fastapi import FastAPI\nfrom models import Gender, Role, User\napp = FastAPI()\ndb: List[User] = [\n User(\n id=uuid4(),\n first_name=\"John\",\n last_name=\"Doe\",\n gender=Gender.male,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"Jane\",\n last_name=\"Doe\",\n gender=Gender.female,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"James\",\n last_name=\"Gabriel\",\n gender=Gender.male,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"Eunit\",\n last_name=\"Eunit\",\n gender=Gender.male,\n roles=[Role.admin, Role.user],\n ),\n]\n<\/code><\/pre>\n<p>In <strong>main.py<\/strong>:<\/p>\n<ul>\n<li>Avete inizializzato <code>db<\/code> con un tipo di <code>List<\/code> e avete inserito il modello <code>User<\/code><\/li>\n<li>Avete creato un database in-memory con quattro utenti, ciascuno con gli attributi richiesti come <code>first_name<\/code>, <code>last_name<\/code>, <code>gender<\/code> e <code>roles<\/code>. All&#8217;utente <code>Eunit<\/code> sono assegnati i ruoli di <code>admin<\/code> e <code>user<\/code>, mentre agli altri tre utenti \u00e8 assegnato solo il ruolo di <code>user<\/code>.<\/li>\n<\/ul>\n<h3>Leggere i Record del Database<\/h3>\n<p>Avete configurato correttamente il vostro database in-memory e lo avete popolato di utenti, quindi il passo successivo \u00e8 quello di configurare un endpoint che restituisca un elenco di tutti gli utenti. Qui entra in gioco FastAPI.<\/p>\n<p>Nel file <strong>main.py<\/strong>, incollate il seguente codice appena sotto l&#8217;endpoint <code>Hello World<\/code>:<\/p>\n<pre><code class=\"language-python\">\n# main.py\n @app.get(\"\/api\/v1\/users\")\n async def get_users():\n return db\n<\/code><\/pre>\n<p>Questo codice definisce l&#8217;endpoint <code>\/api\/v1\/users<\/code> e crea una funzione asincrona, <code>get_users<\/code>, che restituisce tutti i contenuti del database, <code>db<\/code>.<\/p>\n<p>Salvate il file e testate il vostro endpoint utente. Eseguite il seguente comando nel vostro terminale per avviare il server API:<\/p>\n<pre><code class=\"language-bash\">$ uvicorn main:app --reload<\/code><\/pre>\n<p>Nel vostro browser, navigate su <code>http:\/\/localhost:8000\/api\/v1\/users<\/code>. Questo dovrebbe restituire un elenco di tutti i vostri utenti, come mostrato di seguito:<\/p>\n<figure id=\"attachment_139547\" aria-describedby=\"caption-attachment-139547\" style=\"width: 685px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-results-read-request.png\" alt=\"Schermata dei dati utente restituiti dalla richiesta GET di FastAPI.\" width=\"685\" height=\"1029\"><figcaption id=\"caption-attachment-139547\" class=\"wp-caption-text\">Dati utente recuperati dalla richiesta di lettura del database FastAPI.<\/figcaption><\/figure>\n<p>A questo punto, il vostro file <strong>main.py<\/strong> avr\u00e0 il seguente aspetto:<\/p>\n<pre><code class=\"language-python\">\n# main.py\nfrom typing import List\nfrom uuid import uuid4\nfrom fastapi import FastAPI\nfrom models import Gender, Role, User\napp = FastAPI()\ndb: List[User] = [\n User(\n id=uuid4(),\n first_name=\"John\",\n last_name=\"Doe\",\n gender=Gender.male,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"Jane\",\n last_name=\"Doe\",\n gender=Gender.female,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"James\",\n last_name=\"Gabriel\",\n gender=Gender.male,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"Eunit\",\n last_name=\"Eunit\",\n gender=Gender.male,\n roles=[Role.admin, Role.user],\n ),\n]\n@app.get(\"\/\")\nasync def root():\n return {\"Hello\": \"World\",}\n@app.get(\"\/api\/v1\/users\")\nasync def get_users():\n return db\n<\/code><\/pre>\n<h3>Creare i Record del Database<\/h3>\n<p>Il passo successivo consiste nel creare un endpoint per creare un nuovo utente nel database. Incollate il seguente frammento nel vostro file <strong>main.py<\/strong>:<\/p>\n<pre><code class=\"language-python\">\n# main.py\n@app.post(\"\/api\/v1\/users\")\nasync def create_user(user: User):\n db.append(user)\n return {\"id\": user.id}\n<\/code><\/pre>\n<p>In questo snippet, avete definito l&#8217;endpoint per inviare un nuovo utente e avete utilizzato il decoratore <code>@app.post<\/code> per creare un metodo <code>POST<\/code>.<\/p>\n<p>Avete anche creato la funzione <code>create_user<\/code>, che accetta <code>user<\/code> del modello <code>User<\/code> e ha aggiunto il nuovo utente <code>user<\/code> al database, <code>db<\/code>. Infine, l&#8217;endpoint restituisce un oggetto JSON con l&#8217;indirizzo <code>id<\/code> dell&#8217;utente appena creato.<\/p>\n<p>Per testare il vostro endpoint dovrete usare la documentazione automatica dell&#8217;API fornita da FastAPI, come visto sopra. Questo perch\u00e9 non \u00e8 possibile effettuare una richiesta di post utilizzando il browser web. Navigate su <code>http:\/\/localhost:8000\/docs<\/code> per eseguire il test usando la documentazione fornita da <a href=\"https:\/\/github.com\/swagger-api\/swagger-ui\">SwaggerUI<\/a>.<\/p>\n<figure id=\"attachment_139546\" aria-describedby=\"caption-attachment-139546\" style=\"width: 685px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-parameters-post-request.png\" alt=\"Schermata che mostra i parametri della richiesta FastAPI POST.\" width=\"685\" height=\"1029\"><figcaption id=\"caption-attachment-139546\" class=\"wp-caption-text\">Parametri per una richiesta FastAPI POST.<\/figcaption><\/figure>\n<h3>Cancellare i Record del Database<\/h3>\n<p>Dato che state realizzando un&#8217;applicazione CRUD, la vostra applicazione dovr\u00e0 avere la possibilit\u00e0 di <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Methods\/DELETE\">cancellare<\/a> una risorsa specifica. In questo tutorial, creerete un endpoint per cancellare un utente.<\/p>\n<p>Incollate il seguente codice nel vostro file <strong>main.py<\/strong>:<\/p>\n<pre><code class=\"language-python\">\n# main.py\nfrom uuid import UUID\nfrom fastapi HTTPException\n@app.delete(\"\/api\/v1\/users\/{id}\")\nasync def delete_user(id: UUID):\nfor user in db:\n if user.id == id:\n db.remove(user)\n return\nraise HTTPException(\n status_code=404, detail=f\"Delete user failed, id {id} not found.\"\n )\n<\/code><\/pre>\n<p>Ecco una descrizione riga per riga di come funziona il codice:<\/p>\n<ul>\n<li><code>@app.delete(\"\/api\/v1\/users\/{id}\")<\/code>: Avete creato l&#8217;endpoint di cancellazione utilizzando il decoratore <code>@app.delete()<\/code>. Il percorso \u00e8 ancora <code>\/api\/v1\/users\/{id}<\/code>, ma poi recupera <code>id<\/code>, che \u00e8 una variabile di percorso corrispondente all&#8217;id dell&#8217;utente.<\/li>\n<li><code>async def delete_user(id: UUID):<\/code>: Crea la funzione <code>delete_user<\/code> che recupera <code>id<\/code> dall&#8217;URL.<\/li>\n<li><code>for user in db:<\/code>: Indica all&#8217;applicazione di eseguire un ciclo tra gli utenti del database e di verificare se l&#8217;indirizzo <code>id<\/code> passato corrisponde a un utente del database.<\/li>\n<li><code>db.remove(user)<\/code>: Se <code>id<\/code> corrisponde a un utente, l&#8217;utente verr\u00e0 eliminato; altrimenti, verr\u00e0 generato un <code>HTTPException<\/code> con un <a href=\"https:\/\/kinsta.com\/it\/blog\/codici-di-stato-http\/\">codice di stato<\/a> 404.<\/li>\n<\/ul>\n<figure id=\"attachment_139545\" aria-describedby=\"caption-attachment-139545\" style=\"width: 594px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-parameters-delete-request.png\" alt=\"Schermata che mostra i parametri della richiesta FastAPI DELETE.\" width=\"594\" height=\"1030\"><figcaption id=\"caption-attachment-139545\" class=\"wp-caption-text\">Parametri per una richiesta FastAPI DELETE.<\/figcaption><\/figure>\n<h3>Aggiornare i Record del Database<\/h3>\n<p>Creerete un endpoint per aggiornare i dati di un utente. I dettagli che possono essere aggiornati includono i seguenti parametri: <code>first_name<\/code>, <code>last_name<\/code>, e <code>roles<\/code>.<\/p>\n<p>Nel vostro file <strong>models.py<\/strong>, incollate il seguente codice sotto il template <code>User<\/code>, cio\u00e8 dopo la classe <code>User(BaseModel):<\/code>:<\/p>\n<pre><code class=\"language-python\"> # models.py\n class UpdateUser(BaseModel):\n first_name: Optional[str]\n last_name: Optional[str]\n roles: Optional[List[Role]]\n<\/code><\/pre>\n<p>In questo frammento, la classe <code>UpdateUser<\/code> estende <code>BaseModel<\/code>. Poi impostate i parametri utente aggiornabili, come <code>first_name<\/code>, <code>last_name<\/code> e <code>roles<\/code>, come opzionali.<\/p>\n<p>Ora create un endpoint per aggiornare i dati di un determinato utente. Nel file <strong>main.py<\/strong>, incollate il seguente codice dopo il decoratore <code>@app.delete<\/code>:<\/p>\n<pre><code class=\"language-python\"># main.py\n@app.put(\"\/api\/v1\/users\/{id}\")\nasync def update_user(user_update: UpdateUser, id: UUID):\n for user in db:\n if user.id == id:\n if user_update.first_name is not None:\n user.first_name = user_update.first_name\n if user_update.last_name is not None:\n user.last_name = user_update.last_name\n if user_update.roles is not None:\n user.roles = user_update.roles\n return user.id\n raise HTTPException(status_code=404, detail=f\"Could not find user with id: {id}\")\n<\/code><\/pre>\n<p>Nel codice precedente, avete fatto quanto segue:<\/p>\n<ul>\n<li>Avete creato <code>@app.put(\"\/api\/v1\/users\/{id}\")<\/code>, l&#8217;endpoint di aggiornamento. Il parametro variabile <code>id<\/code> corrisponde all&#8217;id dell&#8217;utente.<\/li>\n<li>Avete creato un metodo chiamato <code>update_user<\/code>, che accetta la classe <code>UpdateUser<\/code> e <code>id<\/code>.<\/li>\n<li>Usate un ciclo <code>for<\/code> per verificare se l&#8217;utente associato al parametro <code>id<\/code> \u00e8 presente nel database.<\/li>\n<li>Controllate se i parametri dell&#8217;utente sono <code>is not None<\/code> (non nulli). Se un parametro, come <code>first_name<\/code>, <code>last_name<\/code>, o <code>roles<\/code>, non \u00e8 nullo, viene aggiornato.<\/li>\n<li>Se l&#8217;operazione ha successo, viene restituito l&#8217;id dell&#8217;utente.<\/li>\n<li>Se l&#8217;utente non \u00e8 stato trovato, viene sollevata un&#8217;eccezione <code>HTTPException<\/code> con codice di stato 404 e messaggio <code>Could not find user with id: {id}<\/code>.<\/li>\n<\/ul>\n<p>Per testare questo endpoint, verificate che il vostro server Uvicorn sia in funzione. Se non \u00e8 in esecuzione, inserite questo comando:<\/p>\n<pre><code class=\"language-bash\">uvicorn main:app --reload<\/code><\/pre>\n<p>Di seguito \u00e8 riportata una schermata del test.<\/p>\n<figure id=\"attachment_139550\" aria-describedby=\"caption-attachment-139550\" style=\"width: 593px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-parameters-update-request.png\" alt=\"Schermata che mostra i parametri per una richiesta FastAPI UPDATE.\" width=\"593\" height=\"954\"><figcaption id=\"caption-attachment-139550\" class=\"wp-caption-text\">Parametri per una richiesta FastAPI UPDATE.<\/figcaption><\/figure>\n\n<h2>Riepilogo<\/h2>\n<p>In questo tutorial avete imparato a conoscere il framework FastAPI per Python e avete visto con i vostri occhi quanto velocemente si pu\u00f2 realizzare un&#8217;applicazione alimentata da FastAPI. Avete imparato a costruire endpoint API CRUD usando il framework: creazione, lettura, aggiornamento e cancellazione di record di database.<\/p>\n<p>Ora, se volete portare lo sviluppo delle vostre applicazioni web a un livello superiore, verificate di dare un&#8217;occhiata alla piattaforma di Kinsta per <a href=\"https:\/\/kinsta.com\/it\/changelog\/hosting-applicazioni-database\/\">l&#8217;hosting di applicazioni e database<\/a>. Come FastAPI, \u00e8 davvero semplice.<\/p>\n<kinsta-video src=\"https:\/\/www.youtube.com\/watch?v=vmNem6wxfSQ\"><\/kinsta-video>\n","protected":false},"excerpt":{"rendered":"<p>FastAPI \u00e8 un framework web veloce e leggero per la creazione di moderne interfacce di programmazione di applicazioni utilizzando Python 3.6 o superiore. In questo tutorial &#8230;<\/p>\n","protected":false},"author":270,"featured_media":62656,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[21446,26070,25596,32],"topic":[26215],"class_list":["post-62265","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-api","tag-applicazioni-web","tag-python","tag-sviluppo-web","topic-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Costruire un&#039;App con FastAPI per Python - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Si chiama &quot;fast&quot; per una ragione! Ecco cosa c&#039;\u00e8 da sapere su FastAPI per costruire rapidamente API con Python.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/it\/blog\/fastapi\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Costruire un&#039;App con FastAPI per Python\" \/>\n<meta property=\"og:description\" content=\"Si chiama &quot;fast&quot; per una ragione! Ecco cosa c&#039;\u00e8 da sapere su FastAPI per costruire rapidamente API con Python.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/fastapi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-29T12:06:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-07T08:39:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/fastapi.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Emmanuel Uchenna\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Si chiama &quot;fast&quot; per una ragione! Ecco cosa c&#039;\u00e8 da sapere su FastAPI per costruire rapidamente API con Python.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/fastapi.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emmanuel Uchenna\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/fastapi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/fastapi\/\"},\"author\":{\"name\":\"Emmanuel Uchenna\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f\"},\"headline\":\"Costruire un&#8217;App con FastAPI per Python\",\"datePublished\":\"2022-11-29T12:06:30+00:00\",\"dateModified\":\"2023-06-07T08:39:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/fastapi\/\"},\"wordCount\":2146,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/fastapi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/fastapi.jpeg\",\"keywords\":[\"API\",\"applicazioni web\",\"python\",\"sviluppo web\"],\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/fastapi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/fastapi\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/fastapi\/\",\"name\":\"Costruire un'App con FastAPI per Python - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/fastapi\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/fastapi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/fastapi.jpeg\",\"datePublished\":\"2022-11-29T12:06:30+00:00\",\"dateModified\":\"2023-06-07T08:39:16+00:00\",\"description\":\"Si chiama \\\"fast\\\" per una ragione! Ecco cosa c'\u00e8 da sapere su FastAPI per costruire rapidamente API con Python.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/fastapi\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/fastapi\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/fastapi\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/fastapi.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/fastapi.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"Costruire un'App con FastAPI per Python\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/fastapi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/python\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Costruire un&#8217;App con FastAPI per Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f\",\"name\":\"Emmanuel Uchenna\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ad8b6a83415f2708e437768feb16d3da?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ad8b6a83415f2708e437768feb16d3da?s=96&d=mm&r=g\",\"caption\":\"Emmanuel Uchenna\"},\"description\":\"Emmanuel is an experienced, passionate, and enthusiastic software developer and technical writer with proven years of professional experience. He focuses on full-stack web development. He's fluent in ReactJS, JavaScript, VueJS, and NodeJS and familiar with industry-standard technologies such as Git, GitHub, and TDD. He helps individuals, businesses, and brands build responsive, accessible, beautiful, and intuitive websites to improve their online presence. He is also a technical writer for various websites and his own projects.\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/emmanueluchenna\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Costruire un'App con FastAPI per Python - Kinsta\u00ae","description":"Si chiama \"fast\" per una ragione! Ecco cosa c'\u00e8 da sapere su FastAPI per costruire rapidamente API con Python.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/it\/blog\/fastapi\/","og_locale":"it_IT","og_type":"article","og_title":"Costruire un'App con FastAPI per Python","og_description":"Si chiama \"fast\" per una ragione! Ecco cosa c'\u00e8 da sapere su FastAPI per costruire rapidamente API con Python.","og_url":"https:\/\/kinsta.com\/it\/blog\/fastapi\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2022-11-29T12:06:30+00:00","article_modified_time":"2023-06-07T08:39:16+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/fastapi.jpeg","type":"image\/jpeg"}],"author":"Emmanuel Uchenna","twitter_card":"summary_large_image","twitter_description":"Si chiama \"fast\" per una ragione! Ecco cosa c'\u00e8 da sapere su FastAPI per costruire rapidamente API con Python.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/fastapi.jpeg","twitter_creator":"@Kinsta_IT","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Emmanuel Uchenna","Tempo di lettura stimato":"14 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/fastapi\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/fastapi\/"},"author":{"name":"Emmanuel Uchenna","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f"},"headline":"Costruire un&#8217;App con FastAPI per Python","datePublished":"2022-11-29T12:06:30+00:00","dateModified":"2023-06-07T08:39:16+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/fastapi\/"},"wordCount":2146,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/fastapi\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/fastapi.jpeg","keywords":["API","applicazioni web","python","sviluppo web"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/fastapi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/fastapi\/","url":"https:\/\/kinsta.com\/it\/blog\/fastapi\/","name":"Costruire un'App con FastAPI per Python - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/fastapi\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/fastapi\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/fastapi.jpeg","datePublished":"2022-11-29T12:06:30+00:00","dateModified":"2023-06-07T08:39:16+00:00","description":"Si chiama \"fast\" per una ragione! Ecco cosa c'\u00e8 da sapere su FastAPI per costruire rapidamente API con Python.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/fastapi\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/fastapi\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/fastapi\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/fastapi.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/fastapi.jpeg","width":1460,"height":730,"caption":"Costruire un'App con FastAPI per Python"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/fastapi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Python","item":"https:\/\/kinsta.com\/it\/argomenti\/python\/"},{"@type":"ListItem","position":3,"name":"Costruire un&#8217;App con FastAPI per Python"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f","name":"Emmanuel Uchenna","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ad8b6a83415f2708e437768feb16d3da?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ad8b6a83415f2708e437768feb16d3da?s=96&d=mm&r=g","caption":"Emmanuel Uchenna"},"description":"Emmanuel is an experienced, passionate, and enthusiastic software developer and technical writer with proven years of professional experience. He focuses on full-stack web development. He's fluent in ReactJS, JavaScript, VueJS, and NodeJS and familiar with industry-standard technologies such as Git, GitHub, and TDD. He helps individuals, businesses, and brands build responsive, accessible, beautiful, and intuitive websites to improve their online presence. He is also a technical writer for various websites and his own projects.","url":"https:\/\/kinsta.com\/it\/blog\/author\/emmanueluchenna\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/62265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/270"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=62265"}],"version-history":[{"count":9,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/62265\/revisions"}],"predecessor-version":[{"id":69916,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/62265\/revisions\/69916"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62265\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62265\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62265\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62265\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62265\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62265\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62265\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62265\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62265\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62265\/translations\/dk"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/62265\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/62656"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=62265"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=62265"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=62265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}