{"id":11369,"date":"2019-08-19T09:35:24","date_gmt":"2019-08-19T07:35:24","guid":{"rendered":"https:\/\/www.hiberus.com\/crecemos-contigo\/?p=11369"},"modified":"2024-01-17T09:24:47","modified_gmt":"2024-01-17T08:24:47","slug":"consejos-para-desarrollar-un-backend-para-app-movil","status":"publish","type":"post","link":"https:\/\/www.hiberus.com\/crecemos-contigo\/consejos-para-desarrollar-un-backend-para-app-movil\/","title":{"rendered":"Consejos para desarrollar un backend para app m\u00f3vil"},"content":{"rendered":"<p>Estamos en 2019. Eso significa que los <a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/de-una-arquitectura-tradicional-a-microservicios\/\" target=\"_blank\" rel=\"noopener noreferrer\">microservicios<\/a>, las <a href=\"https:\/\/www.hiberus.com\/mobile\" target=\"_blank\" rel=\"noopener noreferrer\">aplicaciones multiplataforma<\/a>, las SPA\u2019s, y en definitiva la creaci\u00f3n y reutilizaci\u00f3n de arquitecturas escalables, est\u00e1n muy demandadas. Quiz\u00e1s te est\u00e9s preguntando: \u00bfQu\u00e9 tiene que ver esto con una app m\u00f3vil? pues muy sencillo: si hoy en d\u00eda necesitas tener una aplicaci\u00f3n m\u00f3vil que compita en el mercado, que sea capaz de atraer p\u00fablico y generar tr\u00e1fico que despu\u00e9s se traduzca en conversiones para tu negocio, necesitas consumir y utilizar servicios externos.<\/p>\n<h2>Qu\u00e9 es un backend para app<\/h2>\n<p>Aqu\u00ed es donde entra un <strong>backend<\/strong>. Tradicionalmente un backend siempre ha estado pensando para que su desarrollo vaya de la mano con el frontend, es decir, que una vez se sirviese una web, una aplicaci\u00f3n m\u00f3vil, o cualquier otro sistema, no se tuviera que realizar peticiones constantes a sistemas externos que pudieran ralentizar la experiencia del usuario.<\/p>\n<p>Esto est\u00e1 muy bien para sistemas que s\u00f3lo tienen intenci\u00f3n de mostrar contenido est\u00e1tico (informaci\u00f3n est\u00e1tica poco o nada cambiante), pero al desarrollar una aplicaci\u00f3n avanzada con notificaciones push, recomendaciones basadas en ubicaci\u00f3n, interacciones constantes con el usuario, informaci\u00f3n actualizada y que sea capaz de reaccionar a las acciones externas; aqu\u00ed es donde entran los paradigmas modernos, el uso de API\u2019s REST y la reutilizaci\u00f3n de sistemas que puedan ofrecer datos a muy diversas aplicaciones.<\/p>\n<h2>Factores a tener en cuenta al crear el backend de tu app<\/h2>\n<p>En cualquier caso, el \u00e9xito de un backend (independientemente de qu\u00e9 aplicativo lo vaya a utilizar posteriormente) depende principalmente de su <strong>velocidad de respuesta<\/strong>, aunque habr\u00e1 que tener en cuenta otros factores para no perjudicar los principios b\u00e1sicos de seguridad, escalabilidad y estabilidad.<\/p>\n<h3>Autenticaci\u00f3n y seguridad<\/h3>\n<p>Hoy en d\u00eda se utilizan principalmente dos sistemas de autenticaci\u00f3n por lo general: <strong>un login\/registro tradicional<\/strong>, o uno que se apoya en el uso de las <strong>redes sociales<\/strong> (Google, Facebook, Twitter, etc.). Si optamos por la segunda opci\u00f3n, nos podremos apoyar en la infraestructura con la que ya cuentan estos sistemas externos, pero no tendremos el control total de lo que se est\u00e1 guardando y las modificaciones dependiendo de las necesidades del negocio pueden acabar siendo costosas. Por otra parte, optar por la primera opci\u00f3n (siempre y cuando se implemente correctamente) suele ser la forma m\u00e1s escalable a largo plazo, ya que tendremos control total sobre los datos, su arquitectura, y, por tanto, su arquitectura.<\/p>\n<p>Esto se traduce en algo muy concreto, muy usado, y muy robusto: OAuth 2.0 y un sistema de autenticaci\u00f3n basado en Json Web Tokens (JWT). Este mecanismo nos permite tener un sistema escalable (posteriormente se har\u00e1 m\u00e1s hincapi\u00e9 en esto), r\u00e1pido y seguro, pero cuidado: la informaci\u00f3n almacenada en un JWT (si no se toman medidas adicionales) se puede leer f\u00e1cilmente y, por esa raz\u00f3n, nunca hay que almacenar informaci\u00f3n sensible en ellos. Si se quisiera aumentar la seguridad de este mecanismo, quiz\u00e1s ser\u00eda una buena idea cifrarla con alg\u00fan tipo de clave que tanto backend como frontend conociesen, aunque habr\u00eda que ir rot\u00e1ndola cada cierto tiempo para evitar ataques de fuerza bruta y, por tanto, un mayor mantenimiento a futuro.<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11370\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/desarrollo-backend-app-seguridad.jpg\" alt=\"desarrollo backend app seguridad\" width=\"634\" height=\"355\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/desarrollo-backend-app-seguridad.jpg 634w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/desarrollo-backend-app-seguridad-300x168.jpg 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/desarrollo-backend-app-seguridad-360x202.jpg 360w\" sizes=\"auto, (max-width: 634px) 100vw, 634px\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3>Escalabilidad y velocidad<\/h3>\n<p>Aunque pueda parecer que estos dos conceptos no van muy de la mano, creo que, todo lo contrario, <strong>un backend que le cueste mucho tiempo responder no va a escalar correctamente<\/strong>, aunque s\u00ed que es verdad que habr\u00e1 que tomar medidas adicionales a la velocidad para conseguir una buena escalabilidad.<\/p>\n<p>Un primer paso para conseguir estos objetivos es el concepto de que el backend debe ser \u201cstateless\u201d, es decir, en cada petici\u00f3n debe incluirse la informaci\u00f3n necesaria para poder resolver dicha petici\u00f3n. El servidor no tiene que guardar ning\u00fan tipo de informaci\u00f3n necesaria para resolver peticiones consecutivas. Esto ayuda en que las peticiones se resolver\u00e1n r\u00e1pidamente y se podr\u00e1 escalar la capacidad de procesado en m\u00faltiples m\u00e1quinas sin necesidad de configuraci\u00f3n adicional.<\/p>\n<p>Otra idea interesante ser\u00eda la <strong>separaci\u00f3n de la l\u00f3gica en distintos microservicios<\/strong>. Por ejemplo: si tenemos (como ser\u00e1 habitual en una aplicaci\u00f3n m\u00f3vil) una parte encargada de registrar a un usuario para recibir notificaciones push y envi\u00e1rselas, ser\u00eda interesante separar toda esta l\u00f3gica en un microservicio (aunque por detr\u00e1s utilice servicios cloud como AWS o Firebase).<\/p>\n<p>En cualquier caso, todas estas interacciones deber\u00edan ser transparentes de cara a la aplicaci\u00f3n, es decir, una aplicaci\u00f3n no tendr\u00eda por qu\u00e9 saber cu\u00e1ntos servicios tiene un backend detr\u00e1s. Es por esto por lo que, aunque existan servicios externos, el backend deber\u00e1 actuar como un \u201cmiddleware\u201d para ellos. De esta forma cualquier tipo de modificaci\u00f3n del servicio o ampliaci\u00f3n de este, se realizar\u00e1 de forma transparente al usuario.<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11371\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/desarrollo-backen-app-escalabilidad.png\" alt=\"desarrollo backen app escalabilidad\" width=\"622\" height=\"608\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/desarrollo-backen-app-escalabilidad.png 622w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/desarrollo-backen-app-escalabilidad-300x293.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/desarrollo-backen-app-escalabilidad-360x352.png 360w\" sizes=\"auto, (max-width: 622px) 100vw, 622px\" \/><\/p>\n<h3>Estabilidad y future-proofing<\/h3>\n<p>Todos los temas mencionados previamente son muy necesarios si queremos ser capaces de atender a las peticiones de aplicaciones m\u00f3viles, webs u otras plataformas, pero \u00bfqu\u00e9 pasa cuando sufrimos alg\u00fan fallo o \u201cbug\u201d, alg\u00fan ataque o simplemente los servicios externos dejan de responder? En ese caso lo primordial es <strong>averiguar la causa del problema<\/strong>, solucionarlo y volver a poner nuestro backend en funcionamiento, pero para ello necesitamos <strong>herramientas de monitorizaci\u00f3n, integraci\u00f3n continua, despliegues autom\u00e1ticos y, sobre todo, una calidad de c\u00f3digo<\/strong> que nos har\u00e1 minimizar el riesgo de aparici\u00f3n de estas cuestiones.<\/p>\n<p>En orden de prioridad lo primero es empezar con un buen analizador de c\u00f3digo para acostumbrarnos a usar buenas pr\u00e1cticas y as\u00ed evitar la aparici\u00f3n de problemas a futuro. Para eso tenemos herramientas (conocidas como \u201clinters\u201d) tan complejas como SonarQube hasta simplemente analizadores de c\u00f3digo en tiempo real que nos aportar\u00e1n sugerencias, ejemplo: JSLint o TSLint para aplicaciones (frontend, backend, etc.) en Javascript o Typescript respectivamente.<\/p>\n<p>En cualquier caso estas herramientas necesitan de una serie de \u201creglas\u201d para ser \u00fatiles, por eso es importante fijarse en<strong> gu\u00edas y buenas pr\u00e1cticas que sean ampliamente utilizadas<\/strong>, como por ejemplo las <a href=\"https:\/\/github.com\/airbnb\/javascript\">gu\u00edas de c\u00f3digo de Airbnb para javascript<\/a> (s\u00ed, esa famosa empresa de alquileres vacacionales).<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-11372\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/guias-de-codigo-javascript-1024x653.png\" alt=\"guias de codigo javascript\" width=\"620\" height=\"395\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/guias-de-codigo-javascript-1024x653.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/guias-de-codigo-javascript-300x191.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/guias-de-codigo-javascript-768x490.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/guias-de-codigo-javascript.png 1091w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/guias-de-codigo-javascript-360x230.png 360w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Una vez tenemos claro que nuestro c\u00f3digo sigue ciertas normas establecidas, debemos ser capaces de tener un entorno controlado de despliegue, para evitar introducir cualquier fallo humano en el mismo. Para esto intervienen <strong>herramientas de CI\/CD<\/strong> como <a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/jenkins-automatizacion-tareas-aplicada-a-aplicaciones-moviles\/\" target=\"_blank\" rel=\"noopener noreferrer\">Jenkins<\/a>, las cuales se pueden acoplar r\u00e1pidamente a nuestro flujo de trabajo y realizar despliegues con un simple click.<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-11373\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/testing-codigo-1024x613.png\" alt=\"testing jenkins codigo\" width=\"620\" height=\"371\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/testing-codigo-1024x613.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/testing-codigo-300x180.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/testing-codigo-768x460.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/testing-codigo-360x216.png 360w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/testing-codigo.png 1252w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Finalmente, y no por ello menos importante, debemos <strong>monitorizar el estado del sistema<\/strong> en todo momento. Esto nos ayudar\u00e1 a descubrir fallos en la mayor brevedad posible, as\u00ed como posiblemente sus causas. Con esta finalidad en mente tenemos varias alternativas, algunas que incluso ofrecen versiones tanto gratis como de pago (dependiendo del nivel de monitorizaci\u00f3n que queramos), pero en entornos de backend Javascript destaca una principalmente: <strong>PM2<\/strong>.<\/p>\n<p>Esta herramienta nos permitir\u00e1 tener en todo momento una visi\u00f3n de los procesos que est\u00e1n ejecut\u00e1ndose, las veces que se han tenido que reiniciar (en el caso de un fallo cr\u00edtico que provoque la parada del backend, PM2 se encargar\u00e1 de volver a arrancarlo), diversos logs con los errores o las trazas ejecutadas, e incluso una opci\u00f3n muy interesante: despliegues remotos desde nuestro entorno local con una serie de opciones preconfiguradas.<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-11374\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/monitorizar-pm2-1024x487.png\" alt=\"monitorizar pm2\" width=\"620\" height=\"295\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/monitorizar-pm2-1024x487.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/monitorizar-pm2-300x143.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/monitorizar-pm2-768x366.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/monitorizar-pm2-1536x731.png 1536w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/monitorizar-pm2-360x171.png 360w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2019\/08\/monitorizar-pm2.png 1920w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>En cualquier caso, lo que est\u00e1 claro es que un backend ya sea para una aplicaci\u00f3n m\u00f3vil, una web o cualquier otra plataforma, es algo que debe ser pensado desde un principio con una buena arquitectura, debe estar pensado para escalar en diversas m\u00e1quinas (que no tienen por que estar ubicadas f\u00edsicamente en la misma localizaci\u00f3n) y tiene que estar monitorizado constantemente para solucionar los problemas que tarde o temprano van a aparecer.<\/p>\n<p>&nbsp;<\/p>\n<p><em>Si est\u00e1s interesado en crear un backend para tu app y as\u00ed poder gestionar\u00a0tu\u00a0app\u00a0y\u00a0\u00a0tu sitio web con mayor facilidad, escr\u00edbenos explic\u00e1ndonos m\u00e1s sobre tu proyecto. Nuestro equipo de\u00a0 <a href=\"https:\/\/www.hiberus.com\/mobile\" target=\"_blank\" rel=\"noopener noreferrer\">aplicaciones multiplataforma<\/a> en Hiberus Mobile estar\u00e1 encantado de ayudarte.\u00a0<\/em><\/p>\n        <div class=\"row\">\n            <div class=\"block-cta-form\" style=\"background-color: #003664;\">\n                <div class=\"content-cta-form\">\n                    <div class=\"text-cta-form\">\n                        <p class=\"title-cta-form\">\u00bfQuieres m\u00e1s informaci\u00f3n sobre nuestros servicios de desarrollo de aplicaciones m\u00f3viles?<\/p>\n                        <p>Contacta con nuestro equipo de Mobile<\/p>\n                    <\/div>\n                    <div class=\"form-fields\">\n                        \n<div class=\"wpcf7 no-js\" id=\"wpcf7-f33973-o1\" lang=\"es-ES\" dir=\"ltr\" data-wpcf7-id=\"33973\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/11369#wpcf7-f33973-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Formulario de contacto\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"33973\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.5\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"es_ES\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f33973-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/><input type=\"hidden\" name=\"_wpcf7_recaptcha_response\" value=\"\" \/>\n<\/fieldset>\n<div id=\"responsive-form\" class=\"clearfix\">\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"nombre\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Nombre *\" value=\"\" type=\"text\" name=\"nombre\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"apellido\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Apellido *\" value=\"\" type=\"text\" name=\"apellido\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"correo\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Correo corporativo *\" value=\"\" type=\"email\" name=\"correo\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"telf-contacto\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-tel wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-tel\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Tel\u00e9fono *\" value=\"\" type=\"tel\" name=\"telf-contacto\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"compania\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Compa\u00f1ia *\" value=\"\" type=\"text\" name=\"compania\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"mensaje\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Mensaje *\" name=\"mensaje\"><\/textarea><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full color-acceptance\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"politica\"><span class=\"wpcf7-form-control wpcf7-acceptance\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"politica\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">He le\u00eddo y acepto la <a href=\"https:\/\/www.hiberus.com\/politica\" target=\"_blank\"><u>Pol\u00edtica de privacidad<\/u><\/a><\/span><\/label><\/span><\/span><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full color-acceptance\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"marketing\"><span class=\"wpcf7-form-control wpcf7-acceptance optional\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"marketing\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">Me gustar\u00eda recibir comunicaciones de marketing de Hiberus y sobre sus productos, servicios y eventos.<\/span><\/label><\/span><\/span><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner\" type=\"submit\" value=\"Contacta con nosotros\" \/>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div id=\"campos_ocultos\" class=\"hidden\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new1\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new1\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new1\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new2\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new2\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new2\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new3\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new3\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new3\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new4\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new4\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new4\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new_p\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new_p\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new_p\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n<!--end responsive-form--><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n        \n","protected":false},"excerpt":{"rendered":"<p>Estamos en 2019. Eso significa que los microservicios, las aplicaciones multiplataforma, las SPA\u2019s, y en definitiva la creaci\u00f3n y reutilizaci\u00f3n de arquitecturas&#8230;<\/p>\n","protected":false},"author":95,"featured_media":11375,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_ayudawp_aiss_exclude":false,"footnotes":""},"categories":[234,7,3,237],"tags":[14,30,56],"class_list":{"0":"post-11369","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-aplicaciones-moviles","8":"category-next-tech","9":"category-negocio-electronico","10":"category-microservicios","11":"tag-aplicaciones-multiplataforma","12":"tag-desarrollo-de-aplicaciones-moviles","13":"tag-microservicios"},"acf":[],"_links":{"self":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/11369","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/users\/95"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/comments?post=11369"}],"version-history":[{"count":3,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/11369\/revisions"}],"predecessor-version":[{"id":39634,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/11369\/revisions\/39634"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/media\/11375"}],"wp:attachment":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/media?parent=11369"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/categories?post=11369"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/tags?post=11369"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}