{"id":231208,"date":"2022-12-24T11:58:00","date_gmt":"2022-12-24T08:58:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231208"},"modified":"2022-12-07T10:57:21","modified_gmt":"2022-12-07T07:57:21","slug":"estructuracion-de-la-funcionalidad-de-la-api","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/estructuracion-de-la-funcionalidad-de-la-api\/","title":{"rendered":"Estructuraci\u00f3n de la funcionalidad de la API"},"content":{"rendered":"\n<p>No tengo mucha experiencia cuando se trata de crear API. He trabajado bastante en lo que respecta a la integraci\u00f3n de WordPress con API de terceros, pero he dedicado muy poco tiempo a trabajar en la creaci\u00f3n de un sistema que tenga su API con la que otros sistemas puedan interactuar.<\/p>\n<p>En lo que respecta a esto \u00faltimo, en realidad estoy en medio de hacerlo (y estoy aprendiendo mucho). La esencia del proyecto es que hay una aplicaci\u00f3n de iOS que interact\u00faa con WordPress a trav\u00e9s <a href=\"https:\/\/developer.wordpress.org\/rest-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">de la API REST<\/a> de forma bidireccional.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160154-61e7069145e53.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160154-61e7069145e53.png\" alt=\"Estructuraci\u00f3n de la funcionalidad de la API\" ><\/a><\/p>\n<p>Estoy ansioso por compartir m\u00e1s al respecto, pero necesito hacerlo cuando el proyecto est\u00e9 m\u00e1s avanzado.<\/p>\n<p>Pero cuando se trata de trabajar con API de terceros y luego crear componentes de un proyecto de WordPress que interact\u00faen con ellos, dos de las cosas que siempre encuentro \u00fatiles son:<\/p>\n<ul>\n<li><a href=\"http:\/\/docs.guzzlephp.org\/en\/stable\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">utilizando una biblioteca adecuada<\/a> ,<\/li>\n<li>diagramando el sistema,<\/li>\n<li>separando la funcionalidad en partes.<\/li>\n<\/ul>\n<p>Y los \u00faltimos dos puntos anteriores son los que busco cubrir en esta publicaci\u00f3n.<\/p>\n<h2>Estructuraci\u00f3n de la funcionalidad de la API<\/h2>\n<p>No hay c\u00f3digo involucrado en esta publicaci\u00f3n, pero tal vez sea una gu\u00eda sobre c\u00f3mo puede avanzar en su trabajo al estructurar la funcionalidad de la API o hacer algo similar por su cuenta.<\/p>\n<h3>Bibliotecas de terceros<\/h3>\n<p>Menciono esto solo porque creo que es valioso reutilizar soluciones probadas y verdaderas que han sido probadas (y, por lo tanto, utilizadas) en todos los \u00e1mbitos en una variedad de proyectos.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160154-61e706951696d.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160154-61e706951696d.png\" alt=\"Estructuraci\u00f3n de la funcionalidad de la API\" ><\/a><\/p>\n<p>Guzzle es mi biblioteca preferida. S\u00ed, WordPress tiene funciones integradas para comunicarse con otras URL, pero hay m\u00e1s cosas que puede hacer con Guzzle (especialmente en lo que se refiere a los componentes de la solicitud) que con WordPress.<\/p>\n<p>De acuerdo, esta es mi opini\u00f3n, pero disfruto trabajando con ella. <a href=\"http:\/\/docs.guzzlephp.org\/en\/stable\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Y la documentaci\u00f3n es s\u00f3lida<\/a>.<\/p>\n<h3>Diagramaci\u00f3n del sistema<\/h3>\n<p>Cuando trabaje con la integraci\u00f3n con API de terceros durante el tiempo suficiente, se acostumbrar\u00e1 al proceso de configuraci\u00f3n del funcionamiento del sistema. Por lo general, es algo como esto:<\/p>\n<ol>\n<li>crear un cliente API para conectarse a la API,<\/li>\n<li>configurar las funciones necesarias para realizar las solicitudes que necesites,<\/li>\n<li>analizar la respuesta,<\/li>\n<li>devolverlo al objeto o funci\u00f3n original que invoc\u00f3 la solicitud.<\/li>\n<\/ol>\n<p>Esto es un poco simplificado (despu\u00e9s de todo, crear el cliente API puede ser una tarea en s\u00ed misma), pero todos los puntos siguen siendo los mismos (y puede que no sean una mala serie \ud83e\udd14).<\/p>\n<p>De todos modos, por encima de todo, nunca est\u00e1 de m\u00e1s diagramar el sistema. Esto es algo que todav\u00eda hago porque me ayuda, en cierto sentido, a articular lo que estoy construyendo y ver si hay brechas en el flujo de control a trav\u00e9s de la aplicaci\u00f3n.<\/p>\n<p>He aqu\u00ed por qu\u00e9, si no por otra raz\u00f3n, esto es importante: articular lo que va a hacer lo ayuda a comprender lo que est\u00e1 haciendo y, a menudo, expone lagunas en su pensamiento que da por sentado.<\/p>\n<p>Entonces, cuando se trata de dise\u00f1ar un sistema, no asuma que lo tiene todo resuelto.<\/p>\n<h3>Separando la funcionalidad<\/h3>\n<p>Si ha le\u00eddo este blog durante alg\u00fan tiempo, entonces sabe que soy fan\u00e1tico de seguir todas las ideas de desarrollo de &quot;separaci\u00f3n de preocupaciones&quot;.<\/p>\n<p>Esto es cierto por m\u00faltiples razones, la menor de las cuales no es:<\/p>\n<ul>\n<li>poder realizar pruebas unitarias de un cliente API de forma aislada,<\/li>\n<li>manteniendo el c\u00f3digo de comunicaci\u00f3n con el front-end y el back-end independientes.<\/li>\n<\/ul>\n<p>Cuando tiene una clase dedicada a ejecutar la l\u00f3gica empresarial en los valores, puede descargar gran parte del manejo de errores en la clase intermedia.<\/p>\n<p>Esto significa que la clase central responsable de la mayor parte de la l\u00f3gica comercial debe tener exactamente lo que necesita para hacer su trabajo. Esto no significa que no se deba realizar una verificaci\u00f3n de errores (divisi\u00f3n por cero o algo as\u00ed, \u00bfsabes?), Pero significa que los datos se pueden verificar incluso antes de que lleguen a la clase principal a trav\u00e9s de la clase intermedia.<\/p>\n<p>Y no solo puede verificar si falta informaci\u00f3n, sino que tambi\u00e9n puede informar esos errores al front-end.<\/p>\n<h2>Tres puntos para recordar<\/h2>\n<p>Si est\u00e1 creando un sistema que depende de Ajax en WordPress, el objetivo de todo esto es triple:<\/p>\n<ol>\n<li>diagrama el sistema que est\u00e1s creando,<\/li>\n<li>crear una clase intersticial para manejar cualquier informaci\u00f3n faltante y reportar los errores,<\/li>\n<li>solo env\u00ede la informaci\u00f3n completa a la clase comercial central despu\u00e9s de que se haya verificado toda la informaci\u00f3n.<\/li>\n<\/ol>\n<p>Una vez que haya hecho eso, el objetivo ser\u00eda que la clase empresarial principal devuelva los valores solicitados sin errores, ya que se habr\u00e1n capturado antes incluso de alcanzarlos.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una gu\u00eda sobre c\u00f3mo puede avanzar en su trabajo estructurando la funcionalidad de la API o haciendo algo similar por su cuenta.<\/p>\n","protected":false},"author":1,"featured_media":224405,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,716,840,861],"tags":[1172],"class_list":["post-231208","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=231208"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231208\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/224405"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=231208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=231208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=231208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}