Quan estem utilitzant un ordinador, una tauleta o un telèfon mòbil, quins tipus d’aplicacions o programes podem estar utilitzant? Bàsicament distingim dos grans grups:
Aplicacions sense connexió a Internet. Este tipus d’aplicacions no necessiten cap connexió a Internet o a una xarxa local d’ordinadors per a funcionar. Solen dir-se aplicacions d’escriptori, i podem trobar exemples molt variats: un processador de textos, un lector de llibres electrònics, un reproductor de música o vídeo, i fins i tot videojocs que tinguem instal·lats.
Aplicacions amb connexió a Internet. Estes aplicacions sí que necessiten connexió, ja siga a Internet o a una xarxa local. Dins d’este grup, trobem diversos subtipus:
Podem trobar diverses definicions d’aplicació web buscant en Internet. Una de les més habituals fa referència a aplicacions que es carreguen o executen des d’un navegador web, accedint a un servidor. Estes aplicacions interactuen amb el servidor per a processar dades i presentar informació a l’usuari a través del navegador.
No obstant això, l’avanç experimentat en este sector durant els últims anys ha ampliat este concepte. Així, una aplicació web seria aquella realitzada a partir de llenguatges i tecnologies de desenvolupament web, com ara HTML, CSS, JavaScript, PHP, entre altres. Estes aplicacions poden executar-se en un navegador convencional o mitjançant un motor de navegador embegut en un altre sistema, com el webview d’Android o iOS.
D’esta manera, a més de les aplicacions web “tradicionals”, també tindrien cabuda en esta definició les anomenades aplicacions híbrides (desenvolupades amb tecnologies web però exportades a format natiu per a diversos dispositius), i aplicacions d’escriptori que empren tecnologies web, com el framework Electron de JavaScript. Un exemple d’estes aplicacions és Visual Studio Code, que aprofita els avantatges de les tecnologies web per a oferir experiències d’usuari avançades i multiplataforma.
La web és una plataforma global que proporciona accés a una gran quantitat de recursos com a documents, videojocs, xarxes socials, fòrums, entre altres. Es va popularitzar a principis dels anys 90 gràcies a aplicacions com el correu electrònic i els xats. Amb l’arribada de la web 2.0, van sorgir noves aplicacions que la van potenciar encara més, com els blogs o les xarxes socials. Hui dia, és comú veure vídeos o pel·lícules en Internet, alguna cosa que fa uns anys era impensable.
En una aplicació web podem distingir els següents tres elements principals:
Com hem comentat, les aplicacions web funcionen sota una arquitectura client-servidor, que distribuïx les tasques entre els servidors (proveïdors de recursos i servicis) i els clients (sol·licitants d’estos recursos i servicis).
Els passos típics en la comunicació client-servidor són els següents:
En molts casos, l’arquitectura del servidor és multicapa o multinivell. Això significa que podem tindre diferents aplicacions en diferents equips (o en el mateix) que oferixen recursos o servicis. Per exemple, un servidor de bases de dades pot estar en una màquina, un servidor web en una altra (o en la mateixa que el servidor de bases de dades), i un servidor de correu electrònic en una altra màquina. D’esta manera, es distribuïxen els processos i el treball, i fins i tot es podrien configurar opcions de seguretat i rendiment separades per a cada servidor.
Exemple: arquitectura de dos o tres nivells
Considerem una petició d’un client per a obtindre un llistat de notícies emmagatzemades en una base de dades. Este procés pot ser representat amb un diagrama de seqüència com seguix:
En una arquitectura de tres nivells, el servidor web i el servidor de bases de dades poden estar en la mateixa màquina o en màquines separades, cadascuna amb el seu maquinari i control d’accés específics. Esta configuració és comuna en aplicacions web, ja que permeten una millor gestió i seguretat de les dades.
En una arquitectura de dos nivells, el servidor web també actua com a servidor de bases de dades, responent directament a les peticions del client sense consultar a altres servidors. Esta configuració és menys flexible i segura, i pot oferir un rendiment inferior en sistemes molt congestionats.
Hem vist l’arquitectura d’una aplicació web i com els elements del front-end i el back-end interactuen mitjançant la comunicació client-servidor. En este apartat veurem com es localitzen i accedixen a estes aplicacions web en Internet. Ací és on entren en joc els conceptes de dominis i URLs.
Hostings y noms de domini
El servidor, que s’encarrega de rebre peticions de tots els clients que es connecten a ell i enviar-los la informació que sol·liciten, necessita estar disponible des de qualsevol lloc en Internet perquè els usuaris puguen connectar-se a ell.
Per tant, en primer lloc, hem de buscar un servidor en Internet en el qual allotjar el nostre lloc web. Això pot fer-se de diverses formes:
A més d’un espai d’allotjament, és necessari adquirir un nom de domini perquè els usuaris puguen recordar i utilitzar per a identificar la nostra web de manera única en Internet. Este domini es vincula a l’adreça IP del servidor, permetent que les sol·licituds del client arriben al lloc correcte.
Per exemple, quan escrivim l’adreça www.google.es, un sistema conegut com DNS (Sistema de Noms de Domini) traduïx este nom de domini a l’adreça IP del servidor on està allotjada l’aplicació de Google en espanyol. Este procés, anomenat resolució de DNS, és crucial per al funcionament de les aplicacions web, ja que facilita la localització de recursos en la xarxa global.
El nom de domini s’adquirix a través del registre de domini, un procés gestionat per empreses autoritzades per la ICANN (Internet Corporation for Assigned Names and Numbers). Per a registrar un domini, s’ha de contactar amb una empresa registradora, comprovar que el domini desitjat està disponible, i seguir el procés de registre.
URLs
Hem vist que, en l’esquema de funcionament d’una aplicació web, el client sol·licita recursos al servidor. La forma en què els sol·licita és mitjançant URLs. Una URL (Uniform Resource Locator) és una seqüència de caràcters que segueix un estàndard i que permet denominar recursos dins d’Internet perquè puguen ser localitzats.
Per exemple, quan escrivim en un navegador una adreça com http://www.miweb.com/paginas/pagina.html, estem introduint una URL per a localitzar un recurs (en aquest cas, una pàgina HTML).
Una URL es compon de:
protocol://subdomini.domini.com/carpeta/pagina?param=valor
Exercici 1:
Hem vist que la ICANN autoritza diverses empreses per a gestionar el registre de noms de domini en Internet. Estes empreses, conegudes com a agents registradors de domini, oferixen diferents plans de pagament per a este servici. Cerca en Internet una llista d’agents registradors de domini oficials per a Espanya i consulta els preus que tenen alguns d’ells.
Perquè els clients i servidors puguen comunicar-se, és necessari establir un protocol de comunicació. Un protocol definix una sèrie de regles que especifiquen quin tipus de missatges s’intercanviaran, en quina orde i quin contingut tindrà cada tipus de missatge, assegurant que tots dos extrems de la comunicació (client i servidor) puguen entendre’s.
Totes les comunicacions en una xarxa (o en Internet) es basen en el protocol TCP/IP per a funcionar. Este protocol està basat en dos parts:
Sobre la base de TCP/IP, s’establixen diversos protocols específics segons el tipus d’aplicació que es vaja a utilitzar (web, correu electrònic, pujada d’arxius, etc). Per a les aplicacions web, els protocols de comunicació més utilitzats són:
Normalment, els navegadors web canvien automàticament del protocol HTTP a HTTPS en connectar amb pàgines que necessiten ser més segures (login, dades de pagament, etc.). Este canvi pot observar-se en la barra d’adreces del navegador, on es mostrarà el protocol https o la icona d’un cadenat. No obstant això, és necessari configurar el servidor web per a acceptar comunicacions HTTPS quan siga necessari.
Altres protocols, encara que menys utilitzats en aplicacions web, són essencials per a altres aplicacions en Internet. Per exemple, per a l’enviament i recepció de correu electrònic s’empren els protocols SMTP i POP3/IMAP respectivament. Per a transferir arxius a un servidor remot, es pot usar el protocol FTP. Este últim protocol és especialment útil durant el desenvolupament d’aplicacions web per a pujar actualitzacions al servidor.
El protocol fonamental per a les aplicacions web és HTTP (o la seua versió segura, HTTPS). En tots dos casos, es tracta d’un protocol per a aplicacions client-servidor, on les dades que s’envien l’un i l’altre tenen un format determinat.
Peticions HTTP
D’una banda, estan les dades que el client envia al servidor, i que es denominen peticions (en anglés, requests). Estes peticions es componen, a grans trets, de:
Totes estes dades, a baix nivell, s’encapsulen en paquets i es fragmenten d’acord amb el protocol TCP per a ser enviats al servidor.
Respostes HTTP
Per part seua, el servidor, quan rep una petició d’un client, emet una resposta (en anglés, response) amb la informació sol·licitada, o amb algun codi d’error en cas que haguera succeït algun. Les respostes es componen d’estos elements:
Monitoratge amb Google Chrome
Podem usar el navegador Google Chrome per a comprovar el que client (navegador) i servidor s’envien en un procés HTTP. Per a això, anem al menú d’Eines per a desenvolupadors, i més concretament a la secció Network. Des d’ací, accedim a una web coneguda (per exemple, ceice.gva.es), i podem comprovar la informació enviada i rebuda:
Exercici 2:
Utilitza Google Chrome (opció de Eines per a desenvolupadors, pestanya Network) per a veure l’esquema de petició i resposta HTTP cap a alguna web coneguda, com per exemple stackoverflow.com. Identifica el codi d’estat, les capçaleres de resposta (tracta d’identificar algunes d’elles) i el contingut.
En les comunicacions en xarxes TCP/IP, quan un equip envia un paquet de dades a un altre, és necessari identificar tant l’origen com la destinació. Les aplicacions que inicien la transmissió han d’incorporar valors obligatoris com ara: adreça MAC d’origen i de destinació, adreça IP d’origen i de destinació i port d’origen i de destinació. Estos camps sempre han de tindre un valor assignat. Això significa que, quan es vol visitar una pàgina web que està allotjada en un equip (per exemple, l’equip amb el nom www.google.es), el client ha de saber quina és l’adreça IP de destinació per a incorporar-la en el paquet.
De fet, quan s’obri un navegador web és possible accedir a un recurs tant pel seu nom de domini com per la seua adreça IP. Seguint amb l’exemple anterior, si accedim a una finestra de terminal i executem el comando ping www.google.es, obtindrem en la primera línia la seua adreça IP. Si es col·loca eixa mateixa adreça IP en un navegador web, es pot comprovar que retorna la mateixa pàgina web d’inici. No obstant això, com a usuaris, ens resulta més fàcil dirigir-nos a un equip (host, servidor web, servidor de correu, etc.) utilitzant el seu nom de domini que recordar la seua adreça IP corresponent.
El DNS (Domain Name System) o Sistema de Noms de Domini és l’encarregat de proporcionar un mecanisme eficaç per a la traducció d’adreces IP de recursos de xarxa a noms fàcilment llegibles i memoritzables per les persones, i viceversa. A esta acció se la coneix com a resolució DNS. Per a això, utilitza una base de dades distribuïda i jeràrquica que associa adreces IP de hosts, servicis o qualsevol recurs connectat a internet o xarxa privada amb informació de divers tipus.
El DNS suporta tant IPv4 com IPv6, i la informació s’emmagatzema en forma de registres de recursos, en anglés Resource Records (RR), de diferents tipus, els quals poden emmagatzemar adreces IP o un altre tipus d’informació. Esta informació s’agrupa en zones, que corresponen a un espai de noms o domini concrets i que són mantingudes pel servidor DNS autoritativo d’esta. A continuació, aprofundirem un poc més en estos i altres conceptes.
El DNS s’estructura en tres components principals: espai de noms de domini, servidors de noms i *resolvers.
Espai de noms de domini
L’espai de noms de domini és una estructura jeràrquica d’arbre invertit on cada node conté registres de recursos (RR) que proporcionen informació sobre el component maquinari i programari que recolzen este domini, com per exemple, els hosts, els servidors de noms, els servidors web, els servidors de correu, etc.
Del node arrel, situat en el nivell més alt, partixen les branques que conformen les zones. Estes, al seu torn, poden contindre un o més nodes o dominis que al seu torn poden dividir-se en subdominis segons es baixa en la jerarquia.
És important no confondre els conceptes de zona i domini. Un domini es dividix en subdominis per a facilitar la seua administració, i cada part administrada per un o més servidors *DNS és una zona. El domini és l’arbre de l’espai de noms i la zona és la part de l’arbre administrada per un servidor de noms de domini concret.
En la figura anterior hi ha tants dominis com requadres de lletres agrupats en 4 zones delimitades per les línies discontínues. El nom de domini corresponent a cada zona (es nomenen segons el seu node superior) és A, B.A, C.A, I.C.A. Cadascuna d’aquestes quatre zones tindrà un o més servidors DNS per a gestionar-la.
Servidors de noms
Els servidors de noms són servidors encarregats de mantindre i proporcionar informació de l’espai de noms o dominis.
Amb esta organització de servidors de noms, i la seua intercomunicació, s’aconseguix la distribució i redundància de l’espai de dominis.
Resolvers
Un resolver és una rutina del sistema operatiu que funciona com a intermediària entre les aplicacions, el sistema operatiu i els servidors DNS. Quan una aplicació necessita una resolució, ja siga d’un nom o d’una adreça IP, crida a esta rutina retornant la informació desitjada de manera compatible perquè el host l’entenga.
La principal funció d’un servidor DNS és respondre a consultes de clients o d’altres servidors DNS. Existixen dos tipus principals de consultes:
Per tant, les consultes recursives són generalment generades pels clients DNS, mentres que les consultes iteratives són creades pels servidors DNS en consultar a altres servidors.
En termes generals, el procés que se seguix en una resolució DNS és el següent.
Vegem un exemple concret de resolució de noms per a comprendre millor el procés. Suposem que un client necessita localitzar l’equip www.educacion.gob.es i envia una petició al seu servidor DNS. Assumim també que el seu servidor no té informació sobre eixe domini. Així, observarem com es duu a terme la resolució completa
Este procés consumix bastant amplada de banda, per la qual cosa és recomanable implementar una solució DNS interna amb caché, especialment en xarxes amb alt trànsit cap a l’exterior, com a col·legis, universitats, biblioteques o grans empreses. Això permet obtindre temps de resposta més ràpids i una millor experiència de navegació web.
Eina DIG
DIG (Domain Information Gopher) és una eina de línia de comandes que realitza cerques en els registres DNS, a través dels noms de servidors, i mostra el resultat. Es pot executar tant en Linux com en Windows encara que, en aquest últim, és possible que siga necessària la seua instal·lació prèvia.
Vegem un exemple de com funciona amb la comanda dig www.gva.es
:
Explicació de l’eixida:
Si s’executa DIG especificant l’opció +trace, es mostra una traça dels servidors pels quals passa la consulta fins a arribar al servidor autoritatiu, permetent veure la llista completa de nodes i passos de resolució d’un nom. Això és molt útil per a entendre com funciona el sistema de noms de domini.
Després de revisar els tipus d’aplicacions web, l’arquitectura bàsica, els protocols més comuns i el paper del *DNS, arribem a un component essencial en el desenvolupament d’aplicacions web robustes i eficients: els patrons de disseny.
Un patró de disseny o arquitectura programari comprén un conjunt de pautes a seguir, elements a desenvolupar, jerarquies i ordre que doten a una aplicació d’una estructura preestablida, que la fa més propícia per a funcionar com deu. Els seus principals objectius són, d’una banda, estandarditzar la forma en què es desenvolupen les aplicacions, i per un altre, elaborar elements o components reutilitzables entre diverses aplicacions, en ajustar-se tots a un mateix patró.
En l’àmbit de les aplicacions web, existeixen patrons de disseny específics que ens guien a l’hora d’estructurar, dissenyar i programar aquestes aplicacions. Un dels més utilitzats (o potser el més utilitzat) és el patró MVC, que comentarem a continuació, però també han sorgit uns altres (molts a partir d’aquest), que han volgut fer un volt de rosca més, o adaptar-se a les necessitats d’aplicacions web més específiques o concretes. Veurem també alguns d’aquests patrons en aquest apartat.
MVC són les sigles de Model-Vista-Controlador (o en anglés, Model-View-Controller), i és, com déiem abans, el patró per excel·lència ara mateix en el món de les aplicacions web, i fins i tot moltes aplicacions d’escriptori.
Com el seu nom indica, aquest patró es basa a dividir el disseny d’una aplicació web en tres components fonamentals:
És un patró de disseny molt concís i ben estructurat, la qual cosa li ha valgut la fama que té hui dia. Entre els seus molts avantatges, permet aïllar el codi dels tres elements involucrats (vista, model i controlador), de manera que el treball és molt més modular i divisible, podent encarregar-se de les vistes, per exemple, un dissenyador web que no tinga molta idea de programació en el servidor, i del controlador un programador PHP que no tinga moltes nocions d’HTML.
En forma d’esquema, podríem representar-ho així:
Com a alternatives al patró MVC, i arran d’aquest mateix patró, van sorgir uns altres una mica més específics. Quasi tots ells tenen com a base la part del model (és a dir, l’accés i gestió de les dades o informació de l’aplicació) i la part de la vista (és a dir, la presentació a l’usuari). Així, podríem dir que l’únic punt “discordant” seria el controlador, que en altres patrons s’ha substituït per altres elements. De fet, al conjunt de patrons que segueixen aquesta filosofia (és a dir, centrar-se en la vista i el model, i afegir alguna cosa més), se’ls sol cridar en general MVW (en anglés, Movel-View-Whatever, en espanyol, Model-Vista-Qualsevol cosa). La finalitat d’això és, en alguns casos, descompondre el treball realitzat pels controladors en diversos submòduls, i en altres casos, prescindir directament del controlador. Vegem alguns dels patrons més populars.
El patró MVVM
El patró MVVM, com recullen les seues sigles, se centra exclusivament en els components del model i de la vista (Model-Vista-Vista-Model), i prescindeix del controlador. D’aquesta manera, l’usuari interactua directament amb la vista, i les accions o canvis que introduïsca en ella afecten directament el model, i viceversa (els canvis en el model es reflecteixen de manera automàtica en la vista).
Aquest patró està cobrant especial rellevància en les anomenades SPA (Single Page Applications), aplicacions web amb una sola pàgina que recarrega parcialment els seus continguts davant les accions de l’usuari. En aquests casos, no és necessari un controlador que diga quina vista carregar, perquè només hi ha una vista principal (que pot estar composta per subvistas), i si l’estructura és prou senzilla, vista i model poden estar intercomunicats sense intermediaris. Alguns frameworks sorgits últimament han donat encara més pes a aquest patró, com és el cas d’Angular.
El patró MOVE
El patró MOVE substitueix el controlador del patró MVC per dos elements. Un que denomina operacions (que seria l’O de les seues sigles), i que englobaria tot el conjunt d’accions que l’aplicació és capaç de realitzar, i un altre que serien els esdeveniments (que seria l’E de les seues sigles), i que representarien tots aquells successos que desencadenen que s’execute una operació determinada. Així, les accions dels usuaris són esdeveniments sobre l’aplicació que provoquen que s’executen determinades operacions. Aquestes operacions, al seu torn, poden accedir al model per a obtindre o actualitzar informació, i poden generar o cridar a una vista que mostrar a l’usuari com a resposta. Es divideix així la tasca dels controladors entre els esdeveniments i les operacions.
El patró MVP
El patró MVP substitueix el controlador (o controladors) del MVC pel que es denominen presentadors. Aquests presentadors són una espècie d’intermediaris entre el model i la vista, de manera que cada vista té el seu propi, i actua després de la vista per a comunicar-se amb el model, obtindre les dades, i carregar-los en ella per a mostrar-los a l’usuari. Es té així encapsulat amb cada vista el seu presentador, i l’aplicació pot considerar-se un conjunt de parells vista-presentador, que s’encarreguen de comunicar-se amb el model, que queda per darrere.
Per a implantar una aplicació web i que els clients puguen utilitzar-la, necessitem comptar amb una sèrie recursos maquinari i programari.
En parlar d’aplicacions web, és important determinar el llenguatge o llenguatges de programació en què es desenvolupen. En l’àmbit de les aplicacions web, distingim dos tipus de llenguatges:
Hem vist a grans trets el maquinari i programari que necessitarem tant en els clients com en el servidor. Quin programari concret utilitzarem en aquest curs?
En el cas del navegador per al client, existeixen diverses opcions depenent del sistema operatiu del client: Mozilla Firefox, Google Chrome, Internet Explorer / Edge (només per a Windows), Safari (només en Windows i Macintosh), Opera… Possiblement els dos primers (Chrome i Firefox) són les millors opcions.
En el cas del servidor web, dependrà del tipus de llenguatge servidor que anem a utilitzar per a fer la nostra pàgina, i del sistema operatiu del servidor. En el nostre cas, emprarem llenguatge PHP, i també JavaScript amb el framework Node.js. Per al primer, emprarem el servidor Apatxe, que instal·larem a través d’algun sistema XAMPP o similar, que integra Apatxe amb un servidor MySQL/MariaDB i el llenguatge PHP preinstal·lats. Per al segon, instal·larem el framework Node.js per a construir amb ell el servidor, i alguns mòduls addicionals per a facilitar la tasca del desenvolupament de l’aplicació en si, com veurem en unitats posteriors.
Si emprarem llenguatge Java (JSP, servlets, etc.), podem instal·lar algun servidor senzill i gratuït com Tomcat, o servidors d’aplicacions més pesats i complexos com Glassfish. També funcionen en tota mena de sistemes Si optem per tecnologia .NET (ASP.NET), podem utilitzar IIS (Internet Information Services), un servidor web disponible per a Windows, ja que aquesta tecnologia només funciona en sistemes operatius Windows.
Per al servidor de base de dades, podem emprar diferents alternatives, com MySQL/MariaDB, PostreSQL, Oracle, o SQL Server. També podem optar per sistemes No-SQL, com MongoDB. Totes ofereixen versions gratuïtes (algunes d’elles amb recursos limitats per a ús personal) i comercials (més potents). MySQL, PostgreSQL i Oracle funcionen en diversos sistemes, però SQL Server és propietat de Microsoft, i funciona en sistemes Windows. En el nostre cas, optarem per un servidor MySQL/MariaDB per a la comunicació amb PHP i Apatxe (a través de l’esmentat XAMPP), i per un servidor MongoDB per a les aplicacions que fem amb Node.js.
IDEs
Per al desenvolupament d’aplicacions és necessari comptar amb un bon entorn de desenvolupament o IDE amb el qual editar el codi, depurar i provar les aplicacions.
Existeixen multitud d’opcions disponibles, la majoria d’elles gratuïtes. Des d’entorns de propòsit general vàlids per a molts llenguatges (Atom, Sublim, Visual Studio Code…) a uns altres més específics i orientats a algun llenguatge en concret, com PhpStorm.
En el nostre cas, optarem per Visual Studio Code, per la seua versatilitat i popularitat creixent. Permet instal·lar multitud d’extensions per a treballar amb diferents tipus de llenguatges i frameworks, i ens permet també una fàcil integració amb PHP i Node.js.
Alguns frameworks útils
També és convenient conéixer alguns frameworks populars i realment útils per al desenvolupament d’aplicacions web. Aquests frameworks es poden classificar depenent de si s’empren per a la part del client o la del servidor. En el primer cas, podem parlar d’Angular, React, Vue i alguns altres (encara que aquests són ara com ara els més populars), però per a l’apartat que ens interessa, que són els frameworks en el costat del servidor, ens centrarem en:
A continuació s’enumeren algunes webs on consultar o descarregar els recursos indicats en aquest tema, per al desenvolupament d’aplicacions en entorn servidor.
Exercici 3:
Utilitza l’eina Google Trends per a buscar els termes de Laravel, Symfony i Node.js. Dedueix a partir de les cerques quin d’ells creus que és més popular actualment. Després, acudeix a la web de InfoJobs i busca ofertes de treball amb aquests tres frameworks, per a determinar quin és el més demandat en l’actualitat.