interacţiune web: ajax

128
Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/ Tehnologii Web micro-servicii & interacțiune Web suita de tehnologii Ajax aplicații Web hibride (mash-ups)

Upload: vannhi

Post on 27-Dec-2016

268 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/Tehnologii Web

micro-servicii & interacțiune Web

↹suita de tehnologii Ajax

aplicații Web hibride (mash-ups)

Page 2: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

„Modul în care dăm face mai mult decât ceea ce dăm.”

Pierre Corneille

Page 3: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

Există alternative la servicii Web?

Page 4: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

micro-servicii

Implementează o funcționalitate specifică, oferită la nivel de unic proces

self-contained system

componentă la nivel de backend dezvoltată cu scopul de a fi înlocuită, nu de a fi reutilizată

avansat

Page 5: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

smalleach running in its own process

lightweight communication mechanisms (usual, HTTP)built around business capabilities

independently deployableminimum of centralized management

may be written in different programming languagesmay use different data storage mechanisms

caracteristici ale micro-serviciilor conformJames Lewis & Martin Fowler, Microservices (2014)

http://martinfowler.com/articles/microservices.html

avansat

Page 6: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

smalleach running in its own process

lightweight communication mechanisms (usual, HTTP)built around business capabilities

independently deployableminimum of centralized management

may be written in different programming languagesmay use different data storage mechanisms

caracteristici ale micro-serviciilor conformJames Lewis & Martin Fowler, Microservices (2014)

http://martinfowler.com/articles/microservices.html

avansat

Page 7: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

smalleach running in its own process

lightweight communication mechanisms (usual, HTTP)built around business capabilities

independently deployableminimum of centralized management

may be written in different programming languagesmay use different data storage mechanisms

caracteristici ale micro-serviciilor conformJames Lewis & Martin Fowler, Microservices (2014)

http://martinfowler.com/articles/microservices.html

avansat

Page 8: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

smalleach running in its own process

lightweight communication mechanisms (usual, HTTP)built around business capabilities

independently deployableminimum of centralized management

may be written in different programming languagesmay use different data storage mechanisms

caracteristici ale micro-serviciilor conformJames Lewis & Martin Fowler, Microservices (2014)

http://martinfowler.com/articles/microservices.html

avansat

Page 9: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

smalleach running in its own process

lightweight communication mechanisms (usual, HTTP)built around business capabilities

independently deployableminimum of centralized management

may be written in different programming languagesmay use different data storage mechanisms

caracteristici ale micro-serviciilor conformJames Lewis & Martin Fowler, Microservices (2014)

http://martinfowler.com/articles/microservices.html

avansat

Page 10: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

smalleach running in its own process

lightweight communication mechanisms (usual, HTTP)built around business capabilities

independently deployableminimum of centralized management

may be written in different programming languagesmay use different data storage mechanisms

caracteristici ale micro-serviciilor conformJames Lewis & Martin Fowler, Microservices (2014)

http://martinfowler.com/articles/microservices.html

avansat

Page 11: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

smalleach running in its own process

lightweight communication mechanisms (usual, HTTP)built around business capabilities

independently deployableminimum of centralized management

may be written in different programming languagesmay use different data storage mechanisms

caracteristici ale micro-serviciilor conformJames Lewis & Martin Fowler, Microservices (2014)

http://martinfowler.com/articles/microservices.html

avansat

Page 12: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

smalleach running in its own process

lightweight communication mechanisms (usual, HTTP)built around business capabilities

independently deployableminimum of centralized management

may be written in different programming languagesmay use different data storage mechanisms

caracteristici ale micro-serviciilor conformJames Lewis & Martin Fowler, Microservices (2014)

http://martinfowler.com/articles/microservices.html

avansat

Page 13: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

modularitate, descentralizare și evoluție permanentă

exemple de bună practică: http://microservices.io/

avansat

Page 14: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

micro-servicii

Funcționale (functional services)

implementează funcționalităti specifice (business operations)

avansat

Page 15: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

micro-servicii

Funcționale (functional services)

implementează funcționalităti specifice (business operations)

expuse consumatorului de servicii

independente (fără efecte colaterale – side effects)

nu sunt partajabile uzual

avansat

Page 16: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

micro-servicii

Control – infrastructură (infrastructure services)

implementează activități non-funcționale: autentificare, autorizare, jurnalizare, monitorizare,…

