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:
Una aplicació web és un tipus de programari que s’executa en un servidor i s’accedix a través d’un navegador web. El navegador actua com a interfície entre l’usuari i el servidor, on es processa la lògica de negoci, s’accedix a bases de dades i es genera la resposta que el navegador presenta a l’usuari.
Amb l’avanç de les tecnologies web, el concepte d’aplicació web s’ha ampliat. Actualment, es considera aplicació web a qualsevol programari desenrotllat amb tecnologies com a HTML, CSS, JavaScript, PHP, etc., que s’executa en un navegador o en un entorn que l’emula, com un WebView o un motor de navegador embegut.
WebView és un component que permet incrustar contingut web dins d’una aplicació mòbil nativa. És comú en aplicacions com Facebook o Instagram, on es carreguen pàgines externes sense obrir el navegador del sistema. Encara que el seu ús és més controlat, oferix rapidesa i cohesió dins de l’app.
Hui dia, podem identificar diversos tipus d’aplicacions web modernes segons el seu entorn d’execució i les seues capacitats:
La web és una plataforma global que permet accedir a una gran varietat de continguts i servicis: pàgines informatives, aplicacions interactives, xarxes socials, fòrums, vídeos, videojocs, etc.
Des dels seus inicis en els anys 90, amb pàgines estàtiques i correu electrònic, ha evolucionat fins a convertir-se en una plataforma complexa i dinàmica. L’anomenada Web 2.0 va introduir la participació de l’usuari (blogs, xarxes socials, wikis), i hui dia parlem fins i tot d’una Web 3.0, més centrada en la descentralització, la intel·ligència artificial i la personalització.
Una aplicació web moderna sol estar composta per tres elements principals que treballen de manera coordinada:
Les aplicacions web seguixen una arquitectura client-servidor, en la qual les tasques es repartixen entre:
Seqüència bàsica de funcionament
En moltes aplicacions web modernes, el servidor no és un únic sistema. En el seu lloc, s’organitza en una arquitectura en capes (també anomenada multi-tier), on diferents servicis o màquines s’especialitzen en funcions concretes. Això millora el rendiment, la escalabilitat i la seguretat del sistema.
Per exemple:
Exemple pràctic
Suposem que un usuari accedix a una aplicació web per a consultar notícies. Este procés pot ser representat amb un diagrama de seqüència com el següent:
En funció de com s’organitzen els elements del sistema, podem distingir dos models principals:
Arquitectura de dos nivells (2-tier), tant el servidor web com el servidor de bases de dades s’executen en la mateixa màquina. És una solució senzilla i econòmica, adequada per a projectes xicotets, entorns de desenvolupament o proves. No obstant això, presenta limitacions importants en termes de seguretat, escalabilitat i rendiment, especialment quan el nombre d’usuaris o el volum de dades creix.
Arquitectura de tres nivells (3-tier), el servidor web i el servidor de bases de dades estan separats físicament, la qual cosa permet distribuir millor la càrrega, millorar el rendiment, i augmentar la seguretat. És el model més comú en entorns empresarials i sistemes en producció.
Més enllà d’estos models clàssics, hui dia també s’empren altres arquitectures modernes, com:
La arquitectura de microservicis, on cada funcionalitat (autenticació, pagaments, busca, etc.) s’implementa com un servici independent, la qual cosa permet desplegar, escalar i mantindre cada un per separat.
La arquitectura desacoblada (frontend-backend), en la qual el frontend (interfície) i el backend (la lògica i dades) es desenvolupen i despleguen per separat, comunicant-se a través d’una API (normalment REST o GraphQL). Això permet més flexibilitat i reutilització entre plataformes (web, mòbil, etc.).
Perquè una aplicació web estiga disponible en Internet i accessible des de qualsevol navegador, és necessari tindre en compte tres elements clau:
En este apartat s’aborden els conceptes bàsics necessaris per a comprendre com es publica una aplicació web i com s’accedix a ella des de qualsevol part del món. Alguns aspectes més tècnics, com els protocols de comunicació i el sistema DNS, s’estudiaran detalladament en apartats posteriors.
El hosting és el servici que permet emmagatzemar i servir els arxius d’una aplicació web (HTML, CSS, JS, imatges, bases de dades, etc.) des d’un servidor connectat permanentment a Internet.
Existixen diferents opcions d’allotjament segons el tipus de projecte, el nivell tècnic de l’equip i els recursos disponibles:
Servidor propi: implica desplegar l’aplicació en una màquina física gestionada directament per l’empresa o l’equip de desenvolupament. Oferix control total, però requerix coneixements avançats, manteniment continu i una inversió inicial considerable.
Encara que les aplicacions web estan allotjades en servidors identificats per la seua adreça IP (per exemple, 172.217.168.78), estos números no són pràctics per a l’ús diari.
Per a facilitar l’accés, s’utilitzen noms de domini, que són adreces web llegibles i fàcils de recordar, com www.iessanvicente.com. Internament, el nom de domini està associat a la IP real del servidor on s’allotja l’aplicació. Gràcies a esta associació, el navegador pot dirigir correctament les sol·licituds sense que l’usuari conega l’adreça IP.
Per exemple, en accedir a www.google.es, el sistema traduïx eixe nom en l’adreça IP corresponent a un dels servidors de Google. Esta conversió la realitza un sistema anomenat DNS (Domain Name System), que s’explicarà en profunditat.
Per a disposar d’un domini propi, és necessari realitzar un 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 necessari:
Una vegada registrat i vinculat al servidor mitjançant el sistema DNS, el domini estarà actiu i accessible des d’Internet.
Una URL (Uniform Resource Locator) és l’adreça completa que s’usa per a localitzar un recurs específic dins d’una aplicació web. És la forma en la qual els navegadors realitzen peticions als servidors.
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 este cas, una pàgina HTML).
L’estructura general d’una URL és la següent:
protocol://subdomini.domini.com/carpeta/pagina?param=valor
Este format permet accedir de manera precisa i estructurada a qualsevol recurs dins d’una aplicació web.
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. Busca 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, han de seguir un protocol de comunicació. Un protocol definix una sèrie de regles que especifiquen quin tipus de missatges s’intercanviaran, en quina orde i com ha d’interpretar-los cada part. Això garantix que els dos extrems de la comunicació s’entenguen, fins i tot si són tecnologies distintes.
Totes les comunicacions en Internet es recolzen en la família de protocols TCP/IP, que es compon de dos elements principals:
Sobre esta base es construïxen protocols més específics, com els que usen les aplicacions web, el correu electrònic o la transferència d’arxius.
En el cas de les aplicacions web, els protocols més utilitzats són:
Encara que no s’usen directament en aplicacions web, existixen altres protocols de comunicació essencials per a servicis en Internet:
El protocol HTTP, i la seua versió segura HTTPS, són la base de la comunicació en les aplicacions web. Els dos funcionen sota un model client-servidor, on el navegador (client) realitza una petició i el servidor respon amb el contingut sol·licitat o un missatge d’error. Esta comunicació es realitza seguint un format estandarditzat, que permet que els dos extrems puguen interpretar-la correctament.
Peticions HTTP (requests)
Una petició HTTP és el missatge que el client envia al servidor per a sol·licitar un recurs. Sol estar composta per:
Internament, esta informació s’encapsula en paquets que es fragmenten i envien seguint les regles del protocol TCP.
Respostes HTTP (response)
El servidor analitza la petició i respon amb un missatge estructurat, que inclou:
Per a observar este intercanvi en temps real, es pot usar l’eina de desenvolupament de Google Chrome, en la pestanya Network, per a analitzar qualsevol comunicació entre el navegador i un servidor web. Això permet identificar codis d’estat, capçaleres i contingut transferit.
Accedix a una web coneguda (per exemple, ceice.gva.es), i comprova la informació enviada i rebuda:
Exercici 2:
Utilitza Google Chrome (opció de Ferramentes per a desenrotlladors, pestanya Network) per a veure l’esquema de petició i resposta HTTP cap a alguna web coneguda. Identifica el codi d’estat, les capçaleres de resposta (tracta d’identificar algunes d’elles) i el contingut.
Quan dos equips es comuniquen a través d’Internet, el dispositiu d’origen necessita conéixer dos elements fonamentals de la destinació: la seua adreça IP, que identifica de manera única a un equip dins de la xarxa, i el port, que indica el servici específic al qual es desitja accedir dins d’eixe equip, com pot ser una pàgina web o un servidor de correu.
Per exemple, en accedir a una pàgina com www.google.es, el navegador necessita saber quina és l’adreça IP del servidor on està allotjat el lloc, així com el port del servici web corresponent, que normalment és el port 80 per a connexions HTTP o el 443 per a HTTPS.
Les dos dades són essencials per a establir la connexió correctament. Si no es coneix l’adreça IP, les dades no poden arribar a la destinació; si no es coneix el port, el servidor no sabria quina aplicació ha de respondre a la petició.
Encara que és tècnicament possible escriure directament una adreça IP en el navegador per a accedir a un lloc web, això no és pràctic ni intuïtiu. Les adreces IP són difícils de memoritzar i, a més, poden canviar amb el temps. Per contra, els noms de domini com www.google.es són més fàcils de recordar i comprendre. No obstant això, atés que els equips de xarxa funcionen internament amb adreces IP, és necessari un sistema que realitze la traducció entre noms i adreces.
Eixe sistema és el DNS, o Sistema de Noms de Domini (Domain Name System), que s’encarrega de traduir noms de domini a adreces IP i viceversa. Este procés es denomina resolució DNS i resulta fonamental per al funcionament d’Internet.
El DNS utilitza una base de dades que presenta una estructura jeràrquica i distribuïda.
El DNS admet tant direccions IPv4 com IPv6, i emmagatzema la informació necessària en registres especials anomenats registres de recursos (Resource Rècords o RR). Estos registres poden contindre dades com a adreces IP, àlies de dominis, informació de servidors de correu, entre altres. Estos registres s’agrupen en zones, que són parts de l’espai de noms gestionades per un servidor autoritatiu responsable de mantindre i proporcionar eixa informació de forma actualitzada.
A continuació s’aprofundirà en estos elements i en el funcionament detallat del sistema DNS.
El DNS s’estructura en tres components principals: el espai de noms de domini, els servidors de noms i els resolvers.
L’espai de noms de domini és una estructura jeràrquica en forma 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. Mentres el domini fa referència al nom lògic en la jerarquia del DNS, una zona és la porció de la base de dades que administra un servidor DNS determinat. Un domini pot dividir-se en diverses zones si es distribuïx la seua gestió.
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.
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.
El resoldre és una rutina o component del sistema operatiu que actua com a intermediari entre les aplicacions de l’usuari (com un navegador) i els servidors DNS. Quan una aplicació necessita l’adreça IP corresponent a un nom de domini, el resoldre s’encarrega de gestionar eixa petició i retornar la informació en el format que el sistema puga utilitzar. Normalment, es comunica amb un servidor DNS configurat per defecte en el sistema o la xarxa.
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 cau, 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, mantenibles i eficients: els patrons de disseny.
Un patró de disseny és un conjunt de bones pràctiques, directrius estructurals i components organitzats que proporcionen una solució reutilitzable a problemes comuns en el desenvolupament de programari. El seu objectiu principal és estandarditzar la forma en què es dissenyen i construïxen les aplicacions, facilitant la comprensió del sistema, la col·laboració entre desenrotlladors i la reutilització de components. A més, permeten generar estructures modulars, predictibles i escalables, fent que el codi siga més fàcil de mantindre i estendre.
En l’àmbit de les aplicacions web, existixen diversos patrons de disseny que ens orienten a l’hora d’organitzar el codi, separar responsabilitats i estructurar els distints components. Un dels més utilitzats (i probablement el més conegut) és el patró MVC, que veurem a continuació. A partir d’ell han sorgit altres enfocaments, dissenyats per a adaptar-se a necessitats concretes, entorns moderns o filosofies distintes d’interacció. En este apartat revisarem MVC i algunes de les seues variants més rellevants.
MVC són les sigles de Model-Vista-Controlador (Model-View-Controller), i representa un dels patrons més utilitzats tant en aplicacions web com en moltes aplicacions d’escriptori.
Este patró es basa en la divisió del sistema en tres components fonamentals, cada un amb una responsabilitat clarament definida:
Una dels principals avantatges d’este patró és que separa clarament responsabilitats, la qual cosa permet dividir el treball entre diferents perfils professionals. Per exemple, un dissenyador pot centrar-se en les vistes sense necessitat de conéixer la lògica del model o del servidor, mentres que un desenrotllador *backend pot treballar en el controlador i el model sense preocupar-se del disseny visual.
En forma d’esquema, podríem representar-ho així:
A partir de la popularitat i estructura de MVC han sorgit altres patrons que ho adapten o reinterpreten per a entorns específics. En la majoria d’estos patrons es manté el model de dades i la vista com a components clau, i es modifica o reemplaça el paper del controlador. Esta família de patrons es coneix genèricament com MVW, (Model-Vista-Qualsevol cosa, o Model-View-Whatever), la qual cosa reflectix la flexibilitat del tercer component.
Estos patrons solen buscar una major modularitat, eliminar la lògica centralitzada dels controladors o facilitar la interactivitat directa entre model i vista. A continuació, es descriuen els més representatius.
El patró MVVM
El patró MVVM (Model-Vista-VistaModel, o Model-View-ViewModel) substituïx el controlador de MVC per un nou component denominat ViewModel (VistaModel), i se centra exclusivament en els components del model i la vista.
En este enfocament, l’usuari interactua directament amb la vista, que està vinculada al model a través del ViewModel. Este component intermedi conté la lògica necessària per a transformar les dades del model en una forma adequada per a ser mostrada en la vista, i també arreplega les accions de l’usuari per a modificar el model. La comunicació entre el model i la vista és bidireccional: els canvis en la vista actualitzen el model, i els canvis en el model es reflectixen automàticament en la vista. Això es coneix com data binding (enllaç de dades).
MVVM és especialment útil en aplicacions on hi ha una única vista principal que s’actualitza dinàmicament, com és el cas de moltes Single Page Applications (SPA), on no es recarreguen pàgines completes sinó que s’actualitzen seccions específiques. Atés que en estes aplicacions no és necessari decidir quina vista carregar (només hi ha una), el controlador perd rellevància i pot ser substituït per este vincle directe model-vista. Frameworks moderns com Angular o Vue.js incorporen conceptes de MVVM, amb diferents nivells de formalitat.
El patró MOVE
El patró MOVE (Model-Operació-Vista-Esdeveniment, o Model-Operation-View-Event) proposa una divisió distinta del rol del controlador, reemplaçant-lo per dos components: esdeveniments i operacions. Els esdeveniments representen accions o successos que ocorren en l’aplicació, generalment generats per la interacció de l’usuari (com fer clic en un botó, enviar un formulari, etc.). Estos esdeveniments desencadenen operacions, que definixen les tasques que l’aplicació pot realitzar (com validar dades, consultar el model o actualitzar la interfície).
En este patró, quan ocorre un esdeveniment, s’executa una operació associada, que pot accedir al model per a obtindre o modificar dades, i generar una vista que es mostra a l’usuari com a resposta. D’esta manera, la lògica que en MVC estava concentrada en el controlador es repartix entre els esdeveniments que l’activen i les operacions que la implementen. Esta separació pot facilitar l’organització del codi i el maneig d’aplicacions amb moltes accions simultànies o asincròniques.
El patró MVP
El patró MVP (Model-Vista-Presentador, o Model-View-Presenter) substituïx el controlador de MVC per un component anomenat presentador. A diferència del controlador, que en MVC pot gestionar múltiples vistes, en MVP cada vista té associat el seu propi presentador, la qual cosa reforça el *encapsulamiento.
En este enfocament, la vista és passiva i no interactua directament amb el model. Tot el flux passa pel presentador: quan l’usuari realitza una acció, esta s’envia al presentador, que accedix al model, obté o actualitza dades, i després actualitza la vista. Això crea una relació clara entre cada parell vista-presentador, la qual cosa facilita la separació de responsabilitats i millora la capacitat de realitzar proves automatitzades.
El patró MVP és molt comú en el desenvolupament d’interfícies gràfiques complexes, tant en aplicacions d’escriptori com mòbils, com en entorns .NET o aplicacions Android.
Per a implantar una aplicació web i que els clients puguen utilitzar-la, és necessari comptar amb una sèrie de recursos tant de maquinari com de programari.
En el costat del client, simplement caldrà comptar amb un equip amb el maquinari necessari (depenent de l’aplicació web que siga, podrà ser un mòbil, una tauleta, portàtil, PC…), i, típicament, un navegador web instal·lat (encara que també podria tractar-se d’una aplicació híbrida per a mòbil, o d’escriptori, i en este cas faria falta l’aplicació en si).
En el costat del servidor, normalment necessitarem almenys un equip amb característiques de maquinari adequades, especialment pel que fa a processador, memòria RAM i capacitat d’emmagatzematge. En eixe servidor serà necessari instal·lar:
En el desenvolupament d’aplicacions web és important identificar els llenguatges de programació utilitzats, que es classifiquen segons l’entorn en què s’executen:
Llenguatges de l’entorn client (o llenguatges client): s’executen en el navegador de l’usuari i permeten la interacció directa amb l’aplicació. En este context, s’utilitzen llenguatges com a HTML i CSS per al disseny i estructura de les pàgines (encara que no es consideren llenguatges de programació en sentit estricte), i JavaScript per a manejar esdeveniments, validar formularis, crear animacions, etc. També existixen ferramentes i preprocessadors com SASS, que amplien les capacitats de CSS, així com frameworks i llibreries JavaScript com a Angular, React o Vue, que faciliten el desenvolupament d’interfícies dinàmiques. A més, existixen llenguatges com TypeScript, una evolució de JavaScript que afig tipat estàtic i major estructura, la qual cosa facilita el desenvolupament d’aplicacions grans i escalables.
Llenguatges de l’entorn servidor (o llenguatges servidor): s’executen en el servidor web i permeten realitzar operacions com a consultes a bases de dades, maneig d’arxius o gestió de sessions. Un dels llenguatges més utilitzats tradicionalment en este àmbit ha sigut PHP, que continua sent molt comú per a aplicacions web dinàmiques, especialment en combinació amb servidors Apatxe. Un altre llenguatge àmpliament adoptat és JavaScript, que gràcies a l’entorn d’execució Node.js també pot utilitzar-se en el servidor, permetent escriure tant el backend com el frontend d’una aplicació en un únic llenguatge. Sobre Node.js es dona suport a l’ús de TypeScript, que s’està consolidant com una ferramenta clau en el desenvolupament modern del costat servidor, en aportar tipat estàtic, una major organització del codi i millor suport per a projectes de gran grandària. En aplicacions que utilitzen tecnologia Microsoft, també s’empra ASP.NET, que s’executa sobre el servidor IIS i s’integra amb l’ecosistema Windows.
A continuació es descriuen els programes concrets que s’utilitzaran durant el curs, tant en el costat client com en el servidor.
En el client, necessitarem un navegador web per a visualitzar i interactuar amb les aplicacions. Existixen diverses opcions disponibles, com Mozilla Firefox, Google Chrome, Microsoft Edge (abans Internet Explorer), Safari o Opera, encara que probablement les millors alternatives per compatibilitat, rendiment i eines per a desenvolupadors són Google Chrome i Mozilla Firefox.
En el servidor, el programari a utilitzar dependrà del llenguatge de programació triat i del sistema operatiu, encara que en el nostre cas, utilitzarem entorns compatibles amb Windows.
Respecte al servidor de bases de dades, existixen múltiples alternatives. D’una banda, tenim les bases de dades relacionals, com MySQL/MariaDB, PostgreSQL, Oracle o SQL Server, totes elles disponibles en versions gratuïtes o comercials segons les necessitats del projecte. D’altra banda, existixen opcions no relacionals o *NoSQL, com MongoDB, que permeten emmagatzemar documents en format JSON i s’adapten especialment bé a estructures de dades flexibles i dinàmiques.
En el nostre curs, utilitzarem MySQL/MariaDB (integrat amb Apatxe i PHP mitjançant XAMPP) i MongoDB (en combinació amb Node.js) com a solucions principals per a emmagatzematge de dades.
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.
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.