{"id":60217,"date":"2022-11-29T13:10:32","date_gmt":"2022-11-29T12:10:32","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=60217&#038;preview=true&#038;preview_id=60217"},"modified":"2025-01-17T14:41:57","modified_gmt":"2025-01-17T13:41:57","slug":"fastapi","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/fastapi\/","title":{"rendered":"Crea una Aplicaci\u00f3n con FastAPI para Python"},"content":{"rendered":"<p>FastAPI es un web framework r\u00e1pido y ligero para construir modernas interfaces de programaci\u00f3n de aplicaciones utilizando <a href=\"https:\/\/kinsta.com\/es\/blog\/programacion-orientada-objetos-python\/\">Python<\/a> 3.6 y\u00a0 versiones superiores. En este tutorial, repasaremos los fundamentos de la construcci\u00f3n de una aplicaci\u00f3n con FastAPI, y podr\u00e1s hacerte una idea de por qu\u00e9 ha sido nominado como uno de los <a href=\"https:\/\/www.infoworld.com\/article\/3637038\/the-best-open-source-software-of-2021.html#slide5\" target=\"_blank\" rel=\"noopener noreferrer\">mejores frameworks de c\u00f3digo abierto de 2021<\/a>.<\/p>\n<p>Una vez que est\u00e9s preparado para desarrollar tus propias aplicaciones FastAPI, no tendr\u00e1s que buscar mucho para encontrar un lugar donde alojarlas. Los servicios de <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Alojamiento de Aplicaciones<\/a> y <a href=\"https:\/\/sevalla.com\/database-hosting\/\">Alojamiento de Bases de Datos<\/a> de Kinsta proporcionan una Plataforma como Servicio que es fuerte en Python.<\/p>\n<p>Primero aprendamos lo b\u00e1sico.<\/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>Ventajas de FastAPI<\/h2>\n<p>A continuaci\u00f3n se exponen algunas de las ventajas que el <a href=\"https:\/\/fastapi.tiangolo.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">framework FastAPI<\/a> FastAPI aporta a un proyecto.<\/p>\n<ul>\n<li><strong>La velocidad:<\/strong> Como su nombre indica, FastAPI es un framework muy r\u00e1pido. Su velocidad es comparable a la de <a href=\"https:\/\/docs.sevalla.com\/templates\/overview\">Go<\/a> y <a href=\"https:\/\/docs.sevalla.com\/templates\/overview\">Node.js<\/a>, que generalmente se consideran entre las opciones m\u00e1s r\u00e1pidas para construir APIs.<\/li>\n<li><strong>F\u00e1cil de aprender y codificar:<\/strong> FastAPI ya ha resuelto casi todo lo que necesitar\u00e1s para crear una API lista para la producci\u00f3n. Como desarrollador que utiliza FastAPI, no necesitas codificar todo desde cero. Con s\u00f3lo unas pocas l\u00edneas de c\u00f3digo, puedes tener una API RESTful lista para su despliegue.<\/li>\n<li><strong>Documentaci\u00f3n exhaustiva:<\/strong> FastAPI utiliza los est\u00e1ndares de documentaci\u00f3n de OpenAPI, por lo que la documentaci\u00f3n puede generarse din\u00e1micamente. Esta documentaci\u00f3n proporciona informaci\u00f3n detallada sobre los puntos finales, las respuestas, los par\u00e1metros y los c\u00f3digos de retorno de FastAPI.<\/li>\n<li><strong>API con menos errores:<\/strong> FastAPI admite la <a href=\"https:\/\/fastapi.tiangolo.com\/tutorial\/query-params-str-validations\/#add-more-validations\" target=\"_blank\" rel=\"noopener noreferrer\">validaci\u00f3n de datos personalizada<\/a>, lo que permite a los desarrolladores construir APIs con menos errores. Los desarrolladores de FastAPI se jactan de que el marco de trabajo da lugar a menos errores inducidos por el ser humano, hasta un 40% menos.<\/li>\n<li><strong>Type hints:<\/strong> El m\u00f3dulo de tipos se introdujo en Python 3.5. Esto te permite declarar el <code>type<\/code> de una variable. Cuando se declara el tipo de una variable, los IDE son capaces de proporcionar un mejor soporte y predecir los errores con mayor precisi\u00f3n.<\/li>\n<\/ul>\n\n<h2>C\u00f3mo Empezar con FastAPI<\/h2>\n<p>Para seguir este tutorial y empezar a utilizar FastAPI, tendr\u00e1s que hacer primero algunas cosas.<\/p>\n<p>Aseg\u00farate de que tienes un editor de texto\/IDE de programador, como <a href=\"https:\/\/code.visualstudio.com\/download\" target=\"_blank\" rel=\"noopener noreferrer\">Visual Studio Code<\/a>. Otras opciones son <a href=\"https:\/\/kinsta.com\/es\/blog\/como-usar-sublime-text\/\" rel=\"noopener\">Sublime Text<\/a> y <a href=\"https:\/\/www.espressoapp.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Espresso<\/a>.<\/p>\n<p>Es una pr\u00e1ctica habitual tener tus aplicaciones de Python y sus instancias funcionando en entornos virtuales. Los entornos virtuales permiten que se ejecuten simult\u00e1neamente diferentes conjuntos de paquetes y configuraciones, y evitan conflictos debidos a versiones de paquetes incompatibles.<\/p>\n<p>Para crear un entorno virtual, abre <a href=\"https:\/\/kinsta.com\/es\/blog\/comandos-python\/#introduction-to-the-cli\">tu terminal<\/a> y ejecuta este comando<\/p>\n<pre><code class=\"language-bash\">$ python3 -m venv env<\/code><\/pre>\n<p>Tambi\u00e9n tendr\u00e1s que activar el entorno virtual. El comando para hacerlo variar\u00e1 en funci\u00f3n del sistema operativo y del shell que est\u00e9s utilizando. Aqu\u00ed tienes algunos ejemplos de activaci\u00f3n CLI para varios entornos:<\/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>(Algunos IDEs compatibles con Python tambi\u00e9n pueden configurarse para activar el entorno virtual actual.)<\/p>\n<p>Ahora, instala FastAPI:<\/p>\n<pre><code class=\"language-bash\">$ pip3 install fastapi<\/code><\/pre>\n<p>FastAPI es un marco para construir APIs, pero para probar tus APIs necesitar\u00e1s un servidor web local. <a href=\"https:\/\/www.uvicorn.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Uvicorn<\/a> es un servidor web de interfaz de puerta de enlace de servidor as\u00edncrono (ASGI) para Python, muy r\u00e1pido, que es ideal para el desarrollo. Para instalar Uvicorn, ejecuta este comando:<\/p>\n<pre><code class=\"language-bash\">$ pip3 install \"uvicorn[standard]\"<\/code><\/pre>\n<p>Tras la instalaci\u00f3n, crea un archivo llamado <strong>main.py<\/strong> en el directorio de trabajo de tu proyecto. Este archivo ser\u00e1 el punto de entrada de tu aplicaci\u00f3n.<\/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=\"Vista de un proyecto FastAPI b\u00e1sico dentro de un IDE.\" width=\"1151\" height=\"475\"><figcaption class=\"wp-caption-text\">Vista de un proyecto FastAPI b\u00e1sico dentro de un IDE.<\/figcaption><\/figure>\n<h3>Un Ejemplo R\u00e1pido de FastAPI<\/h3>\n<p>Para probar tu instalaci\u00f3n de FastAPI, configura r\u00e1pidamente un endpoint de ejemplo. En tu archivo <strong>main.py<\/strong>, pega el siguiente c\u00f3digo y guarda el archivo:<\/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>El fragmento anterior crea un endpoint FastAPI b\u00e1sico. A continuaci\u00f3n te mostramos un resumen de lo que hace cada l\u00ednea:<\/p>\n<ul>\n<li><code>from fastapi import FastAPI<\/code>: La funcionalidad de tu API la proporciona la clase FastAPI de Python.<\/li>\n<li><code>app = FastAPI()<\/code>: Esto crea una instancia de FastAPI.<\/li>\n<li><code>@app.get(\"\/\")<\/code>: Se trata de un decorador python que especifica a FastAPI que la funci\u00f3n que hay debajo es la encargada de gestionar las peticiones.<\/li>\n<li><code>@app.get(\"\/\")<\/code>: Este es un decorador que especifica la ruta. Esto crea un m\u00e9todo <code>GET<\/code> en la ruta del sitio. El resultado es devuelto por la funci\u00f3n envuelta.<\/li>\n<li>Otras posibles operaciones que se utilizan para comunicarse son <code>@app.post()<\/code>, <code>@app.put()<\/code>, <code>@app.delete()<\/code>, <code>@app.options()<\/code>, <code>@app.head()<\/code>, <code>@app.patch()<\/code> y <code>@app.trace()<\/code>.<\/li>\n<\/ul>\n<p>En el directorio de archivos, ejecuta el siguiente comando en tu terminal para iniciar el servidor API:<\/p>\n<pre><code class=\"language-bash\">$ uvicorn main:app --reload<\/code><\/pre>\n<p>En este comando, <code>main<\/code> es el nombre de tu m\u00f3dulo. El objeto <code>app<\/code> es una instancia de tu aplicaci\u00f3n, y se importa en el servidor ASGI. La bandera <code>--reload<\/code> indica al servidor que se recargue autom\u00e1ticamente cuando hagas alg\u00fan cambio.<\/p>\n<p>Deber\u00edas ver algo as\u00ed en tu 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>En tu navegador, navega hasta <code>http:\/\/localhost:8000<\/code> para confirmar que tu API est\u00e1 funcionando. Deber\u00edas ver \u00abHello\u00bb: \u00abWorld\u00bb como objeto JSON en la p\u00e1gina. Esto ilustra lo f\u00e1cil que es crear una API con FastAPI. Lo \u00fanico que has tenido que hacer es definir una ruta y devolver tu diccionario Python, como se ve en la l\u00ednea seis del fragmento anterior.<\/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=\"Aplicaci\u00f3n FastAPI Hello World en un navegador web.\" width=\"900\" height=\"340\"><figcaption class=\"wp-caption-text\">Aplicaci\u00f3n FastAPI Hello World en un navegador web.<\/figcaption><\/figure>\n<h3>Utiliza\u00a0Type Hints<\/h3>\n<p>Si utilizas Python, est\u00e1s acostumbrado a anotar variables con tipos de datos b\u00e1sicos como <code>int<\/code>, <code>str<\/code>, <code>float<\/code> y <code>bool<\/code>. Sin embargo, a partir de la versi\u00f3n 3.9 de Python, se introdujeron estructuras de datos avanzadas. Esto te permite trabajar con estructuras de datos como <code>dictionaries<\/code>, <code>tuples<\/code>, y <code>lists<\/code>. Con los type hints de FastAPI, puedes estructurar el esquema de tus datos utilizando modelos <a href=\"https:\/\/pydantic-docs.helpmanual.io\/usage\/models\/\" target=\"_blank\" rel=\"noopener noreferrer\">pyd\u00e1nticos<\/a> y luego, utilizar los modelos pyd\u00e1nticos para hacer sugerencias de tipo y beneficiarte de la validaci\u00f3n de datos que se proporciona.<\/p>\n<p>En el siguiente ejemplo, se demuestra el uso de type hints en Python con una sencilla calculadora de precios de comidas, <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>Ten en cuenta que los type hints no cambian la forma en que se ejecuta tu c\u00f3digo.<\/p>\n<h3>Documentaci\u00f3n Interactiva de la API de FastAPI<\/h3>\n<p>FastAPI utiliza <a href=\"https:\/\/github.com\/swagger-api\/swagger-ui\" target=\"_blank\" rel=\"noopener noreferrer\">Swagger UI<\/a> para proporcionar documentaci\u00f3n interactiva autom\u00e1tica de la API. Para acceder a ella, navega a <code>http:\/\/localhost:8000\/docs<\/code> y ver\u00e1s una pantalla con todos tus endpoints, m\u00e9todos y esquemas.<\/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=\"Documentaci\u00f3n de Swagger UI para FastAPI.\" width=\"900\" height=\"1013\"><figcaption class=\"wp-caption-text\">Documentaci\u00f3n de Swagger UI para FastAPI.<\/figcaption><\/figure>\n<p>Esta documentaci\u00f3n autom\u00e1tica de la API basada en el navegador la proporciona FastAPI, y no necesitas hacer nada m\u00e1s para aprovecharla.<\/p>\n<p>Una documentaci\u00f3n alternativa de la API basada en el navegador, tambi\u00e9n proporcionada por FastAPI, es <a href=\"https:\/\/github.com\/Redocly\/redoc\" target=\"_blank\" rel=\"noopener noreferrer\">Redoc<\/a>. Para acceder a Redoc, navega a <code>http:\/\/localhost:8000\/redoc<\/code>, donde se te presentar\u00e1 una lista de tus puntos finales, los m\u00e9todos y sus respectivas respuestas.<\/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=\"Documentaci\u00f3n de Redoc para FastAPI.\" width=\"900\" height=\"1112\"><figcaption class=\"wp-caption-text\">Documentaci\u00f3n de Redoc para FastAPI.<\/figcaption><\/figure>\n<h3>Configurar Rutas en FastAPI<\/h3>\n<p>El decorador <code>@app<\/code> te permite especificar el <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Methods\" target=\"_blank\" rel=\"noopener noreferrer\">m\u00e9todo<\/a> de la ruta, como <code>@app.get<\/code> o <code>@app.post<\/code>, y admite <code>GET<\/code>, <code>POST<\/code>, <code>PUT<\/code> y <code>DELETE<\/code>, as\u00ed como las opciones menos comunes, <code>HEAD<\/code>, <code>PATCH<\/code> y <code>TRACE<\/code>.<\/p>\n<h2>Construye Tu Aplicaci\u00f3n con FastAPI<\/h2>\n<p>En este tutorial, te guiaremos en la construcci\u00f3n de una aplicaci\u00f3n <a href=\"https:\/\/www.codecademy.com\/article\/what-is-crud\" target=\"_blank\" rel=\"noopener noreferrer\">CRUD<\/a> con FastAPI. La aplicaci\u00f3n podr\u00e1:<\/p>\n<ul>\n<li>Crear un usuario<\/li>\n<li>Leer el registro de un usuario en la base de datos<\/li>\n<li>Actualizar un usuario existente<\/li>\n<li>Eliminar un usuario concreto<\/li>\n<\/ul>\n<p>Para ejecutar estas operaciones CRUD, crear\u00e1s m\u00e9todos que expongan los endpoints de la API. El resultado ser\u00e1 una base de datos en memoria que puede almacenar una lista de usuarios.<\/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=\"Estructura de la tabla de la base de datos para los ejemplos de CRUD.\" width=\"864\" height=\"551\"><figcaption class=\"wp-caption-text\">Estructura de la tabla de la base de datos para los ejemplos de CRUD.<\/figcaption><\/figure>\n<p>Utilizar\u00e1s la biblioteca <a href=\"https:\/\/pydantic-docs.helpmanual.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">pydantic<\/a> para realizar la validaci\u00f3n de los datos y la gesti\u00f3n de la configuraci\u00f3n mediante anotaciones de tipo en Python. A efectos de este tutorial, declarar\u00e1s la forma de tus datos como clases con atributos.<\/p>\n<p>Este tutorial utilizar\u00e1 la base de datos en memoria. Esto es para iniciarte r\u00e1pidamente en el uso de FastAPI para construir tus APIs. Sin embargo, para la versi\u00f3n en vivo, puedes utilizar cualquier base de datos que elijas, como <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-postgresql\/\">PostgreSQL<\/a>, <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-mysql\/\">MySQL<\/a>, <a href=\"https:\/\/kinsta.com\/es\/blog\/sqlite-vs-mysql\/#what-is-sqlite\">SQLite<\/a> o incluso Oracle.<\/p>\n<h3>Construir la Aplicaci\u00f3n<\/h3>\n<p>Comenzar\u00e1s creando tu modelo de usuario. El modelo de usuario tendr\u00e1 los siguientes atributos:<\/p>\n<ul>\n<li><code>id<\/code>: Un identificador \u00fanico universal (UUID)<\/li>\n<li><code>first_name<\/code>: El nombre del usuario<\/li>\n<li><code>last_name<\/code>: El apellido del usuario<\/li>\n<li><code>gender<\/code>: El g\u00e9nero del usuario<\/li>\n<li><code>roles<\/code>que es una lista que contiene los roles <code>admin<\/code> y <code>user<\/code><\/li>\n<\/ul>\n<p>Empieza creando un nuevo archivo llamado <strong>models.py<\/strong> en tu directorio de trabajo, y luego pega el siguiente c\u00f3digo en <strong>models.py<\/strong> para crear tu modelo:<\/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>En el c\u00f3digo anterior<\/p>\n<ul>\n<li>Tu clase <code>User<\/code> extiende <code>BaseModel<\/code>, que a su vez se importa de <code>pydantic<\/code>.<\/li>\n<li>Has definido los atributos del usuario, como se ha comentado anteriormente.<\/li>\n<\/ul>\n<p>El siguiente paso es crear tu base de datos. Sustituye el contenido de tu archivo <strong>main.py<\/strong> por el siguiente c\u00f3digo:<\/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>En <strong>main.py<\/strong>:<\/p>\n<ul>\n<li>Has inicializado <code>db<\/code> con un tipo <code>List<\/code>, y has pasado el modelo <code>User<\/code><\/li>\n<li>Creaste una base de datos en memoria con cuatro usuarios, cada uno con los atributos necesarios como <code>first_name<\/code>, <code>last_name<\/code>, <code>gender<\/code>, y <code>roles<\/code>. Al usuario <code>Eunit<\/code> se le asignan los roles de <code>admin<\/code> y <code>user<\/code>, mientras que a los otros tres usuarios s\u00f3lo se les asigna el rol de <code>user<\/code>.<\/li>\n<\/ul>\n<h3>Leer Registros de la Base de Datos<\/h3>\n<p>Has configurado con \u00e9xito tu base de datos en memoria y la has llenado de usuarios, as\u00ed que el siguiente paso es configurar un punto final que devuelva una lista de todos los usuarios. Aqu\u00ed es donde entra FastAPI.<\/p>\n<p>En tu archivo <strong>main.py<\/strong>, pega el siguiente c\u00f3digo justo debajo de tu punto final <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>Este c\u00f3digo define el punto final <code>\/api\/v1\/users<\/code>, y crea una funci\u00f3n as\u00edncrona, <code>get_users<\/code>, que devuelve todo el contenido de la base de datos, <code>db<\/code>.<\/p>\n<p>Guarda tu archivo y podr\u00e1s probar tu endpoint de usuario. Ejecuta el siguiente comando en tu terminal para iniciar el servidor API:<\/p>\n<pre><code class=\"language-bash\">$ uvicorn main:app --reload<\/code><\/pre>\n<p>En tu navegador, navega hasta <code>http:\/\/localhost:8000\/api\/v1\/users<\/code>. Esto deber\u00eda devolver una lista de todos tus usuarios, como se ve a continuaci\u00f3n:<\/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=\"Datos de usuarios recuperados por la solicitud de lectura de la base de datos FastAPI.\" width=\"685\" height=\"1029\"><figcaption class=\"wp-caption-text\">Datos de usuarios recuperados por la solicitud de lectura de la base de datos FastAPI.<\/figcaption><\/figure>\n<p>En esta fase, tu archivo <strong>main.py<\/strong> tendr\u00e1 el siguiente aspecto:<\/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>Crear Registros de la Base de Datos<\/h3>\n<p>El siguiente paso es crear un endpoint para crear un nuevo usuario en tu base de datos. Pega el siguiente fragmento en tu archivo <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>En este fragmento, has definido el endpoint para enviar un nuevo usuario y has utilizado el decorador <code>@app.post<\/code> para crear un m\u00e9todo <code>POST<\/code>.<\/p>\n<p>Tambi\u00e9n has creado la funci\u00f3n <code>create_user<\/code>, que acepta <code>user<\/code> del modelo <code>User<\/code>, y has anexado (a\u00f1adido) el reci\u00e9n creado <code>user<\/code> a la base de datos, <code>db<\/code>. Finalmente, el endpoint devuelve un objeto JSON del usuario reci\u00e9n creado <code>id<\/code>.<\/p>\n<p>Tendr\u00e1s que utilizar la documentaci\u00f3n autom\u00e1tica de la API proporcionada por FastAPI para probar tu punto final, como se ha visto anteriormente. Esto se debe a que no puedes hacer una solicitud de post con el navegador web. Navega a <code>http:\/\/localhost:8000\/docs<\/code> para probar utilizando la documentaci\u00f3n proporcionada por <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=\"Par\u00e1metros para una petici\u00f3n POST de FastAPI.\" width=\"685\" height=\"1029\"><figcaption class=\"wp-caption-text\">Par\u00e1metros para una petici\u00f3n POST de FastAPI.<\/figcaption><\/figure>\n<h3>Eliminar Registros de la Base de Datos<\/h3>\n<p>Como est\u00e1s construyendo una aplicaci\u00f3n CRUD, tu aplicaci\u00f3n necesitar\u00e1 tener la capacidad de <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Methods\/DELETE\">eliminar<\/a> un recurso espec\u00edfico. Para este tutorial, crear\u00e1s un endpoint para eliminar un usuario.<\/p>\n<p>Pega el siguiente c\u00f3digo en tu archivo <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>Aqu\u00ed tienes un desglose l\u00ednea por l\u00ednea de c\u00f3mo funciona ese c\u00f3digo:<\/p>\n<ul>\n<li><code>@app.delete(\"\/api\/v1\/users\/{id}\")<\/code>: Has creado el endpoint de eliminaci\u00f3n utilizando el decorador <code>@app.delete()<\/code>. La ruta sigue siendo <code>\/api\/v1\/users\/{id}<\/code>, pero entonces recupera la <code>id<\/code>, que es una variable de ruta correspondiente al id del usuario.<\/li>\n<li><code>async def delete_user(id: UUID):<\/code>: Crea la funci\u00f3n <code>delete_user<\/code>, que recupera el <code>id<\/code> de la URL.<\/li>\n<li><code>for user in db:<\/code>: Esto le dice a la aplicaci\u00f3n que haga un bucle a trav\u00e9s de los usuarios de la base de datos, y compruebe si el <code>id<\/code> pasado coincide con un usuario de la base de datos.<\/li>\n<li><code>db.remove(user)<\/code>: Si el <code>id<\/code> coincide con un usuario, \u00e9ste ser\u00e1 eliminado; en caso contrario, se lanzar\u00e1 un <code>HTTPException<\/code> con un <a href=\"https:\/\/kinsta.com\/es\/blog\/codigos-de-estado-de-http\/\">c\u00f3digo de estado<\/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=\"Par\u00e1metros para una petici\u00f3n DELETE de FastAPI.\" width=\"594\" height=\"1030\"><figcaption class=\"wp-caption-text\">Par\u00e1metros para una petici\u00f3n DELETE de FastAPI.<\/figcaption><\/figure>\n<h3>Actualizar Registros de la Base de Datos<\/h3>\n<p>Vas a crear un endpoint para actualizar los detalles de un usuario. Los detalles que se pueden actualizar incluyen los siguientes par\u00e1metros: <code>first_name<\/code>, <code>last_name<\/code>, y <code>roles<\/code>.<\/p>\n<p>En tu archivo <strong>models.py<\/strong>, pega el siguiente c\u00f3digo bajo tu modelo <code>User<\/code>, es decir, despu\u00e9s de la clase <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>En este fragmento, la clase <code>UpdateUser<\/code> extiende <code>BaseModel<\/code>. A continuaci\u00f3n, establece que los par\u00e1metros de usuario actualizables, como <code>first_name<\/code>, <code>last_name<\/code>, y <code>roles<\/code>, sean opcionales.<\/p>\n<p>Ahora crear\u00e1s un endpoint para actualizar los datos de un usuario concreto. En tu archivo <strong>main.py<\/strong>, pega el siguiente c\u00f3digo despu\u00e9s del decorador <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>En el c\u00f3digo anterior, has hecho lo siguiente<\/p>\n<ul>\n<li>Creado <code>@app.put(\"\/api\/v1\/users\/{id}\")<\/code>, el punto final de actualizaci\u00f3n. Tiene un par\u00e1metro variable <code>id<\/code> que corresponde al id del usuario.<\/li>\n<li>Cre\u00f3 un m\u00e9todo llamado <code>update_user<\/code>, que toma la clase <code>UpdateUser<\/code> y <code>id<\/code>.<\/li>\n<li>Utiliza un bucle <code>for<\/code> para comprobar si el usuario asociado al <code>id<\/code> pasado est\u00e1 en la base de datos.<\/li>\n<li>Comprueba si alguno de los par\u00e1metros del usuario es <code>is not None<\/code> (no nulo). Si alg\u00fan par\u00e1metro, como <code>first_name<\/code>, <code>last_name<\/code>, o <code>roles<\/code>, no es nulo, se actualiza.<\/li>\n<li>Si la operaci\u00f3n tiene \u00e9xito, se devuelve el identificador del usuario.<\/li>\n<li>Si no se localiza al usuario, se lanza una excepci\u00f3n <code>HTTPException<\/code> con un c\u00f3digo de estado 404 y un mensaje <code>Could not find user with id: {id}<\/code>.<\/li>\n<\/ul>\n<p>Para probar este endpoint, aseg\u00farate de que tu servidor Uvicorn se est\u00e1 ejecutando. Si no se est\u00e1 ejecutando, introduce este comando:<\/p>\n<pre><code class=\"language-bash\">uvicorn main:app --reload<\/code><\/pre>\n<p>A continuaci\u00f3n se muestra una captura de pantalla de la prueba.<\/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=\"Par\u00e1metros de una solicitud FastAPI UPDATE.\" width=\"593\" height=\"954\"><figcaption class=\"wp-caption-text\">Par\u00e1metros de una solicitud FastAPI UPDATE.<\/figcaption><\/figure>\n\n<h2>Resumen<\/h2>\n<p>En este tutorial, has conocido el framework FastAPI para Python y has comprobado por ti mismo lo r\u00e1pido que puedes poner en marcha una aplicaci\u00f3n potenciada por FastAPI. Has aprendido a construir endpoints de la API CRUD utilizando el framework: crear, leer, actualizar y eliminar registros de la base de datos.<\/p>\n<p>Ahora, si quieres llevar el desarrollo de tu aplicaci\u00f3n web a un nivel superior, aseg\u00farate de consultar la plataforma de Kinsta para el <a href=\"https:\/\/kinsta.com\/es\/changelog\/alojamiento-de-aplicaciones-bases-de-datos\/\">alojamiento de aplicaciones y bases de datos<\/a>. Al igual que FastAPI, es potentemente sencilla.<\/p>\n<kinsta-video src=\"https:\/\/www.youtube.com\/watch?v=vmNem6wxfSQ\"><\/kinsta-video>\n","protected":false},"excerpt":{"rendered":"<p>FastAPI es un web framework r\u00e1pido y ligero para construir modernas interfaces de programaci\u00f3n de aplicaciones utilizando Python 3.6 y\u00a0 versiones superiores. En este tutorial, repasaremos &#8230;<\/p>\n","protected":false},"author":270,"featured_media":60218,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[725,822,1175,403],"topic":[1270,1320],"class_list":["post-60217","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-api","tag-python","tag-web-applications","tag-web-development","topic-api","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>Crea una Aplicaci\u00f3n con FastAPI para Python - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Se llama \u201cr\u00e1pido\u201d por una raz\u00f3n. Esto es lo que necesitas saber sobre FastAPI para construir r\u00e1pidamente interfaces de programaci\u00f3n de apps usando 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\/es\/blog\/fastapi\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Crea una Aplicaci\u00f3n con FastAPI para Python\" \/>\n<meta property=\"og:description\" content=\"Se llama \u201cr\u00e1pido\u201d por una raz\u00f3n. Esto es lo que necesitas saber sobre FastAPI para construir r\u00e1pidamente interfaces de programaci\u00f3n de apps usando Python.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/fastapi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-29T12:10:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-17T13:41:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/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=\"Se llama \u201cr\u00e1pido\u201d por una raz\u00f3n. Esto es lo que necesitas saber sobre FastAPI para construir r\u00e1pidamente interfaces de programaci\u00f3n de apps usando Python.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/fastapi.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emmanuel Uchenna\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/fastapi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/fastapi\/\"},\"author\":{\"name\":\"Emmanuel Uchenna\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f\"},\"headline\":\"Crea una Aplicaci\u00f3n con FastAPI para Python\",\"datePublished\":\"2022-11-29T12:10:32+00:00\",\"dateModified\":\"2025-01-17T13:41:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/fastapi\/\"},\"wordCount\":2469,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/fastapi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/fastapi.jpg\",\"keywords\":[\"API\",\"python\",\"web applications\",\"web development\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/fastapi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/fastapi\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/fastapi\/\",\"name\":\"Crea una Aplicaci\u00f3n con FastAPI para Python - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/fastapi\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/fastapi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/fastapi.jpg\",\"datePublished\":\"2022-11-29T12:10:32+00:00\",\"dateModified\":\"2025-01-17T13:41:57+00:00\",\"description\":\"Se llama \u201cr\u00e1pido\u201d por una raz\u00f3n. Esto es lo que necesitas saber sobre FastAPI para construir r\u00e1pidamente interfaces de programaci\u00f3n de apps usando Python.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/fastapi\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/fastapi\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/fastapi\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/fastapi.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/fastapi.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/fastapi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/python\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Crea una Aplicaci\u00f3n con FastAPI para Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"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\/es\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f\",\"name\":\"Emmanuel Uchenna\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/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\/es\/blog\/author\/emmanueluchenna\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Crea una Aplicaci\u00f3n con FastAPI para Python - Kinsta\u00ae","description":"Se llama \u201cr\u00e1pido\u201d por una raz\u00f3n. Esto es lo que necesitas saber sobre FastAPI para construir r\u00e1pidamente interfaces de programaci\u00f3n de apps usando 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\/es\/blog\/fastapi\/","og_locale":"es_ES","og_type":"article","og_title":"Crea una Aplicaci\u00f3n con FastAPI para Python","og_description":"Se llama \u201cr\u00e1pido\u201d por una raz\u00f3n. Esto es lo que necesitas saber sobre FastAPI para construir r\u00e1pidamente interfaces de programaci\u00f3n de apps usando Python.","og_url":"https:\/\/kinsta.com\/es\/blog\/fastapi\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2022-11-29T12:10:32+00:00","article_modified_time":"2025-01-17T13:41:57+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/fastapi.jpg","type":"image\/jpeg"}],"author":"Emmanuel Uchenna","twitter_card":"summary_large_image","twitter_description":"Se llama \u201cr\u00e1pido\u201d por una raz\u00f3n. Esto es lo que necesitas saber sobre FastAPI para construir r\u00e1pidamente interfaces de programaci\u00f3n de apps usando Python.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/fastapi.jpg","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Emmanuel Uchenna","Tiempo de lectura":"15 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/fastapi\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/fastapi\/"},"author":{"name":"Emmanuel Uchenna","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f"},"headline":"Crea una Aplicaci\u00f3n con FastAPI para Python","datePublished":"2022-11-29T12:10:32+00:00","dateModified":"2025-01-17T13:41:57+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/fastapi\/"},"wordCount":2469,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/fastapi\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/fastapi.jpg","keywords":["API","python","web applications","web development"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/fastapi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/fastapi\/","url":"https:\/\/kinsta.com\/es\/blog\/fastapi\/","name":"Crea una Aplicaci\u00f3n con FastAPI para Python - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/fastapi\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/fastapi\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/fastapi.jpg","datePublished":"2022-11-29T12:10:32+00:00","dateModified":"2025-01-17T13:41:57+00:00","description":"Se llama \u201cr\u00e1pido\u201d por una raz\u00f3n. Esto es lo que necesitas saber sobre FastAPI para construir r\u00e1pidamente interfaces de programaci\u00f3n de apps usando Python.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/fastapi\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/fastapi\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/fastapi\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/fastapi.jpg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/fastapi.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/fastapi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Python","item":"https:\/\/kinsta.com\/es\/secciones\/python\/"},{"@type":"ListItem","position":3,"name":"Crea una Aplicaci\u00f3n con FastAPI para Python"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","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\/es\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f","name":"Emmanuel Uchenna","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/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\/es\/blog\/author\/emmanueluchenna\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/60217","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/270"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=60217"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/60217\/revisions"}],"predecessor-version":[{"id":66944,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/60217\/revisions\/66944"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60217\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60217\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60217\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60217\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60217\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60217\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60217\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60217\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60217\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60217\/translations\/dk"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60217\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/60218"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=60217"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=60217"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=60217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}