avansat

Page 17: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

micro-servicii

Control – infrastructură (infrastructure services)

implementează activități non-funcționale: autentificare, autorizare, jurnalizare, monitorizare,…

nu sunt expuse în exterior – private

pot fi partajate la nivel de aplicație ori servicii interne

avansat

Page 18: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

brow-ser

controlproce-

sare

client „puternic”și/sau „isteț”

micro-servicii în context serverless – aplicația depinde semnificativ de componente externe, disponibile în „nori”

BaaS

Mike Roberts (2016) – http://martinfowler.com/articles/serverless.html

func-ționa-litate1

func-ționa-litate2

auten-tificare

BaaS = (Mobile) Backend As A Service FaaS = Functions As A Service

FaaS

căutare

procesarecomenzi

BaaS

comenzi

produse

acces la API

avansat

Page 19: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

micro-servicii

Aspect de interes:

partajarea funcționalităților

share-as-much-as possible (SOA clasic)versus

share-as-little-as possible (micro-servicii)

avansat

Page 20: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

micro-servicii

Aspect de interes:

comunicarea – uzual, asincronă – între (micro-)servicii

abordări:point-to-point

sau publish-subscribe

avansat

Page 21: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

implementare

intern, (micro-)serviciile pot comunica recurgând la publish-subscribe – www.w3.org/TR/pubsub/

simplificarea accesului clientului

via API

Jonas Bonér (2016)

avansat

Page 22: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

micro-servicii

Uzual, arhitecturile ce recurg la micro-serviciinu includ componente middleware

și nu oferă suport pentru abstractizarea interacțiunii dintre producătorii și consumatorii de servicii

(contract decoupling)

avansat

Page 23: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

arhitectură bazată pe servicii Web

arhitectură recurgând la micro-servicii

cazuri concrete: Amazon, Groupon, Netflix,…

de studiat prezentările lui Stefan Tilkov: https://speakerdeck.com/stilkov

avansat

Page 24: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

Care e modalitatea de a transfera asincrondate între client(i) și server(e) Web?

Page 25: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Asynchronous JavaScript And XML(Jeese James Garrett)

permite transferul asincron de date între un document HTML redat de client (browser)

și o aplicație rulând pe un server Web

Page 26: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

O suită de tehnologii deschise:

limbaje standardizate de structurare – e.g., HTML –și de prezentare a datelor: CSS

Page 27: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

O suită de tehnologii deschise:

redare + interacțiune la nivel de client (navigator) Webvia standardul DOM

Page 28: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

O suită de tehnologii deschise:

interschimb și manipulare de date reprezentate prin:diverse dialecte XML,

JSON,HTML,

alte formate

Page 29: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

O suită de tehnologii deschise:

transfer (a)sincron de date via HTTPfacilitat de obiectul XMLHttpRequest

Page 30: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

O suită de tehnologii deschise:

procesare folosind limbajul ECMAScript (JavaScript)

Page 31: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Componenta de bază: obiectul XMLHttpRequest

disponibil la nivelul navigatorului Web via JavaScript

Page 32: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Componenta de bază: obiectul XMLHttpRequest

specificația inițială bazată pe implementarea MSIE

oferită în prezent de (aproape) orice browser

www.w3.org/TR/XMLHttpRequest1/

Page 33: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Componenta de bază: obiectul XMLHttpRequest

specificația actuală (HTML5 Living Standard, 9 mai 2017)

implementată de navigatoarele Web curente

https://xhr.spec.whatwg.org/

Page 34: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Componenta de bază: obiectul XMLHttpRequest

permite realizarea de cereri HTTP – e.g., GET, POST,… –dintr-un program rulând la nivel de client (browser)

spre o aplicație / un serviciu Web existent(ă) pe server,în mod asincron ori sincron

Page 35: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Componenta de bază: obiectul XMLHttpRequest

datele vehiculate între programele client și serverpot avea orice format

uzual, modelate în XML (e.g., Atom, RSS, KML,…),HTML și/sau JSON

Page 36: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Componenta de bază: obiectul XMLHttpRequest

paginile Web nu mai trebuie reîncărcate complet,conținutul lor – structurat via HTML –

fiind manipulat prin DOM în cadrul browser-ului,în conformitate cu datele recepționate de la server

Page 37: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Metode importante oferite de XMLHttpRequest

