Dezvoltarea aplicațiilorWebbusaco/teach/courses/wade/... · 2019-10-07 · ga .ro / ~ co nevoiale...

Post on 18-Jan-2020

7 views 2 download

transcript

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Dezvoltarea aplicațiilor Web

⤄servicii Web în stil REST

Dr. Sabin Corneliu Buraga – profs.info.uaic.ro/~busaco/

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

„Prima calitate a stilului este claritatea.”

Aristotel

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Cum pot fi accesate și procesate resursele– date, informații, cunoștințe –

disponibile pe Web?

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

nevoi ale dezvoltatorilor Web

Soluții multi-platformă, slab-conectate

integrare (în timp-real) la nivel de Internet/Weba aplicațiilor, serviciilor și sistemelor

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

nevoi ale dezvoltatorilor Web

Soluții multi-platformă, slab-conectate

integrare (în timp-real) la nivel de Internet/Weba aplicațiilor, serviciilor și sistemelor

exemplificare: găsirea ofertelor de servicii,pe baza localizării geografice a utilizatorului,

în contextul dispozitivelor mobile

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

nevoi ale dezvoltatorilor Web

Soluții multi-platformă, slab-conectate

datele să poată fi descrise pentru a fi „înțelese”de calculatoare și pentru a fi interconectate facil

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

nevoi ale dezvoltatorilor Web

Soluții multi-platformă, slab-conectate

datele să poată fi descrise pentru a fi „înțelese”de calculatoare și pentru a fi interconectate facil

Web “puzzles”inter-conectarea mai multor servicii oferind date de

interes, conform preferințelor utilizatorului

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

nevoi ale dezvoltatorilor Web

Servicii atașabile (pluggable) & versatile

Software as a Service – SaaS

Application Service Provider – ASP

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

soluție

Divizarea aplicațiilor în servicii – independente –care se pot compune,

menite a se conecta și orchestra în mod spontanîn cadrul proceselor de afaceri/tehnice

Web component-based software

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

soluție

“The Web is the computer”

disponibilitatea unei/unor arhitecturi care…

oferă suport pentru paradigme de comunicare– bazată pe actualele tehnologii Web –

între aplicații eterogene

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

soluție

“The Web is the computer”

disponibilitatea unei/unor arhitecturi care…

permit(e) localizarea transparentă a serviciilor

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

soluție

“The Web is the computer”

disponibilitatea unei/unor arhitecturi care…

facilitează adăugarea, înlocuirea, eliminareaserviciilor în mod dinamic

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

soluție

“The Web is the computer”

disponibilitatea unei/unor arhitecturi care…

ascund(e) dezvoltatorului detaliile de sistem

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

soluție

“The Web is the computer”

disponibilitatea unei/unor arhitecturi care…

asigură calitatea dezvoltării și exploatăriiaplicațiilor distribuite și/sau paralele:

standardizare, securitate, disponibilitate, reutilizare, mentenanță etc.

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Ce sunt serviciile Web?

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

servicii web

“A service is an abstract resource that represents a capability of performing tasks that form

a coherent functionality from the point of view of providers entities and requesters entities.”

www.w3.org/TR/ws-gloss/

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

servicii web

“A Web service is a software system designed to support interoperable machine-to-machine

interaction over a network.”

www.w3.org/TR/ws-gloss/

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

servicii web

Software oferind o funcționalitate specifică

acces la resurse – Instagram, Pinterest, Slideshare, Vimeoagregare de știri – Feedly, Reddit

cartografiere – Google Maps, OpenStreetMap etc.mesagerie instantanee – Snapchat, Telegram, Twilio

procesări – Amazon Rekognition, IBM Watson, Microsoft Azure Cognitive Services, Google TensorFlow…

realizare de statistici Web – e.g., Google Analyticsrețele sociale – Facebook Open Graph, LinkedIn, Twitter

spelling checking – Bing Spell Check, xSpell,…stocare de date – Amazon S3, Dropbox, OneDrive etc.

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

servicii web

utilizate – la distanță – de alte aplicații/servicii

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

servicii web

Accesate standardizat via Web

adresare de resurse cu URItransfer de date via HTTP

mesaje adoptând formate de date: CSV, JSON, XML,…

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Cum am implementa un serviciu?

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

servicii web

Implementare standard

recurgerea la servere + framework-uri de aplicații Web

ASP.NET, Django, Node.js, PHP (CodeIgnater, Laravel,…),

Play!, Ruby on Rails,…

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

servicii web

Tradițional, aplicația oferă o interfață-utilizator disponibilă pe Web

limbaj de marcare – e.g., HTMLstiluri de prezentare a conținutului – CSS

interactivitate via JavaScript (+biblioteci/framework-uri)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

servicii web

Tradițional, aplicația oferă o interfață-utilizator disponibilă pe Web

cererile sunt capt(ur)ate via formulare+ legături hipermedia

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

servicii web

Tradițional, aplicația oferă o interfață-utilizator disponibilă pe Web

utilizatorii umani trebuie să interpreteze etichetele și câmpurile de dialog

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

servicii web

Tradițional, aplicația oferă o interfață-utilizator disponibilă pe Web

serviciul implementat oferă un răspuns(o reprezentare a unei resurse Web)

uzual, un document HTML al cărui conținute transferat la client conform unui protocol: HTTP(S)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

servicii web

Cum obținem răspunsul pentru a fi (re)folositîn programele noastre?

procesarea datelor din codul HTMLWeb scraping

