{"id":13124,"date":"2024-09-14T00:21:46","date_gmt":"2024-09-13T22:21:46","guid":{"rendered":"https:\/\/www.palentino.es\/blog\/?p=13124"},"modified":"2024-09-14T00:29:20","modified_gmt":"2024-09-13T22:29:20","slug":"construyendo-una-api-rest-en-php-usando-mvc-la-base-de-datos-de-refranes-y-su-estructura","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/construyendo-una-api-rest-en-php-usando-mvc-la-base-de-datos-de-refranes-y-su-estructura\/","title":{"rendered":"Construyendo una API REST en PHP usando MVC: La base de datos de refranes y su estructura"},"content":{"rendered":"<p>En el mundo actual del desarrollo de software, las <strong>APIs<\/strong> (Interfaces de Programaci\u00f3n de Aplicaciones) son una pieza fundamental para la creaci\u00f3n de aplicaciones modernas. Permiten que diferentes sistemas se comuniquen entre s\u00ed de manera eficiente, lo que abre la puerta a la interoperabilidad y escalabilidad entre plataformas. Dentro de este ecosistema, uno de los tipos m\u00e1s utilizados es la <strong>API REST<\/strong>. En esta entrada, te explicaremos qu\u00e9 es una API REST, c\u00f3mo funciona y por qu\u00e9 es esencial para el desarrollo de aplicaciones web.<\/p>\n<h3>\u00bfQu\u00e9 es una API?<\/h3>\n<p>Una API es una interfaz que permite que dos aplicaciones se comuniquen entre s\u00ed. Act\u00faa como un intermediario, facilitando que un software consuma o interact\u00fae con los datos de otro sistema. Las APIs son vitales para integrar funcionalidades de distintos sistemas, compartir datos o permitir que aplicaciones externas usen tus recursos.<\/p>\n<p><a href=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/09\/API-rest-palentino.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-13126 size-full\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/09\/API-rest-palentino.png\" alt=\"\" width=\"1129\" height=\"626\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/09\/API-rest-palentino.png 1129w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/09\/API-rest-palentino-300x166.png 300w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/09\/API-rest-palentino-1024x568.png 1024w\" sizes=\"auto, (max-width: 1129px) 100vw, 1129px\" \/><\/a><\/p>\n<h3><\/h3>\n<p><!--more--><\/p>\n<h3>\u00bfQu\u00e9 es REST?<\/h3>\n<p>REST, o <strong>Representational State Transfer<\/strong>, es un estilo arquitect\u00f3nico para dise\u00f1ar servicios web que interact\u00faan mediante el protocolo HTTP. Es uno de los enfoques m\u00e1s populares para construir APIs debido a su simplicidad, eficiencia y escalabilidad. Una API que sigue los principios REST es conocida como una <strong>API RESTful<\/strong>.<\/p>\n<h3>Caracter\u00edsticas de una API REST<\/h3>\n<ol>\n<li><strong>Cliente-Servidor<\/strong>: REST sigue la arquitectura cliente-servidor, donde el cliente (por ejemplo, un navegador web o aplicaci\u00f3n m\u00f3vil) env\u00eda solicitudes, y el servidor responde con los datos solicitados. Esta separaci\u00f3n permite que el cliente y el servidor evolucionen de manera independiente.<\/li>\n<li><strong>Sin Estado (Stateless)<\/strong>: Cada solicitud que el cliente env\u00eda al servidor debe contener toda la informaci\u00f3n necesaria para que el servidor la procese. Esto significa que el servidor no guarda ning\u00fan estado entre solicitudes; cada una es independiente.<\/li>\n<li><strong>Uso de M\u00e9todos HTTP<\/strong>: Una API RESTful utiliza los m\u00e9todos est\u00e1ndar de HTTP para interactuar con los recursos:\n<ul>\n<li><strong>GET<\/strong>: Obtener datos.<\/li>\n<li><strong>POST<\/strong>: Crear nuevos datos.<\/li>\n<li><strong>PUT\/PATCH<\/strong>: Actualizar datos existentes.<\/li>\n<li><strong>DELETE<\/strong>: Eliminar datos.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Interfaz Uniforme<\/strong>: Los recursos en una API REST se identifican mediante una URL. Esto asegura que la interacci\u00f3n con los datos sea clara y coherente. Por ejemplo, una URL puede representar un recurso espec\u00edfico como un refr\u00e1n en una base de datos.<\/li>\n<li><strong>Representaci\u00f3n de Recursos<\/strong>: Los datos solicitados o enviados a trav\u00e9s de la API suelen estar representados en formato <strong>JSON<\/strong> (aunque tambi\u00e9n puede ser XML u otros formatos). JSON es el m\u00e1s com\u00fan debido a su legibilidad y ligereza.<\/li>\n<li><strong>Cach\u00e9<\/strong>: Las respuestas de una API RESTful pueden ser almacenadas en cach\u00e9, lo que mejora el rendimiento al evitar solicitudes redundantes al servidor.<\/li>\n<\/ol>\n<p><a href=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/02\/API-RestPalentino.gif\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/02\/API-RestPalentino.gif\" alt=\"\" width=\"1272\" height=\"849\" \/><\/a><\/p>\n<h2>Usando MVC: La base de datos de refranes y su estructura<\/h2>\n<p><a href=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/09\/api-rest-palentino-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-13127\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/09\/api-rest-palentino-2.png\" alt=\"\" width=\"1131\" height=\"642\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/09\/api-rest-palentino-2.png 1131w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/09\/api-rest-palentino-2-300x170.png 300w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/09\/api-rest-palentino-2-1024x581.png 1024w\" sizes=\"auto, (max-width: 1131px) 100vw, 1131px\" \/><\/a><\/p>\n<p>El desarrollo de una API REST en <strong>PHP<\/strong> utilizando el patr\u00f3n <strong>MVC<\/strong> (Modelo-Vista-Controlador) es una manera eficiente de organizar el c\u00f3digo y gestionar la interacci\u00f3n entre la l\u00f3gica de negocios y los datos. Hoy vamos a profundizar en un proyecto que implementa una API REST para gestionar <strong>refranes<\/strong>, explicando tanto el uso de <strong>MVC<\/strong> como la estructura de la base de datos que respalda la API.<\/p>\n<p>Puedes explorar este proyecto en vivo en <a href=\"https:\/\/palentino.linkpc.net\/public\/\" target=\"_new\" rel=\"noopener\">palentino.linkpc.net\/public<\/a>, donde se muestra la funcionalidad completa para obtener refranes a trav\u00e9s de la API.<\/p>\n<p>Por otro lado dejo el proyecto <a href=\"https:\/\/github.com\/oscardelacuesta\/API_MVC_PHP\" target=\"_blank\" rel=\"noopener\"><strong>completo<\/strong><\/a> para que lo descarges o mejores en <a href=\"https:\/\/github.com\/oscardelacuesta\/API_MVC_PHP\" target=\"_blank\" rel=\"noopener\">github<\/a>. El proyecto tiene todos los archivos y la estructura de creaci\u00f3n de la base de datos mariadb o mysql.<\/p>\n<p>Para gestionar la base de datos uso el gestor <a href=\"https:\/\/www.adminer.org\/\" target=\"_blank\" rel=\"noopener\"><strong>Adminer<\/strong><\/a>. En un \u00fanico archivo .php puedes gestionar toda la base de datos. Es espectacular como est\u00e1 programado, tene\u00eds que probarlo.<\/p>\n<p><a href=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/09\/adminer.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-13134\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/09\/adminer.png\" alt=\"\" width=\"693\" height=\"332\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/09\/adminer.png 693w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/09\/adminer-300x144.png 300w\" sizes=\"auto, (max-width: 693px) 100vw, 693px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/palentino.linkpc.net\/public\/adminer-4.8.1-mysql.php\" target=\"_blank\" rel=\"noopener\">\u00a0https:\/\/palentino.linkpc.net\/public\/adminer-4.8.1-mysql.php<\/a><\/p>\n<h3><strong>\u00bfQu\u00e9 es MVC y c\u00f3mo se aplica en esta API REST de refranes?<\/strong><\/h3>\n<p>El patr\u00f3n <strong>MVC<\/strong> divide la aplicaci\u00f3n en tres componentes principales:<\/p>\n<ol>\n<li><strong>Modelo (Model)<\/strong>: Gestiona la interacci\u00f3n con la base de datos.<\/li>\n<li><strong>Vista (View)<\/strong>: En una API REST, la vista generalmente es una respuesta en formato JSON o XML.<\/li>\n<li><strong>Controlador (Controller)<\/strong>: Gestiona las solicitudes HTTP, interact\u00faa con el modelo y genera las respuestas para el cliente.<\/li>\n<\/ol>\n<p>En el caso de nuestra API REST de refranes, los <strong>controladores<\/strong> gestionan las solicitudes HTTP para obtener, crear o actualizar refranes, los <strong>modelos<\/strong> interact\u00faan con la base de datos donde los refranes est\u00e1n almacenados, y la <strong>vista<\/strong> devuelve los resultados en formato JSON.<\/p>\n<h3><strong>Explorando el proyecto: Estructura del c\u00f3digo<\/strong><\/h3>\n<p>El proyecto se organiza de acuerdo con el patr\u00f3n MVC, siguiendo esta estructura de carpetas:<\/p>\n<ul>\n<li><strong>app\/controllers\/RefranController.php<\/strong>: Controlador encargado de manejar las solicitudes relacionadas con los refranes.<\/li>\n<li><strong>app\/models\/Refran.php<\/strong>: Modelo que define la l\u00f3gica de acceso a la base de datos para los refranes.<\/li>\n<li><strong>app\/core\/Database.php<\/strong>: Gestor de la conexi\u00f3n a la base de datos.<\/li>\n<li><strong>public\/index.php<\/strong>: Punto de entrada de la API, donde se enrutan las solicitudes al controlador adecuado.<\/li>\n<\/ul>\n<h4><strong>Controlador: RefranController.php<\/strong><\/h4>\n<p>El controlador recibe las solicitudes HTTP (como GET, POST, PUT y DELETE) y decide qu\u00e9 acci\u00f3n tomar. A continuaci\u00f3n, interact\u00faa con el modelo Refran para acceder a la base de datos y luego genera una respuesta en formato JSON.<\/p>\n<p>Cuando desarrollas una <strong>API REST<\/strong> en PHP, como\u00a0 <a href=\"https:\/\/palentino.linkpc.net\/public\/\" target=\"_new\" rel=\"noopener\">https:\/\/palentino.linkpc.net\/public\/<\/a>, es fundamental contar con herramientas que te permitan probar los diferentes m\u00e9todos HTTP como <strong>GET<\/strong>, <strong>POST<\/strong>, <strong>PUT<\/strong>, y <strong>DELETE<\/strong>. Estas herramientas te permiten enviar solicitudes a tu API y ver las respuestas, lo que te facilita el proceso de depuraci\u00f3n y pruebas.<\/p>\n<p>A continuaci\u00f3n, te presento algunas de las mejores herramientas para probar tu API REST.<\/p>\n<h3>1. <strong>cURL (L\u00ednea de comandos)<\/strong><\/h3>\n<p><strong>cURL<\/strong> es una herramienta de l\u00ednea de comandos que permite hacer solicitudes HTTP. Es ideal para pruebas r\u00e1pidas desde la terminal y viene preinstalado en la mayor\u00eda de los sistemas operativos (Linux y macOS). En Windows, puedes instalarlo junto con <strong>Git Bash<\/strong>.<\/p>\n<p><span style=\"color: #333399;\">curl -X GET https:\/\/palentino.linkpc.net\/public\/<\/span><\/p>\n<p><strong>Para un POST<\/strong><\/p>\n<p><span style=\"color: #333399;\">curl -X POST https:\/\/palentino.linkpc.net\/public\/ \\<\/span><br \/>\n<span style=\"color: #333399;\">-H &#8220;Content-Type: application\/json&#8221; \\<\/span><br \/>\n<span style=\"color: #333399;\">-d &#8216;{&#8220;autor&#8221;: &#8220;Juan P\u00e9rez&#8221;, &#8220;fecha&#8221;: &#8220;2024-09-06&#8221;, &#8220;frase&#8221;: &#8220;M\u00e1s vale tarde que nunca&#8221;, &#8220;usuario&#8221;: &#8220;juan123&#8221;, &#8220;ubicacion&#8221;: &#8220;Espa\u00f1a&#8221;, &#8220;idioma&#8221;: &#8220;espa\u00f1ol&#8221;, &#8220;tipo&#8221;: &#8220;proverbio&#8221;}&#8217;<\/span><\/p>\n<h3>2. <strong>Postman (Interfaz gr\u00e1fica)<\/strong><\/h3>\n<p><strong>Postman<\/strong> es una de las herramientas m\u00e1s populares para probar APIs REST. Es ideal para quienes prefieren una interfaz gr\u00e1fica, ya que permite enviar solicitudes HTTP configuradas de manera intuitiva. Es muy \u00fatil para pruebas con par\u00e1metros complejos, autenticaci\u00f3n y diferentes m\u00e9todos HTTP.<\/p>\n<h3>3. <strong>Insomnia (Interfaz gr\u00e1fica)<\/strong><\/h3>\n<p><strong>Insomnia<\/strong> es otra herramienta gr\u00e1fica para probar APIs REST. Es m\u00e1s ligera que Postman, pero igualmente poderosa. Insomnia es perfecta para desarrolladores que buscan simplicidad y velocidad al realizar pruebas de API.<\/p>\n<h3>4. <strong>Advanced REST Client (ARC) (Interfaz gr\u00e1fica)<\/strong><\/h3>\n<p><strong>Advanced REST Client<\/strong> (ARC) es una extensi\u00f3n del navegador o aplicaci\u00f3n de escritorio que te permite probar APIs REST. Es una herramienta muy intuitiva y ligera que te permite enviar solicitudes HTTP de manera r\u00e1pida.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En el mundo actual del desarrollo de software, las APIs (Interfaces de Programaci\u00f3n de Aplicaciones) son una pieza fundamental para la creaci\u00f3n de aplicaciones modernas. Permiten que diferentes sistemas se comuniquen entre s\u00ed de manera eficiente, lo que abre la puerta a la interoperabilidad y escalabilidad entre plataformas. Dentro de este ecosistema, uno de los tipos m\u00e1s utilizados es la API REST. En esta entrada, te explicaremos qu\u00e9 es una API REST, c\u00f3mo funciona y por qu\u00e9 es esencial para el desarrollo de aplicaciones web. \u00bfQu\u00e9 es una API? Una API es una interfaz que permite que dos aplicaciones se comuniquen entre s\u00ed. Act\u00faa como un intermediario, facilitando que un software consuma o interact\u00fae con los datos de otro sistema. Las APIs son vitales para integrar funcionalidades de distintos sistemas, compartir datos o permitir que aplicaciones externas usen tus recursos.<\/p>\n","protected":false},"author":1,"featured_media":7088,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1415],"tags":[],"class_list":["post-13124","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sin-categoria-es"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/13124","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=13124"}],"version-history":[{"count":11,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/13124\/revisions"}],"predecessor-version":[{"id":13138,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/13124\/revisions\/13138"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/7088"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=13124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=13124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=13124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}