open ( )

inițiază – deschide – o conexiune HTTP cu serverul,emițând o cerere: GET, POST,…

Page 38: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Metode importante oferite de XMLHttpRequest

send ( )

transmite (asincron) date – e.g., XML, JSON etc. –,spre aplicația/serviciul ce rulează pe server

Page 39: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Metode importante oferite de XMLHttpRequest

send ( )

transmite (asincron) date – e.g., XML, JSON etc. –,spre aplicația/serviciul ce rulează pe server

orice listener (asociat evenimentelor onload, ontimeout,onabort,…) trebuie stabilit înainte de a trimite date

Page 40: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Metode importante oferite de XMLHttpRequest

abort ( )

abandonează transferul de date curent

Page 41: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Metode importante oferite de XMLHttpRequest

setRequestHeader ( )

specifică anumite câmpuri de antet HTTP

exemple: Cookie, Keep-Alive, User-Agent,…

Page 42: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Metode importante oferite de XMLHttpRequest

getResponseHeader ( )

furnizează valoarea unui anumit câmp prezentîn antetul mesajului de răspuns HTTP trimis de server

Page 43: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Metode importante oferite de XMLHttpRequest

getAllResponseHeaders ( )

oferă toate câmpurile HTTP trimise de server,exceptând Set-Cookie

Page 44: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Proprietăți de bază ale XMLHttpRequest

readyState

furnizează starea transferului:0 – UNSENT

1 – OPENED

2 – HEADERS_RECEIVED

3 – LOADING

4 – DONE

Page 45: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Proprietăți de bază ale XMLHttpRequest

status

oferă codul de stare HTTP întors de serverul Web:200 (Ok)

404 (Not Found)500 (Internal Server Error)

Page 46: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Proprietăți de bază ale XMLHttpRequest

statusText

conține mesajul corespunzător codului de stare HTTP

Page 47: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Proprietăți de bază ale XMLHttpRequest

responseText

responseXML

stochează răspunsul (datele) obținut(e) de la server

Page 48: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Proprietăți de bază ale XMLHttpRequest

onreadystatechange

specifică funcția ce va fi invocată la modificările de stareale transferului de date dintre server și client

handler de tratare a evenimentelor de transfer

Page 49: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Excepții ce pot fi emise

AbortError

InvalidAccessError

InvalidStateError

NetworkError

SecurityError

TimeoutError

conform DOM 4 Core

Page 50: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

Noutăți:stabilirea unui timeout privind realizarea unei cereri

(la nivel de milisecunde)

o valoare nenulă cauzează realizarea unei preîncărcări (fetching) a resursei

a se studia și Fetch (HTML5 Living Standard, 24 mai 2017)https://fetch.spec.whatwg.org/

developers.google.com/web/updates/2015/03/introduction-to-fetch

avansat

Page 51: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

Noutăți:datele vehiculate pot fi de mai multe tipuri

(ArrayBuffer, Blob, Document, DOMString, FormData)

detalii la https://xhr.spec.whatwg.org/#interface-formdata

avansat

Page 52: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

Noutăți:procesul de transmitere a datelor spre server (upload)

poate avea asociat un handler specific via proprietatea upload

avansat

Page 53: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

Noutăți:progresul încărcării poate fi urmărit pe baza

funcționalităților specificate de interfața ProgressEvent

https://xhr.spec.whatwg.org/#interface-progressevent

avansat

Page 54: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

Ce alte aspecte trebuie considerate

atunci când se recurge la Ajax?

Page 55: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax – utilizări

Reîmprospătarea periodică a conținutului

e.g., știri recepționate în formate ca Atom sau RSS, mesaje în cadrul aplicațiilor sociale, notificări,…

Page 56: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax – utilizări

Anticiparea download-urilor

pre-încărcarea datelor (e.g., imagini) ce vor fi solicitate

Page 57: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax – utilizări

Auto-completarea datelor

auto-completionsugestii de căutare – exemplu: Google Suggest

Page 58: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax – utilizări

Validarea în timp-real a datelor introduseîn formulare de către utilizator

exemplificare: verificarea existenței unui cont sau a unei localități

Page 59: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax – utilizări

Creare de componente de interfață Web (widgets) sau de aplicații Web rulând pe platforme mobile

interacționează cu utilizatorulpe baza evenimentelor survenite