<div class="ct-cs"><input id="exchange_rate" value="4.4155770975" type="hidden">

<input id="fob.log_input_ct" value="" type="hidden">…<table>…</table></div>

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

servicii web

Cum obținem răspunsul pentru a fi (re)folositîn programele noastre?

orice modificare în marcajerescrierea programului de preluare a datelor din documentul HTML

???!

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

servicii web: caracterizare

Serviciile Web fac explicite specificațiile implicite

datele de intrare și răspunsul pot fi specificate (riguros)via diverse maniere de validare

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

servicii web: caracterizare

Utilizate la interacțiunea dintre aplicații

dinamice

lipsa unei cunoașteri a-priori a interacțiuniicu alte aplicații/servicii Web

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

servicii web: caracterizare

Puncte finale utilizate pentru procesarea datelor, în manieră publică – eventual, via API-uri deschise

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

servicii web: caracterizare

Dezvoltate pe baza platformelor, arhitecturilor, tehnologiilor și limbajelor curente

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Există un model arhitectural de dezvoltarea serviciilor la nivel de Web?

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

soa

Arhitectura orientată spre servicii

SOA – Service Oriented Architecture

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

soa

Stil arhitectural de proiectare și dezvoltarede aplicații considerate drept servicii

care pot fi invocate de alte aplicații

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

soa

Paradigmă de dezvoltare a software-uluicare adoptă folosirea de servicii,

oferind funcționalități solicitate de utilizatori

resursele sunt disponibile via o suită de serviciiindependente ale căror implementărinu trebuie să fie cunoscute (black box)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

soa

Componentele sistemului în ansambluau un grad mare de independență (de-coupling)

serviciile trebuie proiectate să interacționeze fără a exista dependențe între acestea

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

soa

Serviciile partajează un contract formal

necesitatea unei descrieri formale a serviciului:operații oferite (interfața serviciului)

maniera de interschimb a datelor (cerere + răspuns)maniera de descoperire (service discoverability)

calitatea unui serviciu (SLA – service-level agreement)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

soa

Serviciile pot fi recompuse/orchestrateconform cerințelor sau contextului de exploatare

composable servicesreusable services

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

soa

Serviciile nu vor depinde de starea comunicării(statelessness)

pentru a efectua o procesare, cantitatea de informațiece trebuie reținută trebuie să fie minimală

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

soade la aplicații Web dezvoltate tradițional

la arhitecturi bazate pe servicii

Jay O’Connor (2014)tech.bellycard.com/blog/migrating-to-a-service-oriented-architecture-soa/

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

structura conceptuală stratificată a unei platforme bazate pe servicii Web

protocoale (HTTP, SMTP,…)

servicii de regăsire: UDDI

descrieri de servicii: WSDL

context al serviciului (cine, de ce,…)

servicii de bază (calendar, tranzacții,…)

sist. tradiționale

server(e) backend

API

workflow engine

mașină virtuală

micro-/macro-serv.

ofertant/utilizator de servicii Web

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Există o modalitate pragmatică privinddezvoltarea și invocarea serviciilor Web?

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

serviciile Web pot fi dezvoltate via SOAP și/sau RESTS. Tilkov, REST: Not an Intro (2013)

speakerdeck.com/stilkov/rest-not-an-intro-1

service interface

service logic

business rules

data access

data

resources

hypermediarepresen-

tations:JSON, XML,…

HTTP

operations

SOAP

XML messages

WS-*

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: representational state transfer

Stil arhitectural de dezvoltare a aplicațiilor Webcu focalizare asupra reprezentării datelor

Roy Fieldingteză de doctorat, 2000 (University of California, Irvine)

www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

Viziune complementară de implementare șiutilizare a serviciilor Web – fără SOAP

SOAP Envelope

SOAP Headerbloc antetbloc antet

SOAP Bodybloc corpbloc corpbloc corpbloc corp

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

Rezultatul unei procesări conduce la obținereaunei reprezentări a unei resurse

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

Rezultatul unei procesări conduce la obținereaunei reprezentări a unei resurse

resursă Web

utilizator având cont în cadrul unui sistem, mesaj al unei persoane, fotografie, flux de știri,

componentă software, set de date (dataset), model 3D,…

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

Rezultatul unei procesări conduce la obținereaunei reprezentări a unei resurse

reprezentare pe baza unui format de date

textual sau binar

exemple tipice – formate deschise: HTML, JSON, CSV, PNG, SVG, PDF etc.

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

Rezultatul unei procesări conduce la obținereaunei reprezentări a unei resurse

reprezentare pe baza unui format de date

formatul reprezentării e desemnat de tipuri MIMEtext/html, application/json, application/rdf+xml, image/png

detalii în N.Freed et al., Media Types, 26 septembrie 2019www.iana.org/assignments/media-types/media-types.xhtml

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

Rezultatul unei procesări conduce la obținereaunei reprezentări a unei resurse

reprezentările aceleași resurse– desemnate de un URI unic – pot fi multiple

resursa

URI

reprezentare2

(JSON)reprezentare1

(HTML)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

Rezultatul unei procesări conduce la obținereaunei reprezentări a unei resurse

fiecare reprezentare a unei resurse are asociat un URL

resursa

URI

URLURL

reprezentare2

(JSON)reprezentare1

(HTML)

Dr.

Sab

in B

ura

ga

pro

fs.in

fo.uaic.ro

/~busa

co

rest

Clienții (e.g., navigatoare Web, roboți, player-e etc.) interacționează cu reprezentările resurselor via verbe„accesează”: GET, „modifică”: POST, „șterge”: DELETE,…

