 Hola, buenas tardes. Yo soy Jesús Amieiro. Trabajo en gorpes.org, he cedido por Automatic en el desarrollo de la infraestructura de traducciones. Hoy voy a hablaros de Warp3 y la RSAPI. ¿Cómo podemos utilizar la RSAPI para trabajar desde una aplicación externa? Vamos, por lo tanto, a conectar Warp3 con una aplicación desarrollada en Larabel. Ahora os voy a explicar, si no tenéis ni idea, qué es Larabel. Larabel es el frango más popular actualmente de PHP. Tiene una curva de aprendizaje muy pequeña, pero está tan conocido, tiene un modelo de vista controlador, un motor de plantillas propio que vamos a verlo muy por encima, una capa propia de acceso a datos RME, tiene migraciones para poder tener la creación de bases de datos en código, una CLI muy potente, está fuertemente desacoplado entre los distintos módulos, de tal forma que podemos agregar módulos de una forma muy sencilla. Tiene tres en un teario de integración sencillos, es seguro, y sobre todo algo similar a gorpes, tiene una comunidad brutal, muy grande. Por lo tanto, es bastante sencillo que encontréis bastante buena documentación y ejemplos de cosas que necesitáis aprender. Y bueno, de gorpes no a pocos tengo que decir aquí, tiene una cuota de mercado de 63,6% en los temes, de un 43,1% en las webs, simple, feasible, y como todos conocemos y por eso estamos aquí, una comunidad brutal. Yo siempre digo, para mí lo que diferencia a gorpes de cualquier otro costo de contenido, framework, es la comunidad que tiene. No sería lo que es hoy en día, sin la comunidad. Entonces, como os dije, vamos a tratar de hacer una aplicación que utilice la resapi de gorpes para poder mostrar una lista de pos, algo sencillo. Voy a hacer labcoding, de todas formas tengo backup por si algo falla, eso está claro. Lo que sí, si queréis este PDF que estoy utilizando ahora mismo, lo tenéis en mi web jesusamiro.com, el primer pos que vais a encontrar. Y también tengo el paso final, es decir, como quedaría todo el tingla montado, todo el proyecto de Larabel, un archivo cipeado para que podáis descargarlo y ver cualquier cosa. Lo único, si habéis trabajado una vez con Composer, la carpeta vendor no la cipeé, simplemente si lo queréis recrear, hacéis un Composer install desde la línea de comandos y a partir de ahí, pues todo sin problema. Entonces, vamos a ver. ¿Cómo podríamos tener tres formas diferentes de poder atacar? Es una aplicación externa a gorpes. La primera sería si tengo una aplicación Larabel, esa misma aplicación tiene su propia base de datos y atacaría directamente a la base de datos de gorpes. Posiblemente esto no le guste demasiado a un administrador de base de datos o a un administrador de sistemas, y además, si está un sistema externo, posiblemente no tengáis este acceso, cortado por un firewall o simplemente no estés puesta a la base de datos de forma externa. Esto sería una primera forma que es factible atacarlo. Una segunda sería mediante paquetes para este framework, es algo muy de nicho, pero seguramente si estás utilizando otro framework también lo habrá. Hay un paquete que se llama Corsel para trabajar en Larabel que directamente ataca gorpes. Tiene acceso a todo esto, a POS, a páginas, a CF, CPT, Shored Code, estas sonomías y más, pero seguimos en lo mismo, tiene que tener acceso a la base de datos. La problemática que teníamos antes la seguimos teniendo. Es muy sencillo utilizar, por ejemplo, para dame todos los POS que estén publicados, obtenlos, o por ejemplo, encontrar POS con ID 31, o emprime por consola el título del POS. Y como último paso que vamos a ver hoy, está la resapi. Antes de nada vamos a definir que es un API, un API es un conjunto de métodos que nos ofrece un software, en este caso gorpres, para que otro software, en este caso Larabel, lo vaya a poder utilizar. Es decir, podríamos tener una aplicación de escritorio, portátil, tablet, teléfono, o un smartwatch que ataque esa API, y esa API exponga la información de gorpres. Y dije, aparte de API, es una resapi. Las APIs tienen unas características determinadas que, el nombre de res es representacional state transfer, está basado en un protocolo cliente servidor sin estado, HTTP o HTTPS. Hoy en el ejemplo, como lo voy a hacer en el local, voy a utilizar HTTP, nunca utilicéis HTTP en algo en producción. De hecho, tenéis que hacer un pequeño truco para poder utilizarlo en producción, porque vamos a mandar por un, si lo hacéis con HTTP, vais a mandar credenciales por un canal sin cifrar. Cualquier persona que os esté escuchando ese canal va a poder obtener las credenciales y hacer lo que dé la gana y a lo que tenga acceso con esas credenciales. Está basado en URI, en URI ya lo veremos todo eso, y la información que devuelve es JSON. Es decir, nos va a permitir interoperatividad entre distintas aplicaciones, distintos lenguajes. Es por así decirlo, un estándar en la industria. Tenemos otras operaciones principales o verbos, ¿vale? Estos son los que vamos a utilizar, POST para crear un nuevo elemento, GET para obtener información, PATCH para actualizar, aunque el API de WordPress nos permite también utilizar el método PUT o el método POST para hacer actualizaciones, vamos a utilizar PATCH y DELETE para borrar elementos. Estos son equivalentes a un CRUD clásico, que es lo que vamos a ver desde la parte del ARABEL. Usos, como vimos antes en la diapositiva pues tenemos un montón de aplicaciones de móvil, tablet, web, aplicaciones de escritorio, importaciones, exportaciones complejas y que serían interesantes poder atacar un API en res para hacerlas, redes sociales, lo que pasa, por ejemplo, para crear un cliente para Twitter y también para Internet of Things, ¿vale? Ahora que acabo de mencionar redes sociales, tened en cuenta que si utilizáis una API externa, siempre estáis condicionado a las políticas de esa empresa y os puede pasar lo que le pasó esta semana, bueno, la semana pasada, clientes de Twitter que en un momento determinados os corten el acceso a esa API REST y vuestro negocio tenga que cerrar. Vale, no es el caso de un WordPress si lo gestionáis vosotros pero tened cuidado que cuando dependéis de una API externa las condiciones del juego pueden cambiar en cualquier momento. Vale, vamos aquí a hablar de una serie de conceptos que son los endpoints. Lo primero que tenemos son una serie de rutas en este caso, por ejemplo, para acceder a los posts de WordPress a la revisión sobre las categorías, tendremos una URL base que será el dominio barra UWP Jason después una serie de rutas como estas y una serie de parámetros adicionales que podamos tener. Esta será nuestra URI. Aquí, por ejemplo, tenemos la URI de acceso a los posts y esta URI junto con un verbo es lo que se denomina un endpoint. Pues, por ejemplo, si ataco este endpoint con el verbo post lo que voy a hacer es crear un endpoint de creación de un post. Vale, en cualquier momento estamos en un taller live coding en cualquier momento si tenéis dudas, levantáis la mano, me paráis, Jesús, aclaremos esto, sin más. Vale, ¿qué rutas tenemos aparte de los posts? Tenemos un montón, como veremos, pues nos va a permitir atacar tags, páginas, comentarios, tasonomías, medias, usuarios, tipos, status, settings y, os reíste, este cliente es súper interesante para hacer depuración, sobre todo, es un cliente que nos permita hacer guarradas, nos permita hacer llamadas sobre todo para depurar, ¿vale? Porque tienen un sitio donde metemos la URL, podemos meter credenciales, parámetros y nos va a devolver el JSON y ahí podemos ver qué nos está pasando, qué está fallando, etcétera, etcétera. Vale, lo tenéis ahí es el cliente. Vale, y ahora vamos a empezar con la parte de live coding. Voy a ir pasando un poco de las transparencias a la consola o al PHPStorm, que es el editor que utilizo. Antes de nada, esto puede ser, pero antes de por abajo me funcionaba por un pros interno que tenemos en la empresa para acceder a WordPress.org. Me imagino que irán por los tíos. Bueno, la documentación de toda esta, de la API está dentro del handbook, del handbook de la API REST, ¿vale? Y en este caso, aquí os voy a mostrar toda la información de los distintos parámetros que podemos pasarle, de los endpoints, etcétera, etcétera. Está cargando, entonces, en principio no va a haber fallo. Vale, entonces, os voy a enseñar hacia dónde vamos a llegar, ¿vale? La idea es construir un sistema muy básico que veis aquí, que es una aplicación Laravel que me va a permitir tener un sistema completo de CRUD, es decir, crear, leer, actualizar y borrar POST. Vale, estos son lo la mundo que se instala por efecto con WordPress, después 10 entradas creadas de forma aleatoria con la clíde de WordPress y después un sistema que nos permita añadir un nuevo POST, editarlo y borrarlo. ¿Vale? ¿A dónde voy a querer llegar? Y todo esto va a tirar de la información que está almacenada en un WordPress local. ¿Vale? Aquí veis los mismos POST. Entonces, lo primero que voy a hacer, me voy a venir aquí y vamos a borrar el WordPress y la aplicación de Laravel. Vale, ahora no carga nada. Y la aplicación es igual. Entonces, vamos a empezar. ¿Cómo vamos a hacer la instalación de WordPress? Lo voy a hacer de una forma rápida con la clí. Voy a crear un directorio para WordPress, ha cedo a él y con este comando, conocéis la clí, más o menos todos, no me imagino, este comando me permite descargar y descomprimir el core de WordPress en esta carpeta. Veis que utiliza una versión cacheada, es decir, va rápido. Con este comando, lo que hago es crear unas entradas en el WP config con las creencias de la base de datos y con este comando, WDB Client, como tenía la base de datos previa creada, la voy a limpiar. Voy a borrar toda la información que tiene dentro. Tenemos ahora mismo configurado el WordPress. Ahora me falta hacer la instalación. La instalación la hago con este comando, WP core install. Pues le doy la URL interna, WordPress.t, en el título del sitio, un usuario y una contraseña, admin password y un correo electrónico. Y lo último, voy a activar el 2021 como tema. Ok, vamos a volver a recargar y si todo fue bien, ahí tenemos nuestro app instalado con HolaMundo. Siguiente historia que vamos a hacer, vamos a precargarlo con datos aleatorios. Os explico ahora este comando cómo va. Lo que hace este comando, mediante un curso, llama a una web que es lorengypsum.net, que me devuelve un cinco párrafos de lorengypsum y con el pipe se los inyecto al UWPostGenerate que genera un post. Veis que este parámetro, menos o menos, con un tigual a diez, lo que va a hacer es generar diez post. Descargo cinco párrafos de lorengypsum y creo, mediante la clí, diez post. Esto me da... Déjame ver qué está pasando aquí porque no lo están inyectando correctamente. No sé por qué. No tengo ni idea porque no lo están inyectando correctamente. No, no necesito sudo para esto. Perdona. Sí, pero con la instalación la volvía general. Es decir, la instalación está aquí, ¿vale? No, no, ahora mismo debía generarlo porque... Vale, lo acabo de generar sin el lorengypsum, ¿vale? Ahí lo tenemos, estaría vacío de contenido. Para los efectos es lo mismo. Vale. Siguiente tema que vamos a empezar a ver. Vamos a empezar a ver cómo está organizada la pires de WordPress. Entonces, vamos a irnos aquí a WordPress.tes, que es mi sitio que tengo configurado, barra, wp, guión medio, JSON. Ahí es donde está la raíz de la pires de WordPress, ¿vale? Un tema interesante es si vais a utilizar Chrome como herramienta de desarrollo tenéis que instalar un plugin para poder leer de forma estructurada el JSON que se llama... Bueno, perdón, esto es el 40, ¿eh? Pero el que utilizo yo es el mismo. JSONView, ¿vale? Hay varios. Y si lo hacéis con Firefox lo trae integrado por efecto. ¿Vale? Es decir, no tenéis que instalar nada. Vale. Entonces, bueno, lo primero que tenéis aquí es que vamos a ver cuando accedemos a la web por efecto. Tenemos NameSpace. ¿Veis que tenemos, por ejemplo, mv, barra 1.0, wp, barra w2, SideHel y BlockEditor? Son distintas rutas, perdón, distintos NameSpace que tenemos para acceder a distintos elementos del API. La que vamos a utilizar por defecto, la que tiene por defecto la actual API de WordPress es barra wp, perdón, barra w2. Ahí es lo que está indicando. El nombre de fabricante o el plugin y el barra 2 normalmente es la versión, ¿vale? Veis, por ejemplo, o en vez de barra 1.0 es el elemento que se está exponiendo, barra 1.0 a la versión del API. Y estos cambios, antes de que se instaléis más plugins como vamos a hacer ahora con Google Comer, vais a ver que va a aparecer más NameSpace que vamos a poder utilizar para... desde el API REST. Vamos a hacer la instalación de Google Comer y activarlo, ¿vale? Y cuando recargue el navegador, vais a ver que va a aparecer unos contos en NameSpace más y en la parte inferior con la rutas y con todo eso que veremos a continuación, vais a tener más Unis, perdón, para poder atacar desde el API. Sí, perdona, tanto, ¿no? Ahí está bien, ¿vale? Veis que por defecto serían el wpw2, el SideHel y el editor. Veis que añadi un montón de wbc Google Comer, Admin, Analytics, Store, ¿vale? No se metió unas contas más. Hay otros plugins adicionales, perdón, que nos van a añadir más funcionalidades. Es decir, a medida que instaléis si decibéis plugins vais a tener o no tener. Lo que voy a hacer es activarlo para no tener más elementos que nos estorben y ahora a recargar, pues veis que ya me siguen apareciendo los otros NameSpace. Y aquí en la parte... Vale, y en la parte de rutas veis que tenemos... Vamos a ver lo mejor en el Firefox, que yo creo que lo visualizamos mejor. Voy a hacer zoom ahora mismo. Vale, en la parte de rutas veis que tenemos todas las rutas, por ejemplo, wwp-v2-post y las que podemos tener adicionales para poder atacar post, páginas, etcétera, etcétera. Esos serían las rutas que si le ponemos delante wwp-json conformaría la URI para poder atacar mediante un verbo adecuado. Vale. Es decir, es como podemos tener información por un lado aquí y por otro lado en el handbook de la RSAPI. Ok. Y lo que os iba a comentar, si por ejemplo, si ahora solo me quieren enfocar a la... a pires de WordPress pongo aquí wwp barra w2 y las rutas pues ya van a eliminar esa... Perdón. Veis que me aparecen solo en el MSP de wwp-v2 y aquí tendríamos las rutas desde la base para poder atacar. Vale. Las rutas, y si por ejemplo hago un expliqué de las rutas pues tengo los métodos que podría atacar para... perdón, los verlos que puedo utilizar o modificar en este caso. El POST me permite mediante get obtener un listado de POST y mediante el verbo POST crear un nuevo POST. No confundáis el verbo POST con el concepto de contenido de POST de WordPress. Vale. Siguiente cosa que vamos a hacer ahora ya nos vamos a meter un poco en temas de código. Va a haber una serie de información a la que pueda atacar pero va a haber otra serie de información que no es pública, que tengo que autenticar el usuario y tengo que temer la autorización para poder hacer eso. Es decir, por ejemplo, un usuario que con nivel... aunque se pueda logrear que tenga privilegios bajos no va a poder crear un POST. En este caso voy a utilizar un usuario administrador que sí que va a poder temer permisos para crear un POST. Vale. Y aquí vamos a acceder al backend perdona. La forma que voy a acceder para autenticar un usuario va a ser mediante una contraseña que voy a crear para esta aplicación. Vale, antiguamente, esto que está ahora mismo en Core se utilizaba mediante un plugin externo. Tenemos más formas de autenticarnos como pueden ser con tokens pero esta es la que está ahora mismo integrada en el cole por lo tanto es la recomendable. Y utiliza una contraseña para esa aplicación de tal forma que no tenéis que ceder vuestra contraseña para acceder al backend de WordPress que es cualquier compromiso de seguridad. La podéis modificar y se actualiza en la aplicación externa sin ningún problema. Vale, ¿cómo se genera? Simplemente nos vamos a los usuarios. Voy a editar mi usuario. Y aquí abajo voy a poder crear un nuevo contraseño de la aplicación. Esto no me debería estar apareciendo al estar en un entorno no seguro. Déjame. Veis que no me aparece y me dice la contraseña necesita HTTP. Es un método de protección que tiene WordPress para evitar que lo utilices bajo en redes no seguras y para esto hay un truco para poder hacerlo en test que simplemente es en el define de WordPress admin decirle que nuestro entorno de desarrollo es local. Vale, entonces me voy aquí a abrir WordPress local irme al WordPress config y añadir esta línea. Veis que ahora sí que ya me aparece esta contraseña. Cuando queréis una contraseña aquí apuntadla porque me la va a visualizar en este momento y a partir de aquí ya no vais a poder acceder a ella. Entonces voy a crearla y digo Laravel Añadir nuevo contraseño a la aplicación la copiamos y la vamos a meter ahora mismo en un Visual Studio Code aquí, ¿vale? Para tenerla y después rescatarla de código. Entonces ahora mismo ya tenemos preparado en nuestro WordPress para poder ser atacado mediante una aplicación externa. Vamos entonces a empezar con esa aplicación externa. Vale, y lo que vamos a hacer es crear un proyecto de Laravel. Los proyectos de Laravel se crean con Composer para que voy a hacer un pequeño truco para que me la instale la versión que quiero de Laravel que no es la última, es la 8 es lo que lo teste. Vale, crear la aplicación de estar descarrando todos los paquetes de todas las referencias externas con Composer y una vez que acabe este proceso tendremos una aplicación lista para empezar a trabajar. Vale, voy a abrir el proyecto lo instale en un subdirectorio entonces voy a borrar la que tenía creada de antes ¿vale? y la veis aquí creada, ¿vale? y lo que vamos a basarnos en todo el ataque que va a hacer esta aplicación Laravel hacia la API REST es una librería que se llama Google vale, que básicamente nos facilita nos encapsula las llamadas HTTP hechas en PHP desde nuestra aplicación Laravel hacia la API REST de WordPress. ¿Cómo funcionaría una una aplicación normal de Laravel? Funcional en la siguiente forma tenemos un navegador cuando la aplicación recibe una llamada hay una tabla de rutas mira lo que la petición que está llegando esa tabla de rutas pasa la llamada a un controlador que es una clase que tiene un método para responder a esa llamada normalmente el controlador lo que hace si necesita datos es mediante un modelo ataca la base de datos y responde con una vista una vista es un template en este caso un template blade un template PHP HTML es renderizado en HTML hacia el navegador pero aquí va a cambiar un poco lo que estamos montando porque esta base de datos de Laravel desaparece porque estamos obteniendo los datos obteniendo y metiendo datos a través de la API REST de WordPress entonces cambia de esta forma la llamada pasa una tabla de rutas es un controlador el que recibe el que le dice lo que hay que hacer hace una llamada a la API REST de WordPress y devuelve esta es la diferencia entre un modelo clásico, modelo vista controlador y entre una aplicación MVC y lo que estamos haciendo aquí con la API REST vamos entonces a ponernos lo único que voy a hacer es utilizar bootstrap como las CSS de bootstrap para darle un poco de estilo y nada más, esta sería la llamada que utilizaría pero lo tengo por aquí en una carpeta y lo voy a copiar para ir más rápido lo único que acabo de hacer ahora es en la carpeta public meter un archivo de bootstrap CSS, hasta ahí lo vais siguiendo más o menos por ahora ok lo siguiente es un archivo de configuración un archivo N de donde le vamos a poner el nombre que va a tener la aplicación y la URL base este archivo está en la raíz de la carpeta y la URL pues lo que vamos a hacer ahora es crear el controlador el controlador simplemente con este comando PHP Artist and May Controller un controlador que se llama Post Controller y de tipo resource significa que me va a crear los métodos vacíos pero crearlos que tiene habitualmente un cruz me va a permitir con esos métodos tener una creación una lectura tanto de un listado como de un elemento único un update y un borrado está acelerado el controlador que lo mete en la carpeta app esto no tiene ningún interés para explicar la pires aquí está, vale se ve bien desde detrás esto no, verdad se llega a ver el código perdona, sabéis donde se hace más grande no, comando más no funciona acabo de probarlo sé que hay que hacerlo aquí en las preferencias estoy pero perfecto aquí no pues no tienes razón esto no falla ¿dónde lo veis aquí? ahí, vale no es venga, aquí está pues no no importa que lo tengas en las diapas ahí lo podemos hacer ahí está más grande bueno, como? se ve mejor, creéis, sí? vale vamos a ver hay mejor, vale, perfecto bueno, pues veis lo que crees es una clase que extiende el controlador y tenemos el index para hacer un listado completo el create para mostrar el formulario de creación el store para almacenar esa información el show para mostrar información de un elemento concreto el edit para mostrar el formulario de edición, el update para actualizar esa información y el destroy para borrar son los métodos de un club básicos entonces, directamente lo que voy a hacer es pillarme el código que tengo abierto previamente y vamos sirviendo elemento-elemento como va vale, no tenemos tiempo para poder hacer live coding y poder explicarlo bueno, lo que tengo es lo primero es aquí jacodeada en la propia clase la urlebase que sería golpes.es barrapost eso es la base tengo credenciales admin que tengo que cambiar que había creado previamente aquí vamos almacenado ahí y un array que es el que voy a utilizar es un array donde voy a meter usar el contraseño para hacer la autenticación cuando necesite autenticarme contra la API tengo un constructor que simplemente lo que voy a hacer es en este array cargar lo que tengo aquí y aquí es un array que necesita la librería Google para poder para poder autenticarse y veis que aquí hice dos importaciones el cliente y unas requisitions para para poder trabajar directamente con la librería de Google hasta aquí todo ok vale bueno, lo siguiente que tengo que hacer es crear la ruta, os acordéis cuando vimos ese esquema la había una petición HTTP que iba en una ruta de la ruta al controlador y del controlador pues ya se empezaba a hacer las llamadas a las pires, vamos a crear simplemente es en la tabla de rutas que se define aquí pues meto esta línea, vale que lo que va a hacer es cada petición que tenga las peticiones que voy teniendo que ataquen la pp barra, pos, barra lo que sea pues van a resolverse unos métodos que vamos a ver ahora vamos a verlo, no, el use está aquí está aquí, toda la razón vale fijaros, lo que nos interesa es, vamos a ver, empezamos aquí cuando tenemos una petición get a barra post es decir, mi URL barra post lo que va a hacer es llamar al método index del controlador post cuando tenga una llamada post con el verbo post lo va a hacer al estore y así sucesivamente a cada método del controlador es decir, por ejemplo, cuando hago una llamada con el verbo de let a post barra un post determinado, esto que va entre llaves es un identificador único pues lo que va a hacer es llamar al método post destroy que lo que hará es a su vez una llamada a la pires de WordPress pasándole el verbo de let ¿me entendéis esto como va? ok esto ya os lo expliqué, lo de las importaciones esto también vale, y ahora vamos con el primer ver cómo funciona el primer método el index vale, el index se va a encargar cuando llame a mi aplicación barra post de hacer la llamada a la pires y de devolver un listado de post ¿cómo la hace? creo un array donde por defecto las llamadas a la pires me devuelven una página con 10 elementos en este caso le digo, dame una página con 100 elementos, esto es un parámetro que le paso a la llamada creo con esta función un cliente para poder hacer esas llamadas y aquí veis que hago la llamada con el método request de Google utilizo el verbo get la url es la url base que tengo arriba es decir un punto test barrawp.json y le paso una serie de le pasa como opciones los parámetros que en este caso sólo es el número de páginas perdón, el número de elementos que quiero por página el máximo son 100 en este caso hago la llamada queda almaceno en response y después lo que hago es la decodifico del JSON para almacenarlo en el post en esta barra de post y lo último que sería es devolver este método de este controlador va a devolver una vista de Laravel a la que se llama ahora digo donde está a la que le paso de forma compactada este variable este post y las vistas dejadme que las voy a copiar antes de continuar se explica un poco como funciona el modelo de vistas que tiene la Laravel aquí en layout es decirlo un modelo de plantilla aquí se mezcla código html con código php está entre llaves porque es la forma que utiliza el sistema de plantillas de la Laravel básicamente lo que tengo es un documento html con sus cabeceras metas token crf el título que veis que se extrae de la propia configuración que hicimos antes en el punto env de javascript en principio no lo necesito no lo necesitaría carga una fuente de google externa el bootstrap que vimos antes aquí también carga en una cabecera en un navegador el nombre de la app y lo que tiene es aquí un elemento yield para inyectar contenido esto puede decirlo un contenedor que va a poder utilizar otras plantillas que estindan esta plantilla para inyectar el contenido con esta plantilla inicial un esqueleto y aquí donde pongo yield content es donde voy a enchufarle el contenido del resto de plantillas una plantilla para redimensional para hacer el listado, otra plantilla para tener el formulario de creación de post otra para la edición y hasta ahí porque lo del devorrado y lo del resto de botones los voy a tener en la plantilla inicial pues vamos a ver cómo sería este este primer elemento el index es una plantilla que veis que extienda el layout app que era este layout que tenemos y en la sección de contenidos pues me vas a meter toda esta html que tenemos por aquí enbebido con php y que vamos a tener ahí, vamos sirviendo como sería lo que tienes en la parte superior este cuadro es realmente lo que estoy haciendo en cada vista que hereda del anterior donde inyecto el contenido tenemos un botón para añadir post tenemos un listado de post y tenemos un botón de edición y un botón de borrado vamos a ver cómo hacemos todo eso aquí en post añadimos un enlace y le decimos que la ruta de enlace sería el post create este método es donde voy a mostrar el formulario de creación de post después que más tenemos bueno como esta plantilla va a recibir va a recibir un listado de post como consecuencia de la llamada lapirres pues en este forage lo que voy a hacer es un forage donde intero todos los post y voy mostrando información en este caso lo que mostro es el título renderizado y muestro hasta ahí y a su vez también muestro un botón para editar que sería llamando a la ruta de edición pasándole el id del post y también hago lo mismo con la de borrado llamo al post destroy pasándole el id del post fijaros que aquí en este propio botón de post de borrado le digo que sea el método post añado el verbo delete añado el token para evitar csrfs y hasta ahí queda claro más o menos como va el tema es decir aquí lo que tienes claro es tener claro es que este método lo que hizo fue una llamada aquí a la pires de warpres aquí la decodificar y se lo pasa a una vista para que la pinte así es sencillo esa vista lo que hace en este caso 10 post que tenemos tenemos un máximo de 100 por página y los pinta nada más esto que diré así siguiente elemento que vamos a ver creo que tengo planteado el añadir obtener información de único post si pincho en un post me voy a mostrar la información de ese post está vacío, está sin contenido lo que es vacío y cómo está esto montado bueno en la plantilla inicial perdón la plantilla de index tengo aquí entre el título un elemento a un enlace a donde a la ruta de visualización de post y a la que le paso el ID entonces en ese momento lo que haré es cuando clique llamaré a una ruta al método del controlador de visualización de un elemento ese método llama a la pirest y lo que me devuelve se lo envía a una plantilla para visualizar en ese flujo es lo que vimos lo que vimos en esta en esta diapositiva es lo que estoy haciendo siempre llama una ruta esa ruta llama a un método del controlador la información o la envía a la pirest y después tengo que devolver algo en una vista o le paso algo que me devuelve a la pirest o el retorno a una ruta diferente bueno pues veis que aquí es la forma de crear el enlace y lo que voy a hacer mediante el controlador el controlador se llama show pues vuelvo a crear un cliente bueno veis que ese controlador recibe la idea del post que quiero visualizar lo que hace el controlador algo muy sencillo crea un nuevo cliente Google hace la llamada a la urrele barra el id del post y lo que devuelve se lo pasa a una vista y vamos a ver que tiene esa vista la vista es post.show la forma de definirlo es estar dentro del directorio post y es un fichero llamado show.blade.php es como lo define la rabel simplemente y a esa vista le pase la información del post es esta que tengo aquí show es muy sencillo veis que volva a extender la plantilla inicial y simplemente lo que hacéis me renderiza el título y el contenido sin más historias vale hasta aquí todo ok ahora tenemos listado completo de los posts que tengo y visualización de un único post hasta ahora todo sin ningún problema porque son llamadas que podemos hacer sin autenticar ahora vamos a pasar a la parte de creación edición y borrado que tengo que autenticarme y tener ese usuario tiene que tener los permisos correspondientes para poder hacer esas acciones vale bueno pues vamos a empezar por la creación y la creación tenemos dos partes tenemos que mostrar al usuario el formulario de creación y después tenemos que eso obviamente no tiene ninguna llamada al API pero sí que tenemos que tener un método interno que lo gestione y después una vez que hacemos clic en el formulario va a ir a enviar esos datos a una ruta interna de la propia aplicación y es así que va a hacer la llamada externa para almacenar la información y después devolvernos a una página determinada ¿me seguís con esto? la creación como os dije es un formulario lo que vamos a mostrar entonces simplemente lo que tiene que hacer es devolver una vista la vista create es una vista que tenga código es muy sencilla simplemente estiendo otra vez la plantilla de layout lo van a extender todas es un formulario que va a ir a esa ruta post-store con el método post importante pasarle toque en csrf y después tiene dos grupos importantes tiene donde me vas a mostrar el título y donde me vas a mostrar el contenido tiene más elementos de gestión de errores pero hasta ahí es decir que yo cuando clic aquí en añadir post lo que va a hacer es llamar al controlador de create y ese controlador me va a devolver la vista con dos elementos simplemente esto vale que pasa, yo ahora aquí relleno información y cuando haga clic en crear post esto lo que va a hacer es llamar al método interno de la aplicación store que ese sí que va a ser el que se va a comunicar con la pira externa ok pues vamos a poner título de prueba vale, vamos antes de nada a ver un poco el código como está esto montado recordaros que os dije que llamaba al método store tenemos aquí en la ruta post.store y básicamente lo que hace es obtiene este método tiene un parámetro que es la request la request post que acaba de recibir cuando hago clic en el botón del formulario y directamente lo que creo es un array con parámetros que es el título que venía en el request el contenido que venía en el request que eran eran estos elementos nada más name título name contenido eso lo crea como parámetros y estado publicado y fijaros la única diferencia es que cuando creo el cliente guzle tengo que pasarle un array donde tiene como clave out y como parámetro el array que habíamos creado en el método en el constructor inicial vale usuario y contraseña esto es lo que nos va a permitir autenticarnos con esa contraseña previa de aplicación que habíamos creado en el backend de WordPress para el admin vale y no tiene nada más volvemos a hacer una llamada post a la orre elevase para crear y con estos parámetros que tenemos aquí no me metí en controlar si hay campos vacíos si hay errores si la respuesta no es correcta aquí simplemente os pongo el modo ejemplo si la respuesta es un 201 que es la respuesta de elemento creado lo que hago es una redirección a la ruta base para que me muestre listado si no tendrías que hacer algo volver al formulario para decir hay un error ese control de errores pero ya es propio de la aplicación no es nada que implique si todo salió bien debíamos ver un listado de si no un error vamos allá ahí lo tenemos y aquí lo tenemos título de prueba y el contenido que hayamos creado la única diferencia que le pasamos en la creación del cliente Google ese array con los elementos de indicación una vez que lo tenemos creado vamos a ver como es la edición lo único que es diferencia de la creación de la edición es que en la edición tengo que pasarle tanto al título como al contenido el contenido que extraigo de la pires y enviarle la actualización vamos a ver cómo funciona todo esto fijaros aquí sí que cuando muestro el formulario vamos a ir por partes para no liarnos cuando clica aquí lo que va a pasar es voy a llamar al formulario de edición pero probablemente tuve que hacer una llamada a la pires para obtener la información de ese post antes no, en la creación simplemente muestrame esta plantilla de este formulario pero aquí no, hago llamada y esa llamada se la paso ese post que acabo de recolectar de la pires, se la inyecto a la vista vamos a ver cómo funciona esto tengo este método edit que lo que hace es crear un cliente Google hace la llamada a la base es la misma llamada que cuando hago un show muestro información de ese post y eso se lo paso a una vista a la vista edición y esa vista es un formulario pero simplemente que en el valor fijaros es un formulario muy parecido al del create vamos a ponerlos Fernando Conto nos queda media hora sobre media hora ves que es un formulario muy parecido entre el create y el edit las únicas diferencias que van a tener de hecho se podrían reutilizar la única diferencia es que tiene los valores el edit tiene el valor que le acabo de pasar el controlador y el decoración es un valor vacío la única diferencia y veis que también para el contenido pues aquí está el contenido renderizado vale hago clic en el botón de edición hace la llamada a la pires me inyecta esa llamada a la vista de edición y aquí estamos pues ahora simplemente me queda hacer una modificación título de prueba modificado y contenido de prueba también modificado vamos a ver antes de nada cómo actúa el método del controlador antes de utilizarlo es un método que recibe por un lado la request y por otro lado el id que quiero actualizar es muy parecido al método al método de creación tengo que crear los parámetros que quiero pasarle para actualizar que en este caso título contenido y también estado publicado tengo que volver a pasarle los elementos en la creación del del cliente Google los credenciales de autenticación y lo único si os fijáis aquí tengo que utilizar el método put cuando hacía cuando creaba cuando creaba un nuevo elemento utilizaba el método post de creación de nuevo elemento pero aquí estoy utilizando el método put es en la que hay diferencia le paso la uri que sería la urle base barra el id del elemento que quiero actualizar le paso los parámetros y si la respuesta es un 200 no un 201 porque es de actualización me vas a redirigir a la urle base ok vale pues vamos a ello si está todo ok funcionará y ahí lo tenemos título de prueba modificado si hago click el contenido también es contenido de prueba también modificado y ya para finalizar qué método nos queda el delete eso mismo es utilizar otro verbo y utilizar también autenticación nada más en nuestra tabla de rutas el delete de la pyrrest es el método interno destroy cuando cliquen este botón se llamará a ese método interno y ese método interno hará una llamada de delete a la pyrrest del grupo local vale pues simplemente creo el nuevo método perdón el nuevo cliente google autenticado veis que no tengo que pasar ningún parámetro porque es un método un método de destrucción lo único que tengo que hacer en la llamada pues pasarle el id que quiero borrar quiero mi cliente autenticado le digo la urle de ese post en concreto que quiero borrar y hasta ahí y si la respuesta es un 200 pues me voy a redirigir al listado inicial de post pues vamos a comprobar si funciona todo ok vamos a hacer click and delete y lo hizo hizo la llamada la pyrrest y como le devolvió un 200 hizo la redirección al listado y está este listado actualmente como lo teníamos al inicio de la instalación de work una vez que creamos esos 10 post ficticios vale bueno ya para finalizar simplemente volver a ver lo que ya vimos varias veces esta es la esquema pero es esta es la esquema como funciona una aplicación la Gravel enganchada con una pyrrest de WordPress hago una petición desde mi navegador esa petición ataca una tabla de rutas que llama a un método de un controlador determinado ese controlador ataca la información en la api la consulta la crea o la actualiza o la borra y a su vez pues me devuelve una vista con información o me redirige otra página distinta de elementos no vimos ningún tema porque tampoco tiene mayor interés de control de errores ese tipo de historias pero tenia en cuenta que tenéis que utilizar tenia una diapo la debí borrar para tener más información hay tres fuentes de información dos fuentes reales de información una es el handbook de la pyrrest ahí tenéis todo hay dos libros de calebans no se si lo conocéis es un programador americano bastante conocido en el mundo PHP no solo de WordPress pero también hace temas en WordPress tiene dos libros de la pyrrest de WordPress los encontráis en el NEMPAD pero son de pago pero los tiene SIGRAWN en su web como el Descarga gratuita son dos pdf que los tiene gratuitos para pedir el correo vuestro correo electrónico lo metéis y tenéis que hacerlo dos veces recebís el enlace como esos libros son bastante interesantes como tenemos un momento los voy a enseñar aquí uno es este bueno, los tengo abiertos de aquí de hecho es bastante bien a contar pero atacándolo desde otro punto de vista lo que os acabo de contar hoy aquí no utiliza el método de autenticación que utiliza JWT yo recomendaría este este libro es previo a la incorporación en el core de todo lo que os acabo de contar de autenticación yo sería el método que utilizaría directamente y después tiene este DESTENDING que este está pensado para si tenéis que hacer desarrollos es decir, si vosotros tenéis son desarrolladores de un plugin y tenéis que incorporar una parte de RESAPI sería el que os recomendaría como fuente de información para poder saber por lo menos de donde partir porque muchas veces estamos bastante perdidos cuando queremos arrancar todo este tipo de historias y la otra fuente que ya os digo el handbook de la RESAPI y nada como os habéis comentado en jesuamiro.com tenéis STPDF y ahí me tenéis la forma de contactarme por Twitter o por correo eletrónico si necesitáis contactar conmigo por lo que sea ahora quedo ya a vuestra disposición para las preguntas que tengáis fue un poco denso todo esto porque se ve código y código que a lo mejor en la labela hay poca gente que haya trabajado aquí pero bueno traté de ser lo más de tener una vista muy por encima pero que sepáis como poder atacar a la PIRRES y empezar a trabajar con la PIRRES porque tenemos ya un poco de tiempo así que podemos ver cualquier cosa que os apetezca en particular nos conté tus preguntas, lo que sea os quedo todo claro, no os habéis entrado de nada gracias tú trabajas en la labela entonces tenéis ese punto de vista global