Page 60: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax – aspecte

Evitarea încărcării întregului document Web

avantaj:se pot modifica doar fragmente de document

dezavantaj:bookmarking-ul poate fi compromis(nu există un URL unic desemnând

reprezentarea resursei curente)

avansat

Page 61: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax – aspecte

Oferirea de alternative la Ajax,atunci când suportul pentru acesta

nu este implementat/activat

graceful degradation

progressive enhancement

www.w3.org/wiki/Graceful_degradation_versus_progressive_enhancement

avansat

Page 62: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax – aspecte

Minimizarea traficului dintre browser și server

avansat

Page 63: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax – aspecte

Transferul de date poate fi monitorizat(+interceptat) via instrumente dedicate

la nivel de desktop: instrumentul WireShark

direct în navigator (eventual, ca extensii)Firebug, Fiddler, TamperData, Live HTTP Headers

avansat

Page 64: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax – aspecte

Adoptarea Ajax pentru creșterea utilizabilității,nu doar de dragul tehnologiei

exemple negative:distragerea utilizatorului

abuz de resurse (supradimensionarea arborelui DOM)

avansat

Page 65: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax

Ajax oferă premisele invocării asincronede (micro-)servicii Web în stilul REST

folosind diverse reprezentări ale datelor transferate: POX (Plain Old XML)

JSON (JavaScript Object Notation)AHAH (Asynchronous HTML and HTTP)

text neformatat

Page 66: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

Care e suportul vizând implementarea?

Page 67: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax – programare

La nivel de clientbiblioteci + framework-uri JavaScript tradiționale

AngularJS – angularjs.org

Backbone.js – backbonejs.org

Dojo Toolkit – dojotoolkit.org

jQuery (plus jQuery UI) – jquery.com

Prototype – prototypejs.org

MooTools – mootools.net

micro-biblioteci: http://microjs.com/#ajax

Page 68: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax – programare

La nivel de serverbiblioteci, module, framework-uri – exemple:

Java – Apache Wicket, DWR, OpenXava, Vaadin etc..NET – AJAX Control Toolkit: devexpress.com/act

Node.js – nodejsmodules.org/tags/ajax

PHP – Cjax: github.com/ajaxboy/cjax

Perl – CGI::Ajax, Catalyst, Mason etc.Python – wiki.python.org/moin/WebFrameworks

Page 69: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax – programare

API-uri specializate

exemplificări:Bing Maps V8 Web Control

https://msdn.microsoft.com/en-us/library/mt712542.aspx

HERE JavaScript APIshttps://developer.here.com/javascript-apis

Ajax în contextul extensiilor WordPresshttps://codex.wordpress.org/AJAX_in_Plugins

avansat

Page 70: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax – studiu de caz

Verificarea existenței unui nume de utilizatorîn vederea creării unui cont de autentificare

în cadrul unei aplicații Web

Page 71: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/Client

ServerWeb

XMLHttpRequest

Server de aplicații

open ("GET")

open ("POST")

send (...)

DOM

fereastra navigatorului

verificarea asincronă a existenței unui cont pe server

date XML (pe server)

Page 72: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax – studiu de caz

Verificarea existenței unui nume de utilizatorîn vederea creării unui cont de autentificare

în cadrul unei aplicații Web

tratând prin DOM evenimentul onblur, putem detecta– interogând asincron aplicația Web de pe server –

faptul că numele de cont introdus de utilizatorîntr-un formular Web deja a fost folosit de altcineva

Page 73: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax – studiu de caz

Verificarea existenței unui nume de utilizatorîn vederea creării unui cont de autentificare

în cadrul unei aplicații Web

aplicația Web de pe server – adoptând stilul REST –va oferi un document XML modelând răspunsul la

interogarea „există deja un utilizator având un nume dat?”

Page 74: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

<?php // program PHP, cu rol de serviciu Web, rulat la nivel de serverdefine ('DOCXML', './particip.xml'); // locația documentului XML// trimitem tipul conținutului; aici, XMLheader ('Content-type: text/xml');

// funcție care verifică dacă un nume de participant deja există// returnează 1 dacă numele există, 0 în caz contrarfunction checkIfNameExists ($aName) {// încărcăm datele despre participanți via SimpleXMLif (!($xml = simplexml_load_file (DOCXML))) { return 0; }// parcurgem toți participanții găsiți cu XPath...foreach ($xml->xpath('/participants/participant/name') as $name) {