resursa

URI

URLURL

GET POST GET DELETE

reprezentare2

(JSON)reprezentare1

(HTML)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

Verbele (acțiunile) sunt stipulate de un protocol

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

HyperText Transfer Protocol

protocol fiabil, de tip cerere/răspuns

port standard de acces: 80

profs.info.uaic.ro/~busaco/teach/courses/web/web-film.html#week2

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

HTTP/1.1

standard Internet: RFC 2616 (1999)

din 2014, definit de RFC 7230—7235

www.w3.org/Protocols/

un tutorial: www.code-maze.com/http-series/

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

HTTP/2.0

RFC 7540 (2015)

axat asupra performanței

http2.github.io

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

HTTP/2.0

mesaje binare

reutilizarea conexiunii TCP (a single connection per host)

multiplexare (many parallel streams)

compresia anteturilor – HPACK

trimiterea mesajelor spre client (server push)

implementări: github.com/http2/http2-spec/wiki/Implementations

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

HTTP/3.0

următoarea generație de protocol WebHTTP over QUIC – quicwg.org

recurge la QUIC (Quick UDP Internet Connections)propus de Google, actualmente în curs de

standardizare la IETF (Internet Engineering Task Force)

alte detalii: daniel.haxx.se/http3-explained/

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

GET

accesează (preia) o reprezentare a unei resurse

nu conduce la modificarea stării serverului– siguranță (safe)

idempotență (idempotent) – cereri identice vor conduce la oferirea aceluiași răspuns (aceeași reprezentare)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

HEAD

similară cu GET, dar furnizează doar meta-date(nu oferă reprezentarea propriu-zisă)

e.g., ultima actualizare, lungimea conținutului,…

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

PUT

înlocuiește (actualizează) o reprezentare de resursă saueventual creează o resursă la nivel de server Web

(al cărei URI e deja cunoscut)

uzual, returnează URI-ul resursei

nu e considerată safe, dar este idempotentă

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

PATCH

permite actualizarea parțială a unei reprezentări a unei resurse (PUT nu oferă o asemenea facilitate)

nu este safe și nici idempotentă

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

POST

creează o resursă (uzual, subordonată altei resurse)

opțional, pot fi realizate procesări suplimentare

nu este nici safe, nici idempotentă

clientul nu cunoaște a-prioricare va fi URI-ul resursei ce va fi create

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

DELETE

șterge (elimină) o resursă desemnată de un URI

este idempotentă

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

OPTIONS

permite clientului să determine diverse cerințe privitoare la o resursă (e.g., dacă o resursă poate fi ștearsă)

sau facilitățile expuse de un server (de exemplu, suportul oferit de un proxy)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

restMetoda HTTP Idempotent Safe

GET 🗸 🗸

POST ✗ ✗

PUT 🗸 ✗

PATCH ✗ ✗

OPTIONS 🗸 🗸

HEAD 🗸 🗸

DELETE 🗸 ✗

de studiat și articolul Tamas Piros, RESTful API Design – POST vs PUT vs PATCH, 2018

fullstack-developer.academy/restful-api-design-post-vs-put-vs-patch/

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

GET /sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org

&query=SELECT+DISTINCT+%3Fclass%0D%0A

WHERE+%7B%0D%0A++%3Fclass+a+owl%3AClass%0D%0A

%7D+LIMIT+7&format=application%2Fjson&timeout=30000 HTTP/1.1

Host: dbpedia.org

User-Agent: Mozilla/5.0 … Gecko/20100101 …

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en,en-GB;q=0.5

Accept-Encoding: gzip, deflate

DNT: 1

Referer: http://dbpedia.org/sparql

Connection: keep-alive

URL encoding

câmpuri-antet și valorile lor

un mesaj HTTP de tip cerere (request) trimis de client (uzual, un browser Web) spre server

aici, o cerere încapsulând o interogare SPARQL către DBpedia

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

HTTP/1.1 200 OK

Date: Web, 09 Oct 2019 07:03:52 GMT

Content-Type: application/json

Content-Length: 691

Connection: keep-alive

Server: Virtuoso/07.20.3232 (Linux) x86_64-generic-linux-glibc25

X-SPARQL-default-graph: http://dbpedia.org

Expires: Web, 09 Oct 2019 07:03:52 GMT

Cache-Control: max-age=604800

{ "head": { "link": [], "vars": ["class"] },

"results": { "distinct": false, "ordered": true, "bindings": [

{ "class": { "type": "uri",

"value": "http://dbpedia.org/ontology/Place" }},… ]

} }

un mesaj HTTP de tip răspuns (response) de la serveraici, în format JSON

tipul MIME al reprezentării oferite

câmp-antet nestandardizat

met

a-d

ate

con

țin

ut

(dat

e)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

Orice accesare a unei reprezentăriplasează aplicația – ori clientul Web – într-o starece va fi schimbată în urma unui transfer de date

(accesarea altei reprezentări)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

resursa1

reprezentare1

(HTML)

http://blog.info/

resursa2

reprezentare2

(HTML)

http://blog.info/mesaj

resursa3

reprezentare3

(HTML)

http://blog.info/mesaj/edit

resursa4

reprezentare4

(Atom)

http://blog.info/stiri.xml

GET

GET

POST

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

HATEOAS (Hypermedia As The Engine Of Application State)

B. Doerrfeld, Designing a True REST State Machine (2018)nordicapis.com/designing-a-true-rest-state-machine/

resursa1

