{"id":1579,"date":"2024-08-02T07:29:42","date_gmt":"2024-08-02T05:29:42","guid":{"rendered":"https:\/\/blog.sutilweb.eu\/?page_id=1579"},"modified":"2024-08-02T07:29:43","modified_gmt":"2024-08-02T05:29:43","slug":"001-introduccion-a-la-api-rest","status":"publish","type":"page","link":"https:\/\/sutilweb.eu\/index.php\/lenguajes\/javascript\/javascript-practico\/16-api-rest\/001-introduccion-a-la-api-rest\/","title":{"rendered":"001. Introducci\u00f3n a la API REST"},"content":{"rendered":"\n<p>En este cap\u00edtulo vamos a ver una introducci\u00f3n a lo que son las <strong>API REST<\/strong>. En cap\u00edtulos anteriores hemos estado manejando como acceder a datos que est\u00e1n expuestos en Internet en una <strong>base de datos<\/strong>, en un <strong>servicio<\/strong>&#8230; din\u00e1micamente y as\u00edncronamente con la t\u00e9cnica de <strong>Ajax<\/strong>.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>El concepto de <strong>API REST<\/strong> se vuelve muy importante porque de hecho es el paradigma o manera en como se trabajan en la actualidad tanto las <strong>aplicaciones web<\/strong> como las <strong>aplicaciones nativas<\/strong>.<\/p>\n\n\n\n<p>As\u00ed como en la primera d\u00e9cada del siglo XXI el modelo de <strong>arquitectura MVC<\/strong> fue muy popular, en la actualidad el esquema est\u00e1 basado en la arquitectura denominada <strong>API REST<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 es una API REST<\/h2>\n\n\n\n<p>En los cap\u00edtulos dedicados al <strong>DOM<\/strong> comentamos lo que son las <strong>APIs<\/strong>, y dec\u00edamos que significaba <strong>Application Programming Interface<\/strong> (<strong>Interface de programaci\u00f3n de aplicaciones<\/strong>) no es mas que un conjunto de rutinas que nos provee acceso a ciertas funcionalidades de un software espec\u00edfico, como eran las <strong>APIs<\/strong> para la manipulaci\u00f3n del <strong>HTML<\/strong> v\u00eda <strong>Javascript<\/strong> como es la <strong>API del DOM<\/strong>, pero no s\u00f3lo tenemos eso, tenemos infinitas <strong>APIs<\/strong> como la de la <strong>geolocalizaci\u00f3n<\/strong>, el acceso a la <strong>webcam<\/strong>&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">APIs nativas y APIs externas<\/h2>\n\n\n\n<p>Dentro del mundo de las <strong>APIs<\/strong> tenemos <strong>APIs nativas<\/strong> y <strong>APIs externas<\/strong>, las primeras son aquellas en las cuales todo el motor de <strong>Javascript<\/strong> trae integrado para acceder al <strong>DOM<\/strong>, a la <strong>webcam<\/strong>, a la <strong>bater\u00eda<\/strong>, los <strong>puertos USB<\/strong>, los <strong>estados de conexi\u00f3n<\/strong>, la <strong>geolocalizaci\u00f3n<\/strong>.<\/p>\n\n\n\n<p>Y tambi\u00e9n podemos tener <strong>APIs<\/strong> <strong>externas<\/strong>, como por ejm acceder a datos externos mediante la <strong>API de GitHub<\/strong>, el <strong>API de Facebook<\/strong>, el <strong>API de Twitter<\/strong> para obtener los datos de un usuario, <strong>WordPress<\/strong>, desde hace algunos a\u00f1os tiene una <strong>API de tipo REST<\/strong> en la cual podemos construir un <strong>front<\/strong> con <strong>HTML<\/strong> simplemente accediendo a la <strong>API REST<\/strong> de un <strong>sitio web<\/strong>, y poder extraer <strong>categor\u00edas<\/strong>, <strong>etiquetas<\/strong>, <strong>art\u00edculos<\/strong>, <strong>informaci\u00f3n de los usuarios<\/strong>, y no tener que depender de los <strong>fronts<\/strong> de las plantillas de <strong>WordPress<\/strong>.<\/p>\n\n\n\n<p>La mayor\u00eda de <strong>APIs<\/strong> externas facilitan una documentaci\u00f3n para que sepas como se pueden usar, dici\u00e9ndote cuales son las <strong>rutas<\/strong> o los <strong>endpoints<\/strong>, y de tal manera debes recoger la informaci\u00f3n.<\/p>\n\n\n\n<p><strong>Comercios electr\u00f3nicos<\/strong> como <strong>Amazon<\/strong> tienen sus propias <strong>APIs<\/strong> y son externas porque no son nativas del navegador, si no que las han hecho terceras personas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 es REST<\/h2>\n\n\n\n<p><strong>REST<\/strong> es un t\u00e9rmino acu\u00f1ado en una tesis doctoral de una persona llamada <strong>Roy Fielding<\/strong> al que se le considera <strong>el padre de la especificaci\u00f3n HTTP<\/strong>, fue de las personas que estableci\u00f3 las reglas que tiene este protocolo, y hay que recordar que el <strong>protocolo HTTP<\/strong> es en el que navegamos en <strong>Internet<\/strong>. <strong>REST<\/strong> significa <strong>REpresentational State Transfer<\/strong> o <strong>Transferencia del Estado Representacional<\/strong>, y un <strong>servicio REST<\/strong> es un conjunto de restricciones con las que podemos crear un <strong>estilo de arquitectura de software<\/strong> que es el que se viene desarrollando con toda la nueva hornada de <strong>frameworks<\/strong> reactivos como son <strong>React<\/strong>, <strong>Angular<\/strong>, <strong>Vue<\/strong>, <strong>Svelt<\/strong>&#8230; hemos ido migrando de un <strong>modelo vista controlador<\/strong> a un esquema de arquitectura basada en <strong>REST<\/strong>.<\/p>\n\n\n\n<p><strong>REST<\/strong> se basa en las <strong>reglas<\/strong> y <strong>est\u00e1ndares<\/strong> del <strong>protocolo HTTP<\/strong>, y en la mayor\u00eda de las empresas as\u00ed es como trabajan tanto en el <strong>desarrollo web<\/strong> como en el <strong>desarrollo nativo<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Caracter\u00edstica REST<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Relaci\u00f3n cliente &#8211; servidor<\/h3>\n\n\n\n<p>A diferencia de lo que era un <strong>modelo vista controlador<\/strong> donde el <strong>controlador<\/strong> era el <strong>orquestador<\/strong> y el que se comunicaba con la <strong>base de datos<\/strong> y el que recib\u00eda las peticiones de los usuarios&#8230; en <strong>REST<\/strong> el <strong>cliente<\/strong> y el <strong>servidor<\/strong> est\u00e1n <strong>d\u00e9bilmente acoplados<\/strong>, lo que quiere decir que est\u00e1n separados, es decir, al <strong>cliente<\/strong> no le interesan los detalles de como se implement\u00f3 el <strong>lado del servidor<\/strong> que le est\u00e1 devolviendo esa respuesta en formato <strong>JSON<\/strong> o <strong>XML<\/strong>, y al <strong>servidor<\/strong> no le interesa como el <strong>cliente<\/strong> va a utilizar esta informaci\u00f3n para pintarla en los datos, es por ello que se dice que <strong>est\u00e1n desacoplados<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Las API REST son sin estado<\/h3>\n\n\n\n<p>Cada <strong>petici\u00f3n<\/strong> recibida por el <strong>servidor<\/strong> se va a manejar de manera independiente, lo que evita que se mantengan <strong>sesiones<\/strong> conectadas como para hacer varias peticiones al mismo tiempo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Las API REST son cacheables<\/h3>\n\n\n\n<p>Significa que tiene que haber un <strong>sistema de almacenamiento en cach\u00e9<\/strong> para evitar repetitivas conexiones hacia un mismo <strong>recurso<\/strong> del <strong>servidor<\/strong>, lo que impactar\u00e1 de manera positiva en el rendimiento de las aplicaciones, acelerando el tiempo de carga de manera sustancial.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.Interfaz uniforme<\/h3>\n\n\n\n<p>Una <strong>interfaz gen\u00e9rica<\/strong> que permita la administraci\u00f3n entre la interacci\u00f3n entre el <strong>cliente<\/strong> y el <strong>servidor<\/strong> de una manera uniforme, lo que significa que para cada <strong>petici\u00f3n<\/strong> va a existir una <strong>URL<\/strong> <strong>\u00fanica<\/strong> y con las caracter\u00edsticas de como nosotros le vamos a enviar la informaci\u00f3n, o lo que es lo mismo, lo que se conoce como los <strong>end-points<\/strong> o <strong>puntos finales<\/strong> a los cuales vamos a acceder a cierto determinado recurso.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. Sistema de capas<\/h3>\n\n\n\n<p>Del lado del <strong>servidor<\/strong> tiene que haber varias capas a la hora de implementarlas para estar previstos por si m\u00e1s adelante ese desarrollo escala porque se necesiten m\u00e1s caracter\u00edsticas, la manera en que ha sido programada permite esa escalabilidad, capas para monitorizar el rendimiento, y la capa de seguridad (muy importante).<\/p>\n\n\n\n<p>En el mundo del <strong>desarrollo web<\/strong>, como hemos dicho, este va a ser el modelo de arquitectura en el que vamos a estar trabajando.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfLas API son el nuevo CRUD?<\/h2>\n\n\n\n<p>El <strong>CRUD<\/strong> es un concepto que viene de las <strong>bases de datos<\/strong>, que significa <strong>CREATE-READ-UPDATE-DELETE<\/strong> (<strong>crear &#8211; leer &#8211; actualizar &#8211; eliminar<\/strong>) que son las 4 operaciones b\u00e1sicas que podemos hacerle a una <strong>base de datos<\/strong>.<\/p>\n\n\n\n<p>Las <strong>API REST<\/strong> trabajan con el <strong>protocolo HTTP<\/strong>, lo que viene a ser una operaci\u00f3n de <strong>inserci\u00f3n<\/strong>, en <strong>REST<\/strong> va a ser un <strong>POST<\/strong> (lo que en bases de datos era un <strong>INSERT<\/strong>), una <strong>consulta<\/strong> se convierte en <strong>GET<\/strong> (lo que en <strong>bases de datos<\/strong> es <strong>SELECT<\/strong>), la <strong>actualizaci\u00f3n<\/strong> en <strong>PUT<\/strong> (en <strong>bases de datos<\/strong> se utiliza <strong>UPDATE<\/strong>), y para <strong>eliminar<\/strong> se utiliza <strong>DELETE<\/strong> (mismo t\u00e9rmino se utiliza en <strong>bases de datos<\/strong>).<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Operaciones CRUD<\/th><th>Peticiones REST<\/th><\/tr><tr><td>INSERT<\/td><td>POST<\/td><\/tr><tr><td>SELECT<\/td><td>GET<\/td><\/tr><tr><td>UPDATE<\/td><td>PUT<\/td><\/tr><tr><td>DELETE<\/td><td>DELETE<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>La ventaja de las <strong>API<\/strong> de tipo <strong>REST<\/strong> es que como el <strong>cliente<\/strong> y el <strong>servidor<\/strong> est\u00e1n <strong>desacoplados<\/strong> (<strong>separados<\/strong>), a diferencia de la interdependencia que nos ped\u00eda el <strong>modelo vista controlador<\/strong>, podemos decidir en que <strong>base de datos<\/strong> queremos trabajar, si es <strong>SQL<\/strong> o <strong>NoSQL<\/strong>, en qu\u00e9 <strong>lenguaje de programaci\u00f3n<\/strong> (<strong>Java<\/strong>, <strong>Node<\/strong>, <strong>PHP<\/strong>. <strong>Ruby<\/strong>, <strong>Phyton<\/strong>). Construimos nuestra <strong>API<\/strong> de tipo <strong>REST<\/strong> y lo \u00fanico que hacemos es exponer al cliente, y el cliente no nos va a interesar el tipo de cliente que sea, mientras le expongamos la informaci\u00f3n en <strong>JSON<\/strong> y en <strong>XML<\/strong> que son dos <strong>formatos de intercambio de informaci\u00f3n<\/strong> perfectamente validados por los diferentes lenguajes y tecnolog\u00edas de informaci\u00f3n, no nos importa si el <strong>front<\/strong> que nos est\u00e1 haciendo la petici\u00f3n es un <strong>front<\/strong> de una aplicaci\u00f3n en <strong>Android<\/strong>, en <strong>Ios<\/strong>, para <strong>Windows<\/strong>, o en el navegador web hecha con <strong>Javascript<\/strong>. Al desacoplar todo ello, podemos tener diferentes <strong>fronts<\/strong> con diferentes necesidades, pero la parte del <strong>modelado de la base de datos<\/strong> y de la <strong>API<\/strong> sirve para todos estos escenarios.<\/p>\n\n\n\n<p>Podemos pensar en servicios como <strong>Uber<\/strong>, o en las <strong>redes sociales<\/strong>, podemos verlo desde <strong>navegadores<\/strong>, <strong>aplicaciones nativas<\/strong>&#8230; lo \u00fanico que cambia es el escenario de <strong>front<\/strong> (del cliente) pero los datos que se consumen est\u00e1n centralizados en la misma <strong>API<\/strong> de tipo <strong>REST<\/strong>.<\/p>\n\n\n\n<p>Para poder aprender y trabajar con <strong>API REST<\/strong> vamos a tener que instalar en nuestro ordenador <strong>Node.js<\/strong> y <strong>Postman<\/strong> (o en su caso <strong>Insomnia<\/strong>).<\/p>\n\n\n\n<p>En el siguiente cap\u00edtulo vamos a descargar el <strong>JSON Server<\/strong>, crear nuestra <strong>API<\/strong> <strong>falsa<\/strong> y empezar a hacer pruebas de peticiones con esta aplicaci\u00f3n <strong>Insomnia<\/strong> (o <strong>Postman<\/strong>).<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Nota<\/strong>: tanto <strong>Insomnia<\/strong> como <strong>Postman<\/strong> soportan aplicaciones de tipo <strong>REST<\/strong> y tambi\u00e9n de tipo <strong>GraphQL<\/strong>.<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>En este cap\u00edtulo vamos a ver una introducci\u00f3n a lo que son las API REST. En cap\u00edtulos anteriores hemos estado [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1577,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-1579","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Sutil Web","author_link":"https:\/\/sutilweb.eu\/index.php\/author\/sutilweb\/"},"uagb_comment_info":0,"uagb_excerpt":"En este cap\u00edtulo vamos a ver una introducci\u00f3n a lo que son las API REST. En cap\u00edtulos anteriores hemos estado [&hellip;]","_links":{"self":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1579","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/comments?post=1579"}],"version-history":[{"count":2,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1579\/revisions"}],"predecessor-version":[{"id":1581,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1579\/revisions\/1581"}],"up":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1577"}],"wp:attachment":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1579"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}