// comparăm numele, ignorând minusculele de majusculeif (!strcasecmp($aName, $name)) { return 1; }

}return 0;

}?><response>

<result><?php echo checkIfNameExists ($_REQUEST['name']); ?></result></response>

Page 75: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

<!-- Formularul Web preluând date de la utilizator --><form action="add.php" method="post">

<div><label for="name">Account name:</label><input type="text" name="name" id="name"

onblur="javascript:signalNameExists (this.value, '')" /><!-- mesaj inițial ascuns --><span class="hidden" id="errName">

Name already exists, choose another one...</span>

</div>

<div><label for="adr">Address:</label><input type="text" name="adr" id="adr" />

</div>

<input type="submit" value="Apply" /></form>

Page 76: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

// programul JS executat în cadrul browser-uluivar request; // încapsulează cererea HTTP către serverul Web

function loadXML (url) { // încarcă un document XML desemnat de 'url'// verificăm existența obiectului XMLHttpRequestif (window.XMLHttpRequest) {

request = new XMLHttpRequest (); // există suport nativ} else

if (window.ActiveXObject) { // se poate folosi obiectul ActiveX din MSIErequest = new ActiveXObject ("Microsoft.XMLHTTP");

}if (request) { // există suport pentru Ajax

// stabilim funcția de tratare a stării transferului de daterequest.onreadystatechange = handleResponse; // preluăm documentul prin metoda GET request.open ("GET", url, true); request.send (null); // nu trimitem nimic serviciului Web

}}

Page 77: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

// funcția de tratare a schimbării de stare a cereriifunction handleResponse () {

// verificăm dacă încărcarea s-a terminat cu succesif (request.readyState == 4) {

// am obținut codul de stare '200 Ok'?if (request.status == 200) {

// procesăm datele recepționate prin DOM// (preluăm elementul rădăcină al documentului XML)var response = request.responseXML.documentElement; var res = response.getElementsByTagName('result')[0].firstChild.data;

// apelăm o funcție ce va modifica arborele DOM al paginii Web// conform răspunsului transmis de serviciul invocat…

}// eventual, se pot trata și alte coduri HTTP (404, 500 etc.)

else { alert ("A problem occurred:\n" + request.statusText);

}}

veziexempluldin arhivă

Page 78: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

utilizatorul introduce un nume de cont; via Ajax, i se va semnala cădeja există, conform răspunsului XML trimis de către serviciul Web

cerere HTTP via URL-ul http://undeva.info/verify.php?name=tux

răspuns XML de forma <response><result>1</result></response>

0 = nu există

Page 79: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

studiu de caz: RandomAjax

preia asincrono secvență de numere aleatoare generate de random.org – trimisă ca

text obișnuitjsfiddle.net/busaco/2254kdqn/

Page 80: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

const URL = 'https://www.random.org/sequences/?min=1&max=33&col=1&format=plain';const TIME = 2000;

var xhr = new XMLHttpRequest();var numbers = document.getElementById('numbers');// eveniment de tratare a expirării timpului de așteptarexhr.ontimeout = function () { numbers.textContent = 'Time-out... :('; };// eveniment de tratare a preluării datelor solicitate unui serviciuxhr.onload = function () {

if (xhr.readyState === 4) { // am primit dateleif (xhr.status === 200) { // răspuns Ok din partea serverului

// înlocuim spațiile albe cu virgulă și plasăm conținutul// în cadrul elementului HTML identificat prin 'numbers'numbers.textContent = xhr.responseText.trim().replace(/\W+/g, ', ');

} else {numbers.textContent = 'An error occurred: ' + xhr.statusText;

}}

};

xhr.open("GET", URL, true); // deschidem conexiuneaxhr.timeout = TIME; // stabilim timpul maxim de așteptare a răspunsuluixhr.send(null); // nu expediem date

Page 81: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

studiu de caz: RandomAjax (Fetch)

soluție folosind Fetch API

pentru aceeași problemăjsfiddle.net/busaco/a2q9regd/

Page 82: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

function status(response) { // recurgem la promises – github.com/wbinnssmith/awesome-promises –// pentru a realiza procesări în funcție de codul de stare HTTPif (response.status >= 200 && response.status < 300) {return Promise.resolve(response) // cererea poate fi rezolvată

} else {return Promise.reject(new Error(response.statusText)) // cererea a fost rejectată

}}