reprezentare1

(HTML)

http://blog.info/

resursa2

reprezentare2

(HTML)

http://blog.info/mesaj

resursa3

reprezentare3

(HTML)

http://blog.info/mesaj/edit

resursa4

reprezentare4

(Atom)

http://blog.info/stiri.xml

GET

GET

POST

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

Transferul se realizează prin protocolul HTTP

Reprezentarea este modelată conform unui format– e.g., JSON sau XML – și

indicată prin tipuri MIME (media types)

Adresabilitatea se rezolvă via URI

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

Aplicațiile care invocă funcționalități (servicii)consumă reprezentări de resurse – în stilul pull

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

Fiecare cerere este considerată independentă,fără a se lua în considerație contextul

stateless server

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

Reprezentările de resurse pot fi stocate temporar

caching

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

stat

eles

s se

rver

client

cache

client

cache

adaptare după B. Mulloy (2012)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

stat

eles

s se

rver

client

cache

client

cache

adaptare după B. Mulloy (2012)

fiecare cerere trebuie să conțină toateinformațiile necesare procesării

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

stat

eles

s se

rver

client

cache

client

cache

adaptare după B. Mulloy (2012)

contextul activitățilornu-i stocat de server

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

stat

eles

s se

rver

client

cache

client

cache

adaptare după B. Mulloy (2012)

clientul are dreptul săreutilizeze datele recepționate

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

Aplicația Web dezvoltată va fi stratificată

layered system

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

client

state-less

server

state-less

server

state-less

server

loadbalan

cergatewayfire-

wall

adaptare după B. Mulloy (2012)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

client

state-less

server

state-less

server

state-less

server

loadbalan

cergatewayfire-

wall

adaptare după B. Mulloy (2012)

fiecare strat oferăservicii stratelor

vecine

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

client

state-less

server

state-less

server

state-less

server

loadbalan

cergatewayfire-

wall

adaptare după B. Mulloy (2012)

un strat nu poate„vedea” strateneînvecinate

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

client

state-less

server

state-less

server

state-less

server

loadbalan

cergatewayfire-

wall

adaptare după B. Mulloy (2012)

stratele pot încapsula(„ascunde”) sisteme

tradiționale – black box

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

client

state-less

server

state-less

server

state-less

server

loadbalan

cergatewayfire-

wall

adaptare după B. Mulloy (2012)

are rol în asigurareaperformanței/

fiabilității

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: exemplu

Serviciu pentru managementul adreselor Web favorite(bookmark-uri), cu posibilitatea atașării de termeni de conținut (tag-uri) și comentarii

social bookmarking

abordări similare: Delicious, Digg, Pocket, Reddit etc.

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: exemplu

Serviciu pentru managementul adreselor Web favorite(bookmark-uri), cu posibilitatea atașării de termeni de conținut (tag-uri) și comentarii

funcționalitate de bază: listarea tuturor bookmark-urilor (eventual, filtrate după diverse criterii)

managementul bookmark-urilor:adăugare, editare, ștergere, partajare

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Resursa URL Metoda Reprezentare

Bookmark /bookmarks/{hash} GET application/bookmark+xml

Bookmark /bookmarks/{hash} PUT application/bookmark+xml

Bookmark /bookmarks/{hash} DELETE

Lista de adrese

/bookmarks GET application/atom+xml

Lista de utilizatori

/users GET application/atom+xml

Lista detag-uri

/tags GET application/atom+xml

Paginaprincipală

/ GET application/xml

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

GET /bookmarks200 OKContent-type: application/atom+xml

<?xml version="1.0"?><feed xmlns="http://www.w3.org/2005/Atom">

<title>Bookmarks</title><entry>

<title>O resursă interesantă</title><link href="/bookmarks/a211528f…bdcf"/>

<summary>http://undeva.info/o-resursa-interesanta

</summary></entry>

<!-- eventual, alte elemente <entry>… --></feed>

răspuns XML (Atom)oferit de serviciu

obținereabookmark-urilor

digest – hash (SHA-1, SHA-3,…)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

GET /bookmarks/a211528f…bdcf200 OKContent-type: application/bookmark+xml

<bookmark><title>O resursă interesantă</title><url>http://undeva.info/o-resursa-interesanta</url><user href="/users/tux">tux</user><tags>

<tag href="/tags/interesting">interesting</tag><tag href="/tags/penguin">penguin</tag>

</tags></bookmark>

preluarea unui bookmark:răspunsul XML oferit de serviciul Web

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

POST /bookmarksContent-type: application/bookmark+xml…201 CreatedLocation: /bookmarks/a211528f…bdcf

PUT /bookmarks/a211528f…bdcfContent-type: application/bookmark+xml…200 OK

creareaunui bookmark

înlocuireaunui bookmark

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

Resursele se denumesc folosind URI-uri (URL-uri)

Reprezentările sunt interconectate prin URL-uri

Pot exista intermediari (proxy, cache, porți)între clienți și resurseperformanță, securitate,...

Transferul de date poate fi și asincron – stil Ajax/Comet

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

coO resursă poate avea asociate reprezentărice pot fi accesate/alterate via operații HTTP

CRUD – Create, Retrieve, Update, Delete

Operation SQL HTTP

Create INSERT PUT POST

Read (Retrieve) SELECT GET

Update (Modify) UPDATE PUT POST PATCH

Delete (Destroy) DELETE DELETE

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

caz concret: framework-ul LoopBack – loopback.io/doc/

operații↔REST↔model de implementare↔SQL

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest

