{"id":47543,"date":"2022-11-29T12:12:57","date_gmt":"2022-11-29T12:12:57","guid":{"rendered":"https:\/\/kinsta.com\/se\/?p=47543&#038;preview=true&#038;preview_id=47543"},"modified":"2023-09-15T10:35:22","modified_gmt":"2023-09-15T10:35:22","slug":"fastapi","status":"publish","type":"post","link":"https:\/\/kinsta.com\/se\/blog\/fastapi\/","title":{"rendered":"Bygg en app med FastAPI f\u00f6r Python"},"content":{"rendered":"<p>FastAPI \u00e4r en snabb och l\u00e4tt webbram f\u00f6r att bygga moderna gr\u00e4nssnitt f\u00f6r till\u00e4mpningsprogrammering med hj\u00e4lp av <a href=\"https:\/\/kinsta.com\/se\/blog\/pythons-objektorienterade-programmering\/\">Python<\/a> 3.6 och senare. I den h\u00e4r handledningen s\u00e5 g\u00e5r vi igenom grunderna f\u00f6r att bygga en app med FastAPI, och du f\u00e5r l\u00e4ra dig lite om varf\u00f6r detta nominerades som ett av de <a href=\"https:\/\/www.infoworld.com\/article\/3637038\/the-best-open-source-software-of-2021.html#slide5\" target=\"_blank\" rel=\"noopener noreferrer\">b\u00e4sta ramverken med \u00f6ppen k\u00e4llkod \u00e5r 2021<\/a>.<\/p>\n<p>N\u00e4r du v\u00e4l \u00e4r redo att utveckla dina egna FastAPI-appar s\u00e5 beh\u00f6ver du inte leta l\u00e4nge efter en plats d\u00e4r du kan hosta dem. Kinsta\u2019s tj\u00e4nster f\u00f6r <a href=\"https:\/\/sevalla.com\/application-hosting\/\">applikations-<\/a> och <a href=\"https:\/\/sevalla.com\/database-hosting\/\">databashosting<\/a> erbjuder en \u201dPlatform As a Service\u201d som \u00e4r stark p\u00e5 Python.<\/p>\n<p>L\u00e5t oss f\u00f6rst l\u00e4ra oss grunderna.<\/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>F\u00f6rdelar med FastAPI<\/h2>\n<p>Nedan f\u00f6ljer n\u00e5gra av de f\u00f6rdelar som <a href=\"https:\/\/fastapi.tiangolo.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">FastAPI-ramverket<\/a> ger ett projekt.<\/p>\n<ul>\n<li><strong>Hastighet:<\/strong> Som namnet antyder s\u00e5 \u00e4r FastAPI ett mycket snabbt ramverk. Hastigheten \u00e4r j\u00e4mf\u00f6rbar med <a href=\"https:\/\/docs.sevalla.com\/templates\/overview\">Go<\/a> och <a href=\"https:\/\/docs.sevalla.com\/templates\/overview\">Node.js<\/a>, som allm\u00e4nt anses vara bland de snabbaste alternativen f\u00f6r att bygga API: er.<\/li>\n<li><strong>L\u00e4tt att l\u00e4ra sig och koda:<\/strong> FastAPI har redan r\u00e4knat ut n\u00e4stan allt som du beh\u00f6ver f\u00f6r att g\u00f6ra ett produktionsklart API. Som utvecklare som anv\u00e4nder FastAPI s\u00e5 beh\u00f6ver du inte koda allt fr\u00e5n grunden. Med endast n\u00e5gra f\u00e5 rader kod s\u00e5 kan du ha ett RESTful API som \u00e4r redo f\u00f6r distribuering.<\/li>\n<li><strong>Omfattande dokumentation:<\/strong> FastAPI anv\u00e4nder OpenAPI-dokumentationsstandarderna, s\u00e5 att dokumentation kan genereras dynamiskt. Dokumentationen innefattar detaljerad information om FastAPI: s \u00e4ndpunkter, svar, parametrar och returkoder.<\/li>\n<li><strong>API: er med f\u00e4rre fel:<\/strong> FastAPI st\u00f6der <a href=\"https:\/\/fastapi.tiangolo.com\/tutorial\/query-params-str-validations\/#add-more-validations\" target=\"_blank\" rel=\"noopener noreferrer\">anpassad datavalidering<\/a>, vilket g\u00f6r att utvecklare kan bygga API:er med f\u00e4rre fel. FastAPI: s utvecklare skryter med att ramverket resulterar i s\u00e5 mycket som 40 % f\u00e4rre m\u00e4nskligt orsakade fel.<\/li>\n<li><strong>Typtips:<\/strong> Modulen types introducerades i Python 3.5. Den g\u00f6r det m\u00f6jligt att deklarera <code>type<\/code> f\u00f6r en variabel. N\u00e4r typen av en variabel deklareras s\u00e5 kan IDE: er ge ett b\u00e4ttre st\u00f6d och f\u00f6ruts\u00e4ga fel mer exakt.<\/li>\n<\/ul>\n\n<h2>Hur man kommer ig\u00e5ng med FastAPI<\/h2>\n<p>F\u00f6r att f\u00f6lja den h\u00e4r handledningen och komma ig\u00e5ng med FastAPI s\u00e5 m\u00e5ste du f\u00f6rst g\u00f6ra n\u00e5gra saker.<\/p>\n<p>Se till att du har en texteditor\/IDE f\u00f6r programmerare, exempelvis\u00a0<a href=\"https:\/\/code.visualstudio.com\/download\" target=\"_blank\" rel=\"noopener noreferrer\">Visual Studio Code<\/a>. Andra alternativ \u00e4r <a href=\"https:\/\/kinsta.com\/blog\/how-to-use-sublime-text\/\" rel=\"noopener\">Sublime Text<\/a> och <a href=\"https:\/\/www.espressoapp.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Espresso<\/a>.<\/p>\n<p>Det \u00e4r vanligt att dina Pythonprogram och deras instanser k\u00f6rs i virtuella milj\u00f6er. Virtuella milj\u00f6er g\u00f6r det m\u00f6jligt att k\u00f6ra olika paketupps\u00e4ttningar och konfigurationer samtidigt och undvika konflikter p\u00e5 grund av inkompatibla paketversioner.<\/p>\n<p>F\u00f6r att skapa en virtuell milj\u00f6 s\u00e5 \u00f6ppnar du <a href=\"https:\/\/kinsta.com\/se\/blog\/python-kommandon\/#introduction-to-the-cli\">din terminal<\/a> och k\u00f6r det h\u00e4r kommandot:<\/p>\n<pre><code class=\"language-bash\">$ python3 -m venv env<\/code><\/pre>\n<p>Du m\u00e5ste \u00e4ven aktivera den virtuella milj\u00f6n. Kommandot f\u00f6r att g\u00f6ra detta varierar beroende p\u00e5 vilket operativsystem och skal som du anv\u00e4nder. H\u00e4r \u00e4r n\u00e5gra exempel p\u00e5 CLI-aktivering f\u00f6r ett antal milj\u00f6er:<\/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>(Vissa IDE: er med Python-kunskap kan \u00e4ven konfigureras f\u00f6r att aktivera den aktuella virtuella milj\u00f6n)<\/p>\n<p>Nu kan du installera FastAPI:<\/p>\n<pre><code class=\"language-bash\">$ pip3 install fastapi<\/code><\/pre>\n<p>FastAPI \u00e4r ett ramverk f\u00f6r att bygga API: er, men f\u00f6r att testa dina API: er s\u00e5 beh\u00f6ver du en lokal webbserver. <a href=\"https:\/\/www.uvicorn.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Uvicorn<\/a> \u00e4r en blixtsnabb ASGI-webbserver (Asynchronous Server Gateway Interface) f\u00f6r Python som \u00e4r utm\u00e4rkt f\u00f6r utveckling. F\u00f6r att installera Uvicorn s\u00e5 k\u00f6r du det h\u00e4r kommandot:<\/p>\n<pre><code class=\"language-bash\">$ pip3 install \"uvicorn[standard]\"<\/code><\/pre>\n<p>N\u00e4r installationen har lyckats s\u00e5 skapar du en fil med namnet <strong>main.py<\/strong> i projektets arbetskatalog. Denna fil kommer att vara din applikationsstartpunkt.<\/p>\n<figure 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=\"Visa ett grundl\u00e4ggande FastAPI-projekt i ett IDE.\" width=\"1151\" height=\"475\"><figcaption class=\"wp-caption-text\">Visa ett grundl\u00e4ggande FastAPI-projekt i ett IDE.<\/figcaption><\/figure>\n<h3>Ett snabbt FastAPI-exempel<\/h3>\n<p>Du kommer att testa din FastAPI-installation genom snabb konfigurering av en exempel\u00e4ndpunkt. Klistra in f\u00f6ljande kod i din fil <strong>main.py<\/strong> och spara sedan filen:<\/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>Ovanst\u00e5ende utdrag skapar en grundl\u00e4ggande FastAPI-slutpunkt. Nedan f\u00f6ljer en sammanfattning av vad varje rad g\u00f6r:<\/p>\n<ul>\n<li><code>from fastapi import FastAPI<\/code>: Funktionaliteten f\u00f6r ditt API tillhandah\u00e5lls av FastAPI Python-klassen.<\/li>\n<li><code>app = FastAPI()<\/code>: Detta skapar en FastAPI-instans.<\/li>\n<li><code>@app.get(\"\/\")<\/code>: Detta \u00e4r en Python-dekorator som anger f\u00f6r FastAPI att funktionen nedanf\u00f6r den ska ansvara f\u00f6r hanteringen av f\u00f6rfr\u00e5gningar.<\/li>\n<li><code>@app.get(\"\/\")<\/code>: Detta \u00e4r en dekorator som anger v\u00e4gen. Detta skapar en <code>GET<\/code> -metod p\u00e5 webbplatsens s\u00f6kv\u00e4g. Resultatet returneras sedan av den inplacerade funktionen.<\/li>\n<li>Andra m\u00f6jliga operationer som anv\u00e4nds f\u00f6r att kommunicera \u00e4r <code>@app.post()<\/code>, <code>@app.put()<\/code>, <code>@app.delete()<\/code>, <code>@app.options()<\/code>, <code>@app.head()<\/code>, <code>@app.patch()<\/code> och <code>@app.trace()<\/code>.<\/li>\n<\/ul>\n<p>I filkatalogen s\u00e5 k\u00f6r du f\u00f6ljande kommando i terminalen f\u00f6r att starta API-servern:<\/p>\n<pre><code class=\"language-bash\">$ uvicorn main:app --reload<\/code><\/pre>\n<p>I det h\u00e4r kommandot s\u00e5 \u00e4r <code>main<\/code> namnet p\u00e5 din modul. Objektet <code>app<\/code> \u00e4r en instans av din applikation och importeras till ASGI-servern. Flaggan <code>--reload<\/code> anger att servern ska laddas om automatiskt n\u00e4r du g\u00f6r \u00e4ndringar.<\/p>\n<p>Du b\u00f6r se n\u00e5got liknande i din terminal:<\/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>Navigera till <code>http:\/\/localhost:8000<\/code> i din webbl\u00e4sare f\u00f6r att bekr\u00e4fta att ditt API fungerar. Du b\u00f6r se &#8221;Hello&#8221;: &#8221;World&#8221; som ett JSON-objekt p\u00e5 sidan. Detta visar hur enkelt det \u00e4r att skapa ett API med FastAPI. Allt som du beh\u00f6vde g\u00f6ra var att definiera en rutt och returnera din Python-ordbok, vilket syns p\u00e5 rad sex i utklippet ovan.<\/p>\n<figure 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=\"Hello World-applikationen hos\u00a0FastAPI i en webbl\u00e4sare.\" width=\"900\" height=\"340\"><figcaption class=\"wp-caption-text\">Hello World-applikationen hos\u00a0FastAPI i en webbl\u00e4sare.<\/figcaption><\/figure>\n<h3>Anv\u00e4ndning av typtips<\/h3>\n<p>Om du anv\u00e4nder Python s\u00e5 \u00e4r du van vid att ange variabler med grundl\u00e4ggande datatyper som <code>int<\/code>, <code>str<\/code>, <code>float<\/code> och <code>bool<\/code>. Fr\u00e5n och med Python\u2019s version 3.9 har det dock inf\u00f6rts avancerade datastrukturer. Detta g\u00f6r att du kan arbeta med datastrukturer som <code>dictionaries<\/code>, <code>tuples<\/code> och <code>lists<\/code>. Med FastAPI: s typh\u00e4nvisningar s\u00e5 kan du strukturera schemat f\u00f6r dina data med hj\u00e4lp av <a href=\"https:\/\/pydantic-docs.helpmanual.io\/usage\/models\/\" target=\"_blank\" rel=\"noopener noreferrer\">pydantiska<\/a> modeller och sedan anv\u00e4nda de pydantiska modellerna f\u00f6r att typh\u00e4nvisa och dra nytta av den datavalidering som tillhandah\u00e5lls.<\/p>\n<p>I exemplet nedan s\u00e5 demonstreras anv\u00e4ndningen av typtips i Python med en enkel prisber\u00e4knare f\u00f6r m\u00e5ltider, <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>Observera att typtips inte \u00e4ndrar hur din kod k\u00f6rs.<\/p>\n<h3>Interaktiv API-dokumentation i\u00a0FastAPI<\/h3>\n<p>FastAPI anv\u00e4nder <a href=\"https:\/\/github.com\/swagger-api\/swagger-ui\" target=\"_blank\" rel=\"noopener noreferrer\">Swagger UI<\/a> f\u00f6r att tillhandah\u00e5lla en automatisk interaktiv API-dokumentation. F\u00f6r att komma \u00e5t den, navigera till <code>http:\/\/localhost:8000\/docs<\/code>\u00a0s\u00e5 kommer du att se en sk\u00e4rm med alla dina slutpunkter, metoder och scheman.<\/p>\n<figure 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=\"Swagger UI: s dokumentation f\u00f6r FastAPI.\" width=\"900\" height=\"1013\"><figcaption class=\"wp-caption-text\">Swagger UI: s dokumentation f\u00f6r FastAPI.<\/figcaption><\/figure>\n<p>Denna automatiska, webbl\u00e4sarbaserade API-dokumentation tillhandah\u00e5lls av FastAPI och du beh\u00f6ver inte g\u00f6ra n\u00e5got annat f\u00f6r att dra nytta av den.<\/p>\n<p>En alternativ webbl\u00e4sarbaserad API-dokumentation, som ocks\u00e5 tillhandah\u00e5lls av FastAPI, \u00e4r <a href=\"https:\/\/github.com\/Redocly\/redoc\" target=\"_blank\" rel=\"noopener noreferrer\">Redoc<\/a>. F\u00f6r att f\u00e5 tillg\u00e5ng till Redoc s\u00e5 navigerar du till <code>http:\/\/localhost:8000\/redoc<\/code>, d\u00e4r du kommer att f\u00e5 en lista \u00f6ver dina slutpunkter, metoder och deras respektive svar.<\/p>\n<figure 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=\"Redoc\u2019s dokumentation f\u00f6r FastAPI.\" width=\"900\" height=\"1112\"><figcaption class=\"wp-caption-text\">Redoc\u2019s dokumentation f\u00f6r FastAPI.<\/figcaption><\/figure>\n<h3>Uppr\u00e4ttande av rutter i FastAPI<\/h3>\n<p>Med dekoratorn <code>@app<\/code>\u00a0s\u00e5 kan du ange ruttens <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Methods\" target=\"_blank\" rel=\"noopener noreferrer\">metod<\/a>, t.ex. <code>@app.get<\/code> eller <code>@app.post<\/code>, som st\u00f6der <code>GET<\/code>, <code>POST<\/code>, <code>PUT<\/code> och <code>DELETE<\/code>, samt de mindre vanliga alternativen <code>HEAD<\/code>, <code>PATCH<\/code> och <code>TRACE<\/code>.<\/p>\n<h2>Att bygga din app med FastAPI<\/h2>\n<p>I den h\u00e4r handledningen s\u00e5 f\u00e5r du en genomg\u00e5ng av hur du bygger en <a href=\"https:\/\/www.codecademy.com\/article\/what-is-crud\" target=\"_blank\" rel=\"noopener noreferrer\">CRUD<\/a>-applikation med FastAPI. Applikationen kommer att kunna:<\/p>\n<ul>\n<li>Skapa en anv\u00e4ndare<\/li>\n<li>L\u00e4sa en anv\u00e4ndares databaspost<\/li>\n<li>Uppdatera en befintlig anv\u00e4ndare<\/li>\n<li>Ta bort en viss anv\u00e4ndare<\/li>\n<\/ul>\n<p>F\u00f6r att utf\u00f6ra dessa CRUD-operationer s\u00e5 kommer du att skapa metoder som exponerar API-slutpunkterna. Resultatet kommer att bli en minnesdatabas som kan lagra en lista \u00f6ver anv\u00e4ndare.<\/p>\n<figure 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=\"Exempel p\u00e5 databasens tabellstruktur f\u00f6r CRUD.\" width=\"864\" height=\"551\"><figcaption class=\"wp-caption-text\">Exempel p\u00e5 databasens tabellstruktur f\u00f6r CRUD.<\/figcaption><\/figure>\n<p>Du kommer att anv\u00e4nda biblioteket <a href=\"https:\/\/pydantic-docs.helpmanual.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">pydantic<\/a> f\u00f6r att utf\u00f6ra datavalidering och inst\u00e4llningshantering med hj\u00e4lp av Python-typannotationer. I den h\u00e4r handledningen s\u00e5 kommer du att deklarera formen f\u00f6r dina data som klasser med attribut.<\/p>\n<p>Den h\u00e4r handledningen kommer att anv\u00e4nda databasen i minnet. Detta \u00e4r f\u00f6r att komma ig\u00e5ng snabbt med att anv\u00e4nda FastAPI f\u00f6r att bygga dina API: er. F\u00f6r produktion s\u00e5 kan du dock anv\u00e4nda dig av vilken databas som helst, t.ex. <a href=\"https:\/\/kinsta.com\/blog\/what-is-postgresql\/\">PostgreSQL<\/a>, <a href=\"https:\/\/kinsta.com\/se\/blog\/vad-ar-mysql\/\">MySQL<\/a>, <a href=\"https:\/\/kinsta.com\/se\/blog\/sqlite-vs-mysql\/#what-is-sqlite\">SQLite<\/a> eller till och med Oracle.<\/p>\n<h3>Att bygga appen<\/h3>\n<p>Du b\u00f6rjar med att skapa din anv\u00e4ndarmodell. Anv\u00e4ndarmodellen kommer att ha f\u00f6ljande attribut:<\/p>\n<ul>\n<li><code>id<\/code>: En universell unik identifierare (UUID)<\/li>\n<li><code>first_name<\/code>: Anv\u00e4ndarens f\u00f6rnamn<\/li>\n<li><code>last_name<\/code>: Anv\u00e4ndarens efternamn<\/li>\n<li><code>gender<\/code>: Anv\u00e4ndarens k\u00f6n<\/li>\n<li><code>roles<\/code>: En lista som inneh\u00e5ller rollerna <code>admin<\/code> och <code>user<\/code><\/li>\n<\/ul>\n<p>B\u00f6rja med att skapa en ny fil som heter <strong>models.py<\/strong> i din arbetskatalog och klistra sedan in f\u00f6ljande kod i <strong>models.py<\/strong> f\u00f6r att skapa din modell:<\/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>I koden ovan:<\/p>\n<ul>\n<li>Din klass <code>User<\/code> ut\u00f6kar <code>BaseModel<\/code>, som sedan importeras fr\u00e5n <code>pydantic<\/code>.<\/li>\n<li>Du har definierat anv\u00e4ndarens attribut enligt ovan.<\/li>\n<\/ul>\n<p>N\u00e4sta steg \u00e4r att skapa din databas. Ers\u00e4tt inneh\u00e5llet i filen <strong>main.py<\/strong> med f\u00f6ljande kod:<\/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>I <strong>main.py<\/strong>:<\/p>\n<ul>\n<li>Du initialiserade <code>db<\/code> med en\u00a0<code>List<\/code>-typ och skickade in modellen <code>User<\/code><\/li>\n<li>Du skapade en minnesdatabas med fyra anv\u00e4ndare, var och en med de n\u00f6dv\u00e4ndiga attributen <code>first_name<\/code>, <code>last_name<\/code>, <code>gender<\/code> och <code>roles<\/code>. Anv\u00e4ndaren <code>Eunit<\/code> tilldelas rollerna <code>admin<\/code> och <code>user<\/code>, medan de andra tre anv\u00e4ndarna endast tilldelas rollen <code>user<\/code>.<\/li>\n<\/ul>\n<h3>L\u00e4s databasposter<\/h3>\n<p>Du har framg\u00e5ngsrikt konfigurerat din minnesdatabas och fyllt den med anv\u00e4ndare, s\u00e5 n\u00e4sta steg \u00e4r att konfigurera en slutpunkt som returnerar en lista \u00f6ver alla anv\u00e4ndare. Det \u00e4r h\u00e4r som FastAPI kommer in i bilden.<\/p>\n<p>I din fil <strong>main.py<\/strong>\u00a0s\u00e5 klistrar du in f\u00f6ljande kod precis under din slutpunkt <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>Koden definierar slutpunkten <code>\/api\/v1\/users<\/code> och skapar en asynkron funktion, <code>get_users<\/code>, som returnerar allt inneh\u00e5ll i databasen, <code>db<\/code>.<\/p>\n<p>Spara din fil s\u00e5 kan du testa din anv\u00e4ndarslutpunkt. K\u00f6r f\u00f6ljande kommando i terminalen f\u00f6r att starta API-servern:<\/p>\n<pre><code class=\"language-bash\">$ uvicorn main:app --reload<\/code><\/pre>\n<p>Navigera till <code>http:\/\/localhost:8000\/api\/v1\/users<\/code> i din webbl\u00e4sare. Detta b\u00f6r ge en lista \u00f6ver alla dina anv\u00e4ndare, som du ser nedan:<\/p>\n<figure 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=\"Anv\u00e4ndardata h\u00e4mtad av FastAPI-databasl\u00e4sningsf\u00f6rfr\u00e5gan.\" width=\"685\" height=\"1029\"><figcaption class=\"wp-caption-text\">Anv\u00e4ndardata h\u00e4mtad av FastAPI-databasl\u00e4sningsf\u00f6rfr\u00e5gan.<\/figcaption><\/figure>\n<p>I det h\u00e4r skedet s\u00e5 kommer din fil <strong>main.py<\/strong> att se ut s\u00e5 h\u00e4r:<\/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>Skapa databasposter<\/h3>\n<p>N\u00e4sta steg \u00e4r att skapa en slutpunkt f\u00f6r att skapa en ny anv\u00e4ndare i din databas. Klistra in f\u00f6ljande utdrag i din fil <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>I det h\u00e4r stycket s\u00e5 har du definierat slutpunkten f\u00f6r att skicka in en ny anv\u00e4ndare och anv\u00e4nt dig av dekoratorn <code>@app.post<\/code> f\u00f6r att skapa en <code>POST<\/code> -metod.<\/p>\n<p>Du har \u00e4ven skapat funktionen <code>create_user<\/code>, som accepterar <code>user<\/code> i modellen <code>User<\/code>, och bifogat (lagt till) den nyskapade <code>user<\/code> till databasen, <code>db<\/code>. Slutligen s\u00e5 returnerar slutpunkten ett JSON-objekt med den nyskapade anv\u00e4ndarens <code>id<\/code>.<\/p>\n<p>Du m\u00e5ste anv\u00e4nda den automatiska API-dokumentationen som tillhandah\u00e5lls av FastAPI f\u00f6r att testa din slutpunkt, som ovan. Detta beror p\u00e5 att du inte kan g\u00f6ra en postf\u00f6rfr\u00e5gan med hj\u00e4lp av webbl\u00e4saren. Navigera till <code>http:\/\/localhost:8000\/docs<\/code> f\u00f6r att testa med hj\u00e4lp av den dokumentation som tillhandah\u00e5lls av <a href=\"https:\/\/github.com\/swagger-api\/swagger-ui\">SwaggerUI<\/a>.<\/p>\n<figure 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=\"Parametrar f\u00f6r en FastAPI POST-f\u00f6rfr\u00e5gan\" width=\"685\" height=\"1029\"><figcaption class=\"wp-caption-text\">Parametrar f\u00f6r en FastAPI POST-f\u00f6rfr\u00e5gan<\/figcaption><\/figure>\n<h3>Radera databasposter<\/h3>\n<p>Eftersom du bygger en CRUD-app s\u00e5 m\u00e5ste din applikation ha m\u00f6jlighet att <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Methods\/DELETE\">ta bort<\/a> en specificerad resurs. I den h\u00e4r handledningen s\u00e5 kommer du att skapa en slutpunkt f\u00f6r att ta bort en anv\u00e4ndare.<\/p>\n<p>Klistra in f\u00f6ljande kod i din fil <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>H\u00e4r \u00e4r en uppdelning linje f\u00f6r linje av hur koden fungerar:<\/p>\n<ul>\n<li><code>@app.delete(\"\/api\/v1\/users\/{id}\")<\/code>: Du skapade slutpunkten delete med hj\u00e4lp av dekoratorn <code>@app.delete()<\/code>. S\u00f6kv\u00e4gen \u00e4r fortfarande <code>\/api\/v1\/users\/{id}<\/code>, men sedan h\u00e4mtas <code>id<\/code>, som \u00e4r en s\u00f6kv\u00e4gsvariabel som motsvarar anv\u00e4ndarens id.<\/li>\n<li><code>async def delete_user(id: UUID):<\/code>: Du skapar funktionen <code>delete_user<\/code>, som h\u00e4mtar <code>id<\/code> fr\u00e5n webbadressen.<\/li>\n<li><code>for user in db:<\/code>: Detta s\u00e4ger \u00e5t applikationen att g\u00e5 igenom anv\u00e4ndarna i databasen och kontrollera om <code>id<\/code> matchar en anv\u00e4ndare i databasen.<\/li>\n<li><code>db.remove(user)<\/code>: Om <code>id<\/code> matchar en anv\u00e4ndare s\u00e5 raderas anv\u00e4ndaren, annars s\u00e5 skickas en <code>HTTPException<\/code> med <a href=\"https:\/\/kinsta.com\/blog\/http-status-codes\/\">statuskoden<\/a> 404.<\/li>\n<\/ul>\n<figure 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=\"Parametrar f\u00f6r en FastAPI DELETE-f\u00f6rfr\u00e5gan.\" width=\"594\" height=\"1030\"><figcaption class=\"wp-caption-text\">Parametrar f\u00f6r en FastAPI DELETE-f\u00f6rfr\u00e5gan.<\/figcaption><\/figure>\n<h3>Uppdatera databasposter<\/h3>\n<p>Du ska skapa en slutpunkt f\u00f6r att uppdatera en anv\u00e4ndares uppgifter. De uppgifter som kan uppdateras omfattar f\u00f6ljande parametrar: <code>first_name<\/code>, , <code>last_name<\/code>, och <code>roles<\/code>.<\/p>\n<p>I din fil <strong>models.py<\/strong>\u00a0s\u00e5 klistrar du in f\u00f6ljande kod under din modell <code>User<\/code>, dvs. efter klassen <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>I det h\u00e4r utdraget s\u00e5 \u00e4r klassen <code>UpdateUser<\/code> en f\u00f6rl\u00e4ngning av <code>BaseModel<\/code>. Du st\u00e4ller sedan in de uppdaterbara anv\u00e4ndarparametrarna, exempelvis\u00a0<code>first_name<\/code>, <code>last_name<\/code> och <code>roles<\/code>, som valfria.<\/p>\n<p>Nu ska du skapa en slutpunkt f\u00f6r att uppdatera en viss anv\u00e4ndares uppgifter. I din fil <strong>main.py<\/strong>\u00a0s\u00e5 klistrar du in f\u00f6ljande kod efter <code>@app.delete<\/code>-dekoratorn:<\/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>I koden ovan s\u00e5 har du gjort f\u00f6ljande:<\/p>\n<ul>\n<li>Skapat\u00a0<code>@app.put(\"\/api\/v1\/users\/{id}\")<\/code>\u2014slutpunkten f\u00f6r uppdatering. Den har variabel-parametern\u00a0<code>id<\/code> som motsvarar anv\u00e4ndarens id.<\/li>\n<li>Skapat en metod som heter <code>update_user<\/code>, som tar emot klassen <code>UpdateUser<\/code> och <code>id<\/code>.<\/li>\n<li>Anv\u00e4nt en <code>for<\/code> -slinga f\u00f6r att kontrollera om den anv\u00e4ndare som \u00e4r associerad med \u00f6verl\u00e4mnat\u00a0<code>id<\/code> finns i databasen.<\/li>\n<li>Kontrollerat om n\u00e5gon av anv\u00e4ndarens parametrar \u00e4r <code>is not None<\/code> (inte noll). Om n\u00e5gon parameter, t.ex. <code>first_name<\/code>, <code>last_name<\/code> eller <code>roles<\/code>, inte \u00e4r noll, s\u00e5 uppdateras den.<\/li>\n<li>Om operationen \u00e4r framg\u00e5ngsrik s\u00e5 returneras anv\u00e4ndaridentiteten.<\/li>\n<li>Om anv\u00e4ndaren inte kunde lokaliseras, s\u00e5 uppst\u00e5r undantaget\u00a0<code>HTTPException<\/code> med statuskoden 404 och meddelandet <code>Could not find user with id: {id}<\/code>.<\/li>\n<\/ul>\n<p>F\u00f6r att testa den h\u00e4r slutpunkten s\u00e5 m\u00e5ste du se till att din Uvicorn-server \u00e4r ig\u00e5ng. Om den inte \u00e4r ig\u00e5ng, s\u00e5 kan du ange det h\u00e4r kommandot:<\/p>\n<pre><code class=\"language-bash\">uvicorn main:app --reload<\/code><\/pre>\n<p>Nedan visas en sk\u00e4rmdump av testet.<\/p>\n<figure 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=\"Parametrar f\u00f6r en FastAPI UPDATE-f\u00f6rfr\u00e5gan.\" width=\"593\" height=\"954\"><figcaption class=\"wp-caption-text\">Parametrar f\u00f6r en FastAPI UPDATE-f\u00f6rfr\u00e5gan.<\/figcaption><\/figure>\n\n<h2>Sammanfattning<\/h2>\n<p>I den h\u00e4r handledningen s\u00e5 har du l\u00e4rt dig mer om FastAPI-ramverket f\u00f6r Python och sett med egna \u00f6gon hur snabbt som du kan f\u00e5 ig\u00e5ng en FastAPI-driven applikation. Du har l\u00e4rt dig hur man bygger CRUD API-slutpunkter med hj\u00e4lp av ramverket &#8211; skapa, l\u00e4sa, uppdatera och radera databasposter.<\/p>\n<p>Om du vill ta din webbapplikationsutveckling till n\u00e4sta niv\u00e5 s\u00e5 ska du se till att kolla in Kinsta\u2019s plattform f\u00f6r <a href=\"https:\/\/kinsta.com\/se\/changelog\/applikation-databas-hosting\/\">applikations- och databashosting<\/a>. Precis som FastAPI s\u00e5 \u00e4r den kraftfullt enkel.<\/p>\n<kinsta-video src=\"https:\/\/www.youtube.com\/watch?v=vmNem6wxfSQ\"><\/kinsta-video>\n","protected":false},"excerpt":{"rendered":"<p>FastAPI \u00e4r en snabb och l\u00e4tt webbram f\u00f6r att bygga moderna gr\u00e4nssnitt f\u00f6r till\u00e4mpningsprogrammering med hj\u00e4lp av Python 3.6 och senare. I den h\u00e4r handledningen s\u00e5 &#8230;<\/p>\n","protected":false},"author":270,"featured_media":47544,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[618,384,615,237],"topic":[757],"class_list":["post-47543","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-api","tag-python","tag-web-applications","tag-web-development","topic-api"],"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>Bygg en app med FastAPI f\u00f6r Python - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Den kallas \u201dfast(snabb)\u201d av en anledning! H\u00e4r \u00e4r allt du beh\u00f6ver veta om FastAPI f\u00f6r att snabbt bygga gr\u00e4nssnitt f\u00f6r applikationsprogrammering med 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\/se\/blog\/fastapi\/\" \/>\n<meta property=\"og:locale\" content=\"sv_SE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bygg en app med FastAPI f\u00f6r Python\" \/>\n<meta property=\"og:description\" content=\"Den kallas \u201dfast(snabb)\u201d av en anledning! H\u00e4r \u00e4r allt du beh\u00f6ver veta om FastAPI f\u00f6r att snabbt bygga gr\u00e4nssnitt f\u00f6r applikationsprogrammering med Python.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/se\/blog\/fastapi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstasweden\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-29T12:12:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-15T10:35:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2022\/11\/fastapi.jpg\" \/>\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=\"Den kallas \u201dfast(snabb)\u201d av en anledning! H\u00e4r \u00e4r allt du beh\u00f6ver veta om FastAPI f\u00f6r att snabbt bygga gr\u00e4nssnitt f\u00f6r applikationsprogrammering med Python.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2022\/11\/fastapi.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_se\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_se\" \/>\n<meta name=\"twitter:label1\" content=\"Skriven av\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emmanuel Uchenna\" \/>\n\t<meta name=\"twitter:label2\" content=\"Ber\u00e4knad l\u00e4stid\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minuter\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/fastapi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/fastapi\/\"},\"author\":{\"name\":\"Emmanuel Uchenna\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f\"},\"headline\":\"Bygg en app med FastAPI f\u00f6r Python\",\"datePublished\":\"2022-11-29T12:12:57+00:00\",\"dateModified\":\"2023-09-15T10:35:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/fastapi\/\"},\"wordCount\":2397,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/se\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/fastapi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2022\/11\/fastapi.jpg\",\"keywords\":[\"API\",\"Python\",\"web applications\",\"web development\"],\"inLanguage\":\"sv-SE\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/se\/blog\/fastapi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/fastapi\/\",\"url\":\"https:\/\/kinsta.com\/se\/blog\/fastapi\/\",\"name\":\"Bygg en app med FastAPI f\u00f6r Python - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/se\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/fastapi\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/fastapi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2022\/11\/fastapi.jpg\",\"datePublished\":\"2022-11-29T12:12:57+00:00\",\"dateModified\":\"2023-09-15T10:35:22+00:00\",\"description\":\"Den kallas \u201dfast(snabb)\u201d av en anledning! H\u00e4r \u00e4r allt du beh\u00f6ver veta om FastAPI f\u00f6r att snabbt bygga gr\u00e4nssnitt f\u00f6r applikationsprogrammering med Python.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/fastapi\/#breadcrumb\"},\"inLanguage\":\"sv-SE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/se\/blog\/fastapi\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/fastapi\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2022\/11\/fastapi.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2022\/11\/fastapi.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/fastapi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/se\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/se\/topics\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Bygg en app med FastAPI f\u00f6r Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/se\/#website\",\"url\":\"https:\/\/kinsta.com\/se\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Snabba, s\u00e4kra, premium hosting-l\u00f6sningar\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/se\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/se\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"sv-SE\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/se\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/se\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstasweden\/\",\"https:\/\/x.com\/kinsta_se\",\"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\/se\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f\",\"name\":\"Emmanuel Uchenna\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/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\/se\/blog\/author\/emmanueluchenna\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Bygg en app med FastAPI f\u00f6r Python - Kinsta\u00ae","description":"Den kallas \u201dfast(snabb)\u201d av en anledning! H\u00e4r \u00e4r allt du beh\u00f6ver veta om FastAPI f\u00f6r att snabbt bygga gr\u00e4nssnitt f\u00f6r applikationsprogrammering med 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\/se\/blog\/fastapi\/","og_locale":"sv_SE","og_type":"article","og_title":"Bygg en app med FastAPI f\u00f6r Python","og_description":"Den kallas \u201dfast(snabb)\u201d av en anledning! H\u00e4r \u00e4r allt du beh\u00f6ver veta om FastAPI f\u00f6r att snabbt bygga gr\u00e4nssnitt f\u00f6r applikationsprogrammering med Python.","og_url":"https:\/\/kinsta.com\/se\/blog\/fastapi\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstasweden\/","article_published_time":"2022-11-29T12:12:57+00:00","article_modified_time":"2023-09-15T10:35:22+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2022\/11\/fastapi.jpg","type":"image\/jpeg"}],"author":"Emmanuel Uchenna","twitter_card":"summary_large_image","twitter_description":"Den kallas \u201dfast(snabb)\u201d av en anledning! H\u00e4r \u00e4r allt du beh\u00f6ver veta om FastAPI f\u00f6r att snabbt bygga gr\u00e4nssnitt f\u00f6r applikationsprogrammering med Python.","twitter_image":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2022\/11\/fastapi.jpg","twitter_creator":"@kinsta_se","twitter_site":"@kinsta_se","twitter_misc":{"Skriven av":"Emmanuel Uchenna","Ber\u00e4knad l\u00e4stid":"16 minuter"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/se\/blog\/fastapi\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/se\/blog\/fastapi\/"},"author":{"name":"Emmanuel Uchenna","@id":"https:\/\/kinsta.com\/se\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f"},"headline":"Bygg en app med FastAPI f\u00f6r Python","datePublished":"2022-11-29T12:12:57+00:00","dateModified":"2023-09-15T10:35:22+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/se\/blog\/fastapi\/"},"wordCount":2397,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/se\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/se\/blog\/fastapi\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2022\/11\/fastapi.jpg","keywords":["API","Python","web applications","web development"],"inLanguage":"sv-SE","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/se\/blog\/fastapi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/se\/blog\/fastapi\/","url":"https:\/\/kinsta.com\/se\/blog\/fastapi\/","name":"Bygg en app med FastAPI f\u00f6r Python - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/se\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/se\/blog\/fastapi\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/se\/blog\/fastapi\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2022\/11\/fastapi.jpg","datePublished":"2022-11-29T12:12:57+00:00","dateModified":"2023-09-15T10:35:22+00:00","description":"Den kallas \u201dfast(snabb)\u201d av en anledning! H\u00e4r \u00e4r allt du beh\u00f6ver veta om FastAPI f\u00f6r att snabbt bygga gr\u00e4nssnitt f\u00f6r applikationsprogrammering med Python.","breadcrumb":{"@id":"https:\/\/kinsta.com\/se\/blog\/fastapi\/#breadcrumb"},"inLanguage":"sv-SE","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/se\/blog\/fastapi\/"]}]},{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/blog\/fastapi\/#primaryimage","url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2022\/11\/fastapi.jpg","contentUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2022\/11\/fastapi.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/se\/blog\/fastapi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/se\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/se\/topics\/api\/"},{"@type":"ListItem","position":3,"name":"Bygg en app med FastAPI f\u00f6r Python"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/se\/#website","url":"https:\/\/kinsta.com\/se\/","name":"Kinsta\u00ae","description":"Snabba, s\u00e4kra, premium hosting-l\u00f6sningar","publisher":{"@id":"https:\/\/kinsta.com\/se\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/se\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"sv-SE"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/se\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/se\/","logo":{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstasweden\/","https:\/\/x.com\/kinsta_se","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\/se\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f","name":"Emmanuel Uchenna","image":{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/#\/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\/se\/blog\/author\/emmanueluchenna\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/47543","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/users\/270"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/comments?post=47543"}],"version-history":[{"count":13,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/47543\/revisions"}],"predecessor-version":[{"id":53484,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/47543\/revisions\/53484"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/47543\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/47543\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/47543\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/47543\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/47543\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/47543\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/47543\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/47543\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/47543\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/47543\/translations\/dk"},{"href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/47543\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/media\/47544"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/media?parent=47543"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/tags?post=47543"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/topic?post=47543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}