fetch(URL).then(status) // verificăm dacă datele au fost recepționate cu succes.then((response) => response.text()) // transformăm obiectul răspunsului în șir de caract..then(function(response) { // procesăm secvența de numere

// înlocuim spațiile albe cu virgulă și plasăm conținutul// în cadrul elementului HTML identificat prin 'numbers'var numbers = document.getElementById('numbers');numbers.textContent = response.trim().replace(/\W+/g, ', ');

}).catch(function(error) { // a survenit o eroare :(

numbers.textContent = 'An error occurred: ' + error;});

avansat

Page 83: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

Obținerea fotografiilor publice stocate pe situlFlickr pe baza serviciului Web oferit

codul-sursă recurge la biblioteca jQuery și e disponibil la http://jsfiddle.net/busaco/4d2tmc6b/

studiu de caz: FlickrPics

Page 84: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

Obținerea fotografiilor publice stocate pe situlFlickr pe baza serviciului Web oferit

utilizăm URL-ulhttp://api.flickr.com/services/feeds/photos_public.gne

pentru a obține informații despre imagini(formate disponibile: Atom, CSV, JSON, XML,…)

vezi http://www.flickr.com/services/feeds/docs/photos_public/

studiu de caz: FlickrPics

Page 85: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interactiune web: ajax – studiu de caz

Forma generală a răspunsului JSON transmis de Flickr:{

"title" : "Recent Uploads", "link" : "http://www.flickr.com/photos/", "modified" : "2017-05-23T13:03:07Z", "generator" : "http://www.flickr.com/", "items" : [ {

"title" : "...","link" : "http://www.flickr.com/photos/.../4204222/","media" : { "m": "https://farm.staticflickr.com/...jpg" },"date_taken": "2012-05-20T17:23:43-08:00","description": "...","published" : "2012-05-26T13:49:08Z","author" : "...","author_id" : "...","tags" : "iasi romania informatica FII ..."

} ]}

Page 86: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/// preluăm asincron imagini disponibile pe Flickr

jQuery.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", { // datele de intrare transmise serviciului Web tags: "Iasi, informatica", tagmode: "all", format: "json"

}, // funcția anonimă ce va procesa datele JSON trimise asincron de Flickr function (data) { // iterăm fiecare informație obținută de la serviciul Web $.each (data.items, function (number, photo) {

// creăm un element <img> având ca valoare a atributului "src" // adresa Web inclusă în datele JSON obținute; // acest <img> va fi adăugat la elementul cu id="pics" din pagină$ ("<img/>").attr ("src", photo.media.m).attr ("title", photo.title)

.appendTo ("#pics"); });

});

studiu de caz: FlickrPics

JSONP

JSONP (JSON with Padding) – tinyurl.com/n733jtb

Page 87: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

studiu de caz: FlickrPics

Page 88: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: ajax – studiu de caz

Generalizând, putem recurge la metoda ajax ():

jQuery.ajax ({ // execută o cerere POST pentru invocarea serviciului Web

type: "POST",

contentType: "application/json; charset=utf-8",

url: "http://undeva.info/ServiciuWeb/Resursa",

data: "{…}", // datele de intrare trimise serviciului

dataType: "json", // așteptăm răspunsul în format JSON

success: function (data) { // funcție apelată la transferul cu succes

$('.rezultat').html (data); // preluăm datele, convertindu-le în HTML

}

});

avansat

Page 89: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: comet

Comet

termen propus de Alex Russel

permite ca datele să fie „împinse” (push) de către serverspre aplicația client, utilizând conexiuni HTTP

persistente (long-lived) în vederea reducerii latenței

avansat

Page 90: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: comet

Șablon de proiectare a aplicațiilor Webcare necesită realizarea de conexiuni persistente,

în stilul peer-to-peer

utilizat de aplicațiile Web intensiv interactive,eventual colaborative – e.g., Mibbit

avansat

Page 91: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: comet

Complementar Ajax

long pollingHTTP server push

Reverse Ajax

de studiat M. Carbou, “Reverse Ajax, Part 1.Introduction to Comet”, IBM developerWorks, 2011

www.ibm.com/developerworks/web/library/wa-reverseajax1/

avansat

Page 92: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interacțiune web: comet