Interacțiunea cu un serviciu Web dezvoltatîn stilul REST se poate face via un API (Application Programming Interface)

vezi prelegerea următoare

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Putem adopta o metodologie vizânddezvoltarea de servicii Web (API-uri)

aliniate paradigmei REST?

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: metodologie

Divizarea în resurse a setului de dateale problemei

clase tipice de resurse:Utilizatori

Documente – alternative: Fotografii, Produse, Software,…Metadate – e.g., Comentarii, Formate, Locații, Platforme etc.

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: metodologie

Divizarea datelor problemei în categorii

cazuri concrete:SoundCloud – developers.soundcloud.com/docs/api/

Tracks Users Me Playlists Groups Comments

StackExchange – api.stackexchange.com

Answers Badges Comments Questions Revisions Tags Users

World of Warcraft – dev.battle.net/io-docs

Characters Guilds Realms Auctions Items

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: metodologie

„Numirea” prin URI a fiecărei resurse

exemplificări:

http://web.info/Utilizatori/tux

http://web.info/Documente/pinguini-cu-mere-albastre

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: metodologie

„Numirea” prin URI a fiecărei resurse

cazuri concrete:accesarea știrilor referitoare la un subiect de interes

https://www.reddit.com/r/programming/

acces la prezentările SlideShare ale utilizatorului busaco

https://www.slideshare.net/busaco/presentations

obținerea listei celor ce urmăresc un utilizator autentificathttps://twitter.com/followers

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: metodologie

Organizarea resurselor

aceste resurse (object instances) pot fi organizate în colecții (collections) sau depozite (stores)

a se consulta D. Denicola, Creating Truly RESTful APIs (2013)www.slideshare.net/domenicdenicola/creating-truly-res-tful-apis

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: metodologie

Organizarea resurselor

colecție

catalog de resurse gestionate de serverclienții pot propune alterarea colecției

serverul decide care-i rezultatul unei operații

exemple (GitHub): /orgs/openstack/repos, /orgs/openstack/events

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: metodologie

Organizarea resurselor

depozit

„rezervă” de resurse gestionată de client(inclusiv filtrare, sortare, paginare, accesare meta-date,…)

exemplu (GitHub): /users/openstack/repos?page=2&per_page=3

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: metodologie

Proiectarea reprezentării(lor) acceptatece pot fi trimise de aplicația client

și reprezentării(lor) întoarse spre client

de considerat formatele standard, comune:CSV – Comma Separated Values

JSON(-LD) – JavaScript Object Notation (-Linked Data) XML – Extensible Markup Language

YAML – Yet Another Markup Language

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: metodologie

Integrarea resurselorvia legături hipertext + formulare

exemplificare (GitHub):“All resources may have one or more *_url properties

linking to other resources. These are meant to provide explicit URLs so that proper API clients don’t need

to construct URLs on their own.”developer.github.com/v3/#hypermedia

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: metodologie

Crearea de studii de caz

specificarea condițiilor de eroare și/sau de excepție,inclusiv aspecte privind controlul versiunilor API-ului

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

StrongLoop API (IBM)operații cu resurse specifice – aici Users

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

StrongLoop APItestarea interactivă a API-ului

strongloop.com/strongblog/node-js-rest-api-openshift-redhat/

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Aspecte practice de interes pentru dezvoltatori?

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: privire pragmatică

URL-urile desemnând resurse (concepte) de interes trebuie să fie simple și intuitive

utilizarea substantivelor pentru fiecare „lucru”

colecții de resurse (uzual, la plural)/students

identificatori unici pentru membrii unei colecții/students/tuxy (concret) vs. /students/69 (abstract)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: privire pragmatică

URL-urile desemnând resurse (concepte) de interes trebuie să fie simple și intuitive

structura ierarhică a URL-urilor reprezintă ierarhia resurselor din cadrul domeniului modelat

exemplu (GitHub):/repos/Microsoft/PTVS/commits/e95e15…7a3bf91baff88

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: privire pragmatică

Folosirea verbelor (metodelor) HTTP pentru efectuareade operații asupra unor (colecții de) resurse

resursa(URI)

POST (creează)

GET (accesează)

PUT (actualizează)

DELETE (șterge)

/studentscreează

un student noulistează studenții

existențiactualizează

un set de studențișterge toțistudenții

/students/69

(un URL dejaexistent)

eroare😞oferă date

despre student

dacă există, actualizează,altfel eroare

ștergestudentulrespectiv

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: privire pragmatică

Tratarea erorilor

folosirea codurilor de stare HTTP – httpstatuses.com

exemple tipice:200 OK, 204 No Content, 206 Partial Content

303 See Other, 304 Not Modified400 Bad Request, 401 Unauthorized, 403 Forbidden,

404 Not Found, 405 Method Not Allowed500 Internal Server Error, 503 Service Unavailable

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: privire pragmatică

Tratarea erorilor

mesajele întoarse trebuie să includă informații utile

GitHub – cod de stare HTTP oferit: 404{ "message": "Not Found",

"documentation_url": "https://developer.github.com/v3" }

versusNew York Times (Semantic API) – cod de stare HTTP: 401

{ "message": "No API key found in headers or querystring" }

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: privire pragmatică

Controlul versiunilor API-ului dezvoltat

“Never release an API without a versionand make the version mandatory.” (Mulloy, 2012)

considerații de interes în articolul J. Curry, Introduction to API Versioning Best Practices (2017):

nordicapis.com/introduction-to-api-versioning-best-practices/

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: privire pragmatică

Controlul versiunilor API-ului dezvoltat

specificarea versiunii

în antetul cererii HTTP

Accept: application/vnd.heroku+json; version=3

în unele cazuri, folosind un antet propriu: X-API-Version

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: privire pragmatică

Controlul versiunilor API-ului dezvoltat

specificarea versiunii

în cadrul URL-ului – eventual, ca parametru

https://roads.googleapis.com/v1/nearestRoads

https://ec2.amazonaws.com/?Action=RunInstances&Version=2016-11-15

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: privire pragmatică

Controlul versiunilor API-ului dezvoltat

specificarea versiunii

continuous versioningacces via același URI, indiferent de versiunea curentă

practica preferată (“Cool URIs don’t change”)

nordicapis.com/continuous-versioning-strategy-for-internal-apis/

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: privire pragmatică

Paginarea și oferirea de răspunsuri parțiale

de obicei, se folosesc parametri precum limit și offset

/students?limit=33&offset=54

filtrele opționale pot fi delimitate de virgulă/students?fields=name,age,year,email

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: privire pragmatică

interogări interactive asupra API-ului oferit de The New York Times

developer.nytimes.com

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: privire pragmatică

răspuns în format JSON

diverse (meta-)date oferite de serverul Web

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: privire pragmatică

Eterogenitatea formatelor reprezentărilor întoarse

indicarea formatului în URL via un parametru opțional?alt=json (Google Data)

specificarea formatului acceptat în antetul cererii HTTPAccept: application/json (Digg)

precizarea formatului în numele resursei solicitate/venue.json (Foursquare)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: privire pragmatică

Utilizarea subdomeniilor pentru API-uri diferiteale aceluiași ofertant de servicii

exemplificare:search.twitter.com

stream.twitter.com

api.twitter.com

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Cum pot fi accesatereprezentări de resurse Web prin REST?

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: implementare

Biblioteci/API-uri implementând HTTP

Apache HttpComponents (Java): hc.apache.org

Guzzle (PHP7): docs.guzzlephp.org/en/stable/

http (pachet Go): golang.org/pkg/net/http/

http.client (Python 3): docs.python.org/3/library/http.client.html

Hyper Reqwest (biblioteci Rust):hyper.rs docs.rs/reqwest

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: implementare

Biblioteci/API-uri implementând HTTP

libcURL (C; portări Perl, PHP, Ruby,…): curl.haxx.se/libcurl/

LibHTTP (bibliotecă C): www.libhttp.org

restify (framework Node.js): www.npmjs.com/package/restify

RestKit (macOS + iOS): github.com/RestKit/RestKit

RestSharp (pentru .NET): restsharp.org

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: implementare

Studiu de caz: accesarea datelor publice privitoare

la universul fictiv „Războiul stelelor” (Star Wars)

colecții de resurse: Planets, Spaceships, Vehicles, People, Films, Species

fiecare categorie de resurse are proprietăți specifice e.g., orice instanță de Films include title, director, characters,…

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: implementare

detalii la swapi.co/documentation

{

"name": "Leia Organa",

"height": "150",

"mass": "49",

"hair_color": "brown",

"skin_color": "light",

"eye_color": "brown",

"birth_year": "19BBY",

"gender": "female",

"homeworld": "http://swapi.co/api/planets/2/",

"films": [ "http://swapi.co/api/films/6/",… ],

"species": [ "http://swapi.co/api/species/1/" ],

"vehicles": [

"http://swapi.co/api/vehicles/30/" ],

"starships": [ ],

"created": "2014-12-10T15:20:09.791000Z",

"edited": "2014-12-20T21:17:50.315000Z",

"url": "http://swapi.co/api/people/5/"

}

răspuns disponibil în format

JSON

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: implementare

Studiu de caz:preluarea datelor despre artefacte culturale oferite

de Metropolitan Museum of Artmetmuseum.github.io

disponibile liber sub licența Creative Commons Zero

Objects – colecții de resurseObject – include (meta-)date de interes

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: implementare

Studiu de caz:preluarea datelor despre artefacte culturale

API-ul REST oferit poate fi accesat fără autentificarefolosind domeniul collectionapi.metmuseum.org

rezultatele interogărilor sunt disponibile în format JSON

parte componentă a inițiativei Google Arts & Cultureartsandculture.google.com

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: implementare

Studiu de caz:preluarea datelor despre artefacte culturale

pasul #1:căutarea – cerere GET – unor resurse de interes

collectionapi.metmuseum.org/public/collection/v1/search?q=Romania

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: implementare

Studiu de caz:preluarea datelor despre artefacte culturale

pasul #1:căutarea – cerere GET – unor resurse de interes

se obține o colecție JSON de identificatori – objectIDs

{ "total": 47, "objectIDs": [ 98440, 32843,…, 730799 ] }

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: implementare

Studiu de caz:preluarea datelor despre artefacte culturale

pasul #2:accesul – cu GET – la datele vizând o resursă specifică

collectionapi.metmuseum.org/public/collection/v1/objects/32843

objectID

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: implementare

Studiu de caz:preluarea datelor despre artefacte culturale

pasul #2:accesul – cu GET – la datele vizând o resursă specifică

rezultatul reprezintă un obiect JSON încapsulând diverse (meta-)date furnizate de proprietăți: imagini ale

artefactului (primaryImage, additionalImages), proveniența (country, state, region, city), clasificarea (classification),…

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: implementare – exemplul 3câmpurile-antet ale cererii HTTP:

Accept: application/json,application/xml;q=0.9,*/*;q=0.8

Accept-Encoding: gzip, deflate, br

Accept-Language: en,en-GB;q=0.5

Connection: keep-alive

Host: collectionapi.metmuseum.org

User-Agent: Mozilla/5.0 … Gecko/20100101 Firefox/69.0

câmpurile-antet ale răspunsului furnizat de API:

Access-Control-Allow-Origin: *

Content-Encoding: gzip

Content-Type: application/json; charset=UTF-8

Date: Web, 09 Oct 2019 10:38:18 GMT

Transfer-Encoding: chunked

X-CDN: Incapsula

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: implementare – exemplul 3

răspunsul JSON întors de serviciul Web apelat

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: implementare

Biblioteci/API-uri implementând HTTP

permit dezvoltarea de aplicații desktop, mobile etc.

suport pentru crearea de aplicatii hibride (mash-up-uri) la nivel de server

nu funcționează în navigatorul Web

atenție la problemele de securitate ce pot apărea!

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: implementare

Navigatoarele Web actuale

nu necesită un API distinct pentru acces via HTTP

disponibilitate pe orice platformă

suport pentru REST prin obiectul XMLHttpRequest (Ajax),Fetch API (HTML5) ori WebSocket API (HTML5)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: dezvoltare – exemplificări

ASP.NET MVC + Web API (C# et al.): www.asp.net/web-api

Express, LoopBack, Sails, Superagent (Node.js)www.npmjs.com/search?q=REST&ranking=popularity

JAX-RS (Java API for RESTful Web Services)github.com/jax-rs

Restlet (Java)restlet.com/open-source/

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: dezvoltare – exemplificări

Cornice, Django, Eve, Pecan (Python)

Grape, RESTRack, Ruby on Rails (Ruby)www.ruby-toolbox.com/categories/API_Builders

micro-framework-uri PHP populare:Fat-Free – fatfreeframework.com

Lumen – lumen.laravel.com

Slim – www.slimframework.com

Siler – siler.leocavalcante.dev

a se consulta și github.com/marmelab/awesome-rest

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: dezvoltare

Servicii publice ce pot fi consumate via REST – exemple:AIDSInfo, Amazon, Basecamp, Blip.tv, DBpedia, eBay,

Ericsson, Facebook, GitHub, Google, ISBNdb, LinkedIn, Mastercard, Open Movie Database, Pipl, Quora, Tumblr,

Wikidata,…

de explorat situl ProgrammableWebwww.programmableweb.com/category/all/apis

+lista API-urilor publice

github.com/abhishekbanthia/Public-APIs

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Putea utiliza servicii Web (API-uri)pentru autorizare și autentificare?

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

autorizare

Etape esențiale:

obținere cheie de acces 🔑

autentificarea + autorizarea aplicației ⎆⧉

obținerea acordului utilizatorului ⌨⍝👀

apelarea funcționalităților serviciului (via API)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

autorizare

Pași uzuali de urmat pentru implementarea unei aplicații ce va invoca un serviciu Web pe baza unui API public:

(1) înregistrarea aplicației conceputevia situl entității furnizoare a serviciului

cheie de acces – API key, consumer key, developer key

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

autorizare

Pași uzuali de urmat pentru implementarea unei aplicații ce va invoca un serviciu Web pe baza unui API public:

(2) pe baza acestei chei, aplicația se va putea autentificapentru a putea fi autorizată să acceseze serviciul dorit

pot fi impuse diverse politici de acces (permissions):doar consultare (read), posibilitatea editării etc.

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

autorizare

Pași uzuali de urmat pentru implementarea unei aplicații ce va invoca un serviciu Web pe baza unui API public:

(3) autentificarea și autorizarea aplicațieiau loc cu acordul utilizatorului

dacă utilizatorul nu este autentificat, i se vor solicitainformațiile de autentificare (e.g., nume + parola)

– eventual, folosind 2FA (Two Factor Auth) –,apoi va putea autoriza aplicația să aibă acces la date

via serviciul Web furnizat

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

autorizare

Pași uzuali de urmat pentru implementarea unei aplicații ce va invoca un serviciu Web pe baza unui API public:

(4) aplicația apelează funcționalitățile oferite de serviciupentru preluarea/modificarea datelor de interes,

conform politicilor de acces

sesiunea curentă va fi stabilită și menținutăpe baza unor informații de autentificare (auth tokens)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

oauth

Autorizarea unei aplicații să acceseze date private într-un mod standardizat – pe baza tehnologiilor

Web actuale – se poate realiza via OAuth

protocol deschis – RFC 6749OAuth 1.0 (2010), OAuth 2.0 (2012)

oauth.net/2/

L. Spyna, An OAuth 2.0 Introduction for Beginners (2018):itnext.io/an-oauth-2-0-introduction-for-beginners-6e386b19f7a9

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

securitatea datelor

autorizarea prin OAutha aplicației JS Bin

pentru a obține accesul la datele unui utilizator

deținute de GitHub

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

securitatea datelor

procesele de autorizare a accesului la o resursă Webconform Dominik Mengelt (2013)

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

securitatea datelor

exemplu concret – Facebook: autorizare cu diverse permisiuni – e.g., age_range, email (acces la adresa de e-mail a unui utilizator),

public_profile, user_birthday, user_hometown, user_friends, user_likes, user_photos, rsvp_event și altele

developers.facebook.com/docs/facebook-login/permissions/v2.0

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

oauth

Biblioteci (server și/sau client) disponibile pentru C, C++, Go, Erlang, Java, JavaScript, Objective-C, .NET,

Perl, PHP, Python, Ruby, Swift,…

oauth.net/code/

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

oauth

Servicii proxy de autentificare/autorizare prin OAuth

Auth0 – auth0.com

Hydra – github.com/ory/hydra

OAuth – oauth.io

Okta – developer.okta.com

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: dezvoltare – oauth

exemplificare: hello.js – soluție modulară, la nivel de client, vizând autentificarea și

accesarea serviciilor Web via RESTadodson.com/hello.js/

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

oauth

Autorizare via servicii Web specifice – exemple:

GitHub – developer.github.com/v3/oauth/

Google – developers.google.com/identity/protocols/OAuth2

LinkedIn – developer.linkedin.com/docs/oauth2

Live Connect (Microsoft) – http://tinyurl.com/zztr97h

Stack Exchange – api.stackexchange.com/docs/authentication

Twitter – dev.twitter.com/oauth

WordPress – developer.wordpress.com/docs/oauth2/

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: dezvoltare – openid

de experimentat accesul la diverse date (e.g., persoane de contact via Google Contacts API) pe baza OAuth 2.0 Playground

developers.google.com/oauthplayground/

sesiunea curentă e păstrată într-un jeton (token) JSON

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

autentificare

Metode de autentificare:

bazate pe sesiunea Web via SID (Session IDentifier)

implicit, Web-ul e stateless

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

autentificare

Metode de autentificare:

folosind jetoane (tokens)

token based authentication

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

autentificare

Metode de autentificare:

fără parolă (passwordless)

one-time-use URL

exemplu: Tumblr

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

autentificare

Metode de autentificare:

SSO (Single Sign-On)

autentificarea utilizatorilor în cadrul mai multor aplicații înrudite

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

autentificare

Metode de autentificare:

autentificare socială via alte conturi de utilizator

de exemplu, via rețele sociale sau alte situri Web de încredere

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

autentificare

Metode de autentificare:

2FA (Two-Factor Authentication)

utilizatorul trebuie să ofere minim 2 probe (factors) referitoare la identitatea sa

cunoștințe ori obiecte deținute exclusiv de acea persoană

de studiat și TOTP (Time-Based One-Time Password Algorithm) – RFC 6238: tools.ietf.org/html/rfc6238

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rest: dezvoltare

autentificare multi-factor (2FA): twofactorauth.org

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

autentificare

Metode de autentificare:

autentificare biometrică

bazate pe amprentă (fingerprint recognition)recunoașterea facială sau a unor organe

scanarea ochiului (iris, retină)identificare vocală

analizarea codului genetic (DNA matching)

www.biometricsinstitute.org

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

autentificare

Metode de autentificare:

autentificare via dispozitiv hardware

exemplu tipic: smartcard

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

autentificare

Metode de autentificare – privire de ansamblu:

bazate pe sesiunea Webfolosind jetoane (token based authentication)

fără parolă (passwordless)SSO (Single Sign-On)autentificare socială

2FA (Two-Factor Authentication)autentificare biometrică

autentificare via dispozitiv hardware

hackernoon.com/how-do-you-authenticate-mate-f2b70904cc3a

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

openid

OpenID

manieră descentralizată de autentificare a utilizatoruluila nivel de Web pe baza paradigmei SSO

utilizatorul poate demonstra că deține un URL specificmenit a-l identifica on-line via un ofertant (serviciu)

de identitate digitală (identity provider)e.g., folosind o aplicație Web socială

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

openid

Fiecare identitate a unui utilizator e desemnată de un URL (stabilit de identity provider)

exemplu: steamcommunity.com/openid/id/steamid

pentru a-și confirma identitatea,utilizatorul va trebui să se autentifice:

nume de cont + parolă, smart card, date biometrice,…

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

openid

OpenID Connect

oferă un nivel vizând identitatea utilizatorului (identity layer) pe baza protocolului OAuth 2

formatul de date folosit: JWT – JSON Web Tokenstandardizat de RFC 7519

openid.net/connect/

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

openid

OpenID Connect

biblioteci open source disponibilepentru C, C#, Java, JavaScript, PHP, Python, Ruby,…

openid.net/developers/libraries/

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

openid

OpenID Connect

suport oferit de serverul Web:

mod_auth_openidc – modul Apachegithub.com/pingidentity/mod_auth_openidc

L. Crilly, Authenticating API Clients with JWT (2016)www.nginx.com/blog/authenticating-api-clients-jwt-nginx-plus/

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Mesaje – de autentificare sau interschimb de informații –

vehiculate în format JWT

resurse de interes + instrumente oferite de jwt.io

jeton JWT

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

openid

În conjuncție cu JWT, a se considera specificațiileJOSE – JSON Object Signing and Encryption:

specificarea semnăturilor digitaleJWS – JSON Web Signature: tools.ietf.org/html/rfc7515

definirea metodelor criptograficeJWE – JSON Web Encryption: tools.ietf.org/html/rfc7516

reprezentarea cheilor criptograficeJWK – JSON Web Key: tools.ietf.org/html/rfc7517

identificarea & înregistrarea algoritmilor criptograficiJWA – JSON Web Algorithms: tools.ietf.org/html/rfc7518

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rezumat

⤄aplicații orientate spre servicii Web în stilul REST

aspecte vizând autorizarea și autentificarea

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

episodul viitor: arhitectura aplicațiilor Webde la API-uri și mashup-uri la proiectare arhitecturală