Soluții alternative, moderne: adoptarea diverselor tehnologii HTML5

server-sent eventsWebSocket

detalii la cursul „Dezvoltarea aplicațiilor Web la nivel de client”https://profs.info.uaic.ro/~busaco/teach/courses/cliw/

avansat

Page 93: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

(în loc de) pauză

Page 94: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

mash-ups

Ajax/Comet oferă suport pentru dezvoltarea de aplicații Web hibride – mash-ups

combinarea – la nivel de client și/sau server –a conținutului ce provine din surse (situri)

multiple, oferind o funcționalitate/experiență nouă

Page 95: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

mash-ups

Exemplificare:

dorim să oferim o aplicație ce pune la dispozițieinformații din domeniul muzical

în funcție de activitățile fizice ale utilizatorului,pe baza unor servicii Web publice

Page 96: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

mash-ups

http://www.last.fm/api/rest

https://wiki.fitbit.com/display/API/Fitbit+API

Page 97: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

mash-ups

acces la serviciile RESTdespre formații + albume

via o cheie de autentificare

Page 98: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

mash-ups

API-ul REST de la FitBit oferă date în formatele JSON și XML

Page 99: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

mash-ups

+ FiLaaplicație Web hibridă

http://www.last.fm/api/rest

https://dev.fitbit.com/

Page 100: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

mash-ups

Se bazează pe fluxuri de știri RSS/Atom, servicii Web, API-uri publice,…

„curentul” SaaS (Software As A Service)

implementare la nivelul: clientului (browser-ului) Web și/sau serverului Web

Page 101: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

mash-ups

Caracteristici:combinarevizualizare

agregare

Page 102: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

mash-ups

Combinare

utilizarea de surse de date multiplepoate avea caracter multidimensional

de exemplu, subiect de interes + locație geografică + moment de timp

Yahoo! Music Search + Google Maps + Eventful

Page 103: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

mash-ups

un mash-up Web de studiere a efectelor detonării bombelor nucleare – nuclearsecrecy.com/nukemap/

Page 104: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

mash-ups

Vizualizare

pot fi adoptate diverse tehnici de vizualizare(prezentare) a datelor:

chart-uri, cartografică, tag cloud-uri, tridimensională,…

detalii în cadrul materiei „Dezvoltarea aplicațiilor Web la nivel de client” (anul 3, sem. I)

https://profs.info.uaic.ro/~busaco/teach/courses/cliw/

Page 105: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

metode diverse de vizualizare în timp-real a evoluției cursului monedelor virtuale – Coinorama

Page 106: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

mash-ups

Agregare

gruparea datelor provenite din mai multe surse șianalizarea lor: statistici, clasificări, predicții,…

e.g., folosind data mining se pot relevaaspecte „ascunse” ale datelor procesate

Page 107: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

recomandare de parfumuri – ScentSee

Page 108: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

mash-ups

Surse de date(data feeds)

Atom, RSS, geoRSS, micro-date HTML5, RDFa,…

Interfețe de programare(API-uri)

specifice serviciilor publiceși de procesare JSON/XML/RDF

Biblioteci/framework-uripentru dezvoltare

framework-uri Web genericesau oferite de organizații

Instrumente interactive(Web tools)

eventual, disponibile în cloud

Platforme(Platform As A Service)

Heroku, Google Cloud Platform, Nodejitsu, Windows Azure,…

avansat

Page 109: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

mash-ups

Your Life on Earth (BBC)www.bbc.com/earth/story/20141016-your-life-on-earth

Page 110: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

mash-ups

lista mash-up-urilor: www.programmableweb.com/mashups/directory

avansat

Page 111: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

Nu există o problemă de securitateprivind accesul la resurse via JavaScript?

Page 112: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

Same-Origin Policy

“restricts how a document or script loaded from one origin can interact with a resource from another origin”

astfel, un program JavaScript trebuie să acceseze doar datele aparținând aceleași origini

– i.e., provenite din același domeniu Internet

mash-ups: securitate

avansat

Page 113: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

se permit doar transferuri vizând reprezentări de resursereferitoare la imagini, fișiere CSS

și alte programe JavaScript aparținând aceleași origini

avansat

clientserver Web

HTTPJSON, XML,…

APIpublic

APIpublic

HTTPJPG

HTTPJPG

Same-Origin Policy

Page 114: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

Same-Origin Policy

previne cazurile în care un document/program încărcatdintr-o origine să poată accesa/modifica proprietăți

ale unui document aparținând altei origini

pentru detalii, a se consultahttps://developer.mozilla.org/Web/Security/Same-origin_policy

avansat

mash-ups: securitate

Page 115: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

interactiune web: ajax – studiu de cazvar url = "http://profs.info.uaic.ro/~busaco/teach/courses/web/web-film";

// realizăm o cerere HEAD pentru a obține meta-date despre o resursăvar client = new XMLHttpRequest ();client.open ("HEAD", url, true);client.send ();client.onreadystatechange = function () {

// am recepționat câmpurile-antet?if (client.readyState == 2) {// semnalăm tipul MIME și data ultimei actualizărialert ("Resursa de tip '" +

client.getResponseHeader ("Content-Type") + "' s-a actualizat la " + client.getResponseHeader ("Last-Modified"));

}}

preluarea cu HEAD a unor meta-date, în mod asincron

avansat

Page 116: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

URL al altui domeniuse încalcă Same Origin Policy

avansat

Page 117: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

CORS (Cross-Origin Resource Sharing)

recomandare W3C (2014)www.w3.org/TR/cors/

permite partajarea la nivel de client a resurselorprovenind din domenii Internet diferite

astfel, se pot emite cereri între domenii (cross-origin)

avansat

mash-ups: securitate

Page 118: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

Poate fi abstractizat accesul la surse de date disponibile pe Web?

Page 119: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

model de acces la date: yql

Yahoo! Query Language

abstractizează accesul la surse de date eterogenece pot fi obținute via servicii Web

https://developer.yahoo.com/yql/

avansat

Page 120: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

model de acces la date: yql

Permite – pe baza unui limbaj similar SQL –interogarea, filtrarea, combinarea datelor la nivel de Web

(suport pentru realizarea de mash-up-uri)

facilitează atașarea la aplicația Web dezvoltatăa surselor de date de interes:

fluxuri de știri, informații cartografice, resurse multimedia etc.

avansat

Page 121: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

model de acces la date: yql

Adoptă o sintaxă SQLshow, desc, select, use, insert, update, delete

surse de date publice Yahoo! (built-in tables) sau oferite de terți (community tables) – e.g., Amazon,

Apple, arXiv, Deviant Art, Europarliament, GitHub, Last.fm, PayPal, Spotify, Steam, Tumblr, Yelp,…

răspunsul la o interogare ≡ rânduri (rows) de date

avansat

Page 122: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

avansat

creații muzicaleoferite de iTunes

select * from apple.itunes

where term='Eclipse' and

media='music';

URL-ul corespunzător cererii

Page 123: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

model de acces la date: graphql

Graph Query Language

“a query language for APIs and a runtime for fulfilling those queries with your existing data”

declarativ, inspirat de JSON, strict (strong-typed)considerat alternativă la paradigma REST

http://graphql.org/

https://learngraphql.com/

avansat

Page 124: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

model de acces la date: graphql

Graph Query Language

implementare de referință în JavaScript: GraphQL.js

biblioteci disponibile pentru C, Go, Java, .NET, PHP, Python, Scala, Typescript,…

de experimentat și Apollo – www.apollodata.com

detalii în Vince Ling, State of GraphQL 2016https://scaphold.io/blog/2016/10/31/state-of-graphql.html

avansat

Page 125: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

model de acces la date: graphql

interogare interactivă cu GraphQLa API-ului vizând „Războiul Stelelor”

graphql.org/swapi-graphql/

exemple de interogări via GraphQL ale unor API-uri publice (e.g., Hacker News, Reddit, Twitter): www.graphqlhub.com

schemarezultateinterogare

avansat

Page 126: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

model de acces la dateservicii Web

model de calcul

ofertantde servicii mobile

mash-up-uri la nivelde dispozitiv mobil

model de implementaremodel de interacțiune

adaptare după Tom Croucher

model de comunicare

model al fluxului

de date

⚙⚙

⚙⚙

GraphQLYQL

avansat

studiu de caz

Page 127: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/rezumat

micro-servicii & interacțiune Web

↹micro-servicii Ajax

mash-up-uri Web modele de acces la date

Page 128: interacţiune web: ajax

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

„ultimul” episod: securitatea aplicațiilor Web