Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Tehnologii Web
servicii Web (III)
micro-servicii
serverless
GraphQL
Dr. Sabin C...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
„Toate erau laolaltă – după aceea, a venit mintea
și le-a pus în ordine.”
Anaxa...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
dezvoltarea aplicațiilor Web
Serviciu Web
software – utilizat la distanță de al...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Există alternative la servicii Web?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
micro-servicii
Implementează o funcționalitate specifică,
oferită la nivel de u...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
small
each running in its own process
lightweight communication mechanisms (usu...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
aplicație monolitică
(N funcționalități într-un unic proces)
◉ ▲
✸ ⧓
◉ ▲
✸ ⧓
◉ ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
aplicație monolitică
(N funcționalități într-un unic proces)
◉ ▲
✸ ⧓
◉ ▲
✸ ⧓
◉ ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Beneficii ale micro-serviciilor:
izolare
autonomie
scalabilitate individuală
re...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
micro-servicii
Funcționale (functional services)
implementează funcționalităti ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
micro-servicii
Funcționale (functional services)
implementează funcționalităti ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
micro-servicii
Control – infrastructură (infrastructure services)
implementează...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
micro-servicii
Control – infrastructură (infrastructure services)
implementează...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
implementare
de la cereri efectuate de client la obținerea răspunsului
oferit d...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
micro-servicii
Aspect de interes:
proprietar – ownership
+
coordonare – coordin...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
micro-servicii
Aspect de interes:
partajarea funcționalităților
share-as-much-a...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
micro-servicii
Aspect de interes:
comunicarea – uzual, asincronă – între (micro...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
implementare
intern, (micro-)serviciile pot comunica recurgând la
publish-subsc...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
micro-servicii
Uzual, arhitecturile ce recurg la micro-servicii
nu includ compo...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
micro-servicii
Uzual, arhitecturile ce recurg la micro-servicii
nu includ compo...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
arhitectură bazată
pe servicii Web
arhitectură recurgând
la microservicii
Z. De...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
micro-servicii: dezvoltare
Platforme:
Apache OpenWhisk, Dapr, Express Serverles...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
API
Accesul la un (micro-)serviciu are loc uzual
pe baza unei interfețe de prog...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Accesul la un (micro-)serviciu are loc uzual
pe baza unei interfețe de programa...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
API „de succes” – adaptare după (Bloch, 2005)
ușor de învățat
facil de folosit,...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Componentă software concepută și invocată
via tehnologiile Web actuale
(URI, HT...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
implementare
De la aplicații la API-uri și servere de aplicații
Brian Mulloy, W...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
API public
(disponibil pe baza unei licențe de utilizare)
versus
API privat
(pe...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
browser
modern
prezen-
tare
proce-
sare
abstrac-
tizare
date
recurgere la API
J...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
browser
modern
prezen-
tare
proce-
sare
abstrac-
tizare
date
recurgere la API
J...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sistem
de
operare
prezen-
tare
proce-
sare
abstrac-
tizare
date
recurgere la AP...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sistem
de
operare
prezen-
tare
proce-
sare
abstrac-
tizare
date
recurgere la AP...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
brow-
ser
prezen-
tare
proce-
sare
abstrac-
tizare
date
API
JSON
et al.
server ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
API: instrumente de testare
Utilitarul curl + biblioteca libcurl – curl.haxx.se...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
API: în contextul serverless
avansat
Aplicația depinde semnificativ de
componen...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
API: în contextul serverless
Serverless
strat de abstractizare a accesului la r...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
brow-
ser
control
proce-
sare
client
modern
BaaS
func-
ționa-
litate1
func-
țio...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
API: în contextul serverless
FaaS – Functions As A Service
funcții (cloud funct...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
API: în contextul serverless
FaaS – Functions As A Service
funcții (cloud funct...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
API: în contextul serverless
FaaS – Functions As A Service
executate – la nivel...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
API: în contextul serverless
FaaS – Functions As A Service
executate – la nivel...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
API: în contextul serverless
BaaS – Backend As A Service
încapsulează servicii ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
API: în contextul serverless
BaaS – Backend As A Service
încapsulează servicii ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
API: în contextul serverless
Serverless computing = FaaS + BaaS
a se consulta ș...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Cum poate fi descrisă interfața unui API?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
OpenAPI Specification (ex-Swagger) – openapis.org
RAML (RESTful API Modeling La...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
OpenAPI Specification
soluție modernă de a declara – independent de platformă –...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
OpenAPI Specification
biblioteci de procesare – exemple:
KaiZen OpenAPI Parser ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
OpenAPI Specification
creare de servicii (puncte terminale – end-points)
pe baz...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
OpenAPI Specification
generatoare de cod – exemplificări:
BaucisJS (Node.js)
gn...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
API: descriere abstractă
OpenAPI Map
openapi-map.apihandyman.io/?version=3.0
ex...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
API: descriere abstractă
{ // specificăm accesul la o resursă: GET /resource?pa...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
editarea unei specificații de API
proiectul UReR (V. Vîrlan et al., 2017)
githu...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
avansat
inspectarea
specificației
unui API cu
Apicurio Studio
www.apicur.io
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
avansat
instrumente OpenAPI pentru conversie, validare,
documentare, generare d...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
API: descriere abstractă
avansat
o listă de API-uri publice însoțite de specifi...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Putea utiliza servicii Web (API-uri)
pentru autorizare și autentificare?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autorizare
Etape esențiale:
obținere cheie de acces 🔑

autentificarea + autori...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autorizare
Pași uzuali de urmat pentru implementarea unei aplicații
ce va invoc...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autorizare
Pași uzuali de urmat pentru implementarea unei aplicații
ce va invoc...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autorizare
Pași uzuali de urmat pentru implementarea unei aplicații
ce va invoc...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autorizare
Pași uzuali de urmat pentru implementarea unei aplicații
ce va invoc...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autorizare
Pași uzuali de urmat pentru implementarea unei aplicații
ce va invoc...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autorizare
Pași uzuali de urmat pentru implementarea unei aplicații
ce va invoc...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autorizare
Pași uzuali de urmat pentru implementarea unei aplicații
ce va invoc...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autorizare
Pași uzuali de urmat pentru implementarea unei aplicații
ce va invoc...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
oauth
Autorizarea unei aplicații să acceseze date private
într-un mod standardi...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
oauth
Autorizarea unei aplicații să acceseze date private
într-un mod standardi...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
oauth
Tutoriale introductive:
L. Spyna, An OAuth 2.0 Introduction for Beginners...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
securitatea datelor
autorizarea prin OAuth
a aplicației JS Bin
pentru a obține ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
securitatea datelor
procesele de autorizare a accesului la o resursă Web
confor...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
securitatea datelor
exemplu concret – Facebook:
autorizare cu diverse permisiun...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
oauth
Biblioteci (server și/sau client) disponibile pentru
C, C++, Go, Erlang, ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
oauth
Servicii proxy de autentificare/autorizare prin OAuth
Auth0 – auth0.com/d...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: dezvoltare – oauth
exemplificare: helloJS – soluție modulară,
la nivel de...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
oauth
Autorizare via servicii Web specifice – exemple:
GitHub – developer.githu...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: dezvoltare – openid
de experimentat accesul la diverse date (e.g., persoa...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/www.bonkersworld.net/best-social-network-ever/
(în loc de) pauză
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autentificare
Metode de autentificare:
bazate pe sesiunea Web via SID (Session ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autentificare
Metode de autentificare:
folosind jetoane (tokens)
token based au...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autentificare
Metode de autentificare:
fără parolă (passwordless)
one-time-use ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autentificare
Metode de autentificare:
SSO (Single Sign-On)
autentificarea util...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autentificare
Metode de autentificare:
autentificare socială via alte conturi d...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autentificare
Metode de autentificare:
2FA (Two-Factor Authentication)
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autentificare
Metode de autentificare:
2FA (Two-Factor Authentication)
utilizat...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rest: dezvoltare
soluții de autentificare multi-factor (2FA)
pentru diverși ofe...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autentificare
Metode de autentificare:
autentificare biometrică
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autentificare
Metode de autentificare:
autentificare biometrică
bazate pe ampre...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autentificare
Metode de autentificare:
autentificare via dispozitiv hardware
ex...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
autentificare
Metode de autentificare – privire de ansamblu:
bazate pe sesiunea...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
openid
OpenID
manieră descentralizată de autentificare a utilizatorului
la nive...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
openid
OpenID
manieră descentralizată de autentificare a utilizatorului
la nive...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
openid
Fiecare identitate a unui utilizator e desemnată de un URL
(stabilit de ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
openid
Fiecare identitate a unui utilizator e desemnată de un URL
(stabilit de ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
openid
OpenID Connect
oferă un nivel vizând identitatea utilizatorului
(identit...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Un jeton (token) JWT include un obiect JSON folosit
pentru interschimb „sigur” ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Un jeton (token) JWT include un obiect JSON folosit
pentru interschimb „sigur” ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Un jeton (token) JWT include un obiect JSON folosit
pentru interschimb „sigur” ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Un jeton (token) JWT include un obiect JSON folosit
pentru interschimb „sigur” ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Un jeton (token) JWT include un obiect JSON folosit
pentru interschimb „sigur” ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Mesaje – de autentificare sau
interschimb de informații
de autorizare (credenti...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
openid
OpenID Connect
biblioteci open source disponibile
pentru C, C#, Java, Ja...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
openid
OpenID Connect
suport oferit de serverul Web:
mod_auth_openidc – modul A...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
openid
În conjuncție cu JWT, a se considera specificațiile
JOSE – JSON Object S...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Există alternative privitoare la REST?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
Graph Query Language
“a query language for APIs...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
Graph Query Language
declarativ
inspirat de JSO...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
Graph Query Language
sunt permise interogări (q...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
Graph Query Language
sunt permise interogări (q...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
Graph Query Language
relațiile dintre diverse (...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
Graph Query Language
răspunsul oferit include d...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
Graph Query Language
răspunsul oferit include d...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
GraphQL ca alternativă la dezvoltarea de servic...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
Aspecte de considerat de către implementatori:
...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
Instrumente pentru dezvoltatori:
implementare d...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
Instrumente pentru dezvoltatori:
de experimenta...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
Instrumente pentru dezvoltatori:
de experimenta...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
Instrumente pentru dezvoltatori:
o abordare arh...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
Instrumente pentru dezvoltatori:
de experimenta...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
Instrumente pentru dezvoltatori:
servere GraphQ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
exemple de interogări GraphQL ale unor API-uri ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
un posibil rezultat al interogării GraphQL +
sc...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
posibilă manieră de semnalare a erorilor/excepț...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
testarea interactivă cu GraphiQL
– github.com/g...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
Alte exemplificări:
AWS AppSync – sincronizare ...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
Resurse de interes, studii de caz, noutăți:
Awe...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
Alternativă:
PartiQL
inițiativă Amazon, necesit...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
model de acces la date: graphql
Alternativă:
TreeQL
inspirat de REST și GraphQL...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
🛍
comerț
electronic
🗺
turism
🎛
monitorizare
🔮 📈
prognoze
(finanțe,
transport,…)...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
anumite funcționalități pot fi gestionate
„în propria ogradă” (on-premises) sau...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
A. Barron, Pizza As A Service (2014)
www.linkedin.com/pulse/20140730172610-9679...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
D. Ng, SaaS, PaaS and IaaS explained in one graphic (2017)
m.oursky.com/saas-pa...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
P. Kerrison, Pizza As A Service 2.0 (2017)
www.paulkerrison.co.uk/random/pizza-...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rezumat
dezvoltare de servicii Web
◳de la micro-servicii și specificarea API-ur...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
episodul viitor:
transfer asincron al datelor via Ajax
aplicații Web de tip mas...
Nächste SlideShare
Wird geladen in …5
×

Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-urilor. Alternative la REST

161 Aufrufe

Veröffentlicht am

Prelegere din cadrul materiei "Tehnologii Web" predată de Dr. Sabin Buraga.
Resurse suplimentare la https://profs.info.uaic.ro/~busaco/teach/courses/web/web-film.html

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-urilor. Alternative la REST

  1. 1. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ Tehnologii Web servicii Web (III) micro-servicii serverless GraphQL Dr. Sabin Corneliu Buraga – profs.info.uaic.ro/~busaco/
  2. 2. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ „Toate erau laolaltă – după aceea, a venit mintea și le-a pus în ordine.” Anaxagoras
  3. 3. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ dezvoltarea aplicațiilor Web Serviciu Web software – utilizat la distanță de alte aplicații/servicii – oferind o funcționalitate specifică implementarea sa nu trebuie cunoscută de programatorul ce invocă serviciul a se revedea prelegerile anterioare
  4. 4. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ Există alternative la servicii Web?
  5. 5. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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
  6. 6. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ small each running in its own process lightweight communication mechanisms (usual, HTTP) built around business capabilities independently deployable minimum of centralized management may be written in different programming languages may use different data storage mechanisms caracteristici ale micro-serviciilor conform James Lewis & Martin Fowler, Microservices (2014) martinfowler.com/articles/microservices.html avansat
  7. 7. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ aplicație monolitică (N funcționalități într-un unic proces) ◉ ▲ ✸ ⧓ ◉ ▲ ✸ ⧓ ◉ ▲ ✸ ⧓ ◉ ▲ ✸ ⧓ ◉ ▲ ✸ ⧓ scalabilitate prin replicarea monolitului pe S servere scalabilitate prin distribuirea serviciilor între servere, replicându-le conform necesităților ◉ ▲ ✸ micro-servicii (fiecare funcționalitate  serviciu separat) ◉ ◉ ▲ ▲ ◉ ✸ ▲ ▲ ✸ ✸ ▲ ✸ micro-serviciu modularitate, descentralizare și evoluție permanentă avansat
  8. 8. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ aplicație monolitică (N funcționalități într-un unic proces) ◉ ▲ ✸ ⧓ ◉ ▲ ✸ ⧓ ◉ ▲ ✸ ⧓ ◉ ▲ ✸ ⧓ ◉ ▲ ✸ ⧓ scalabilitate prin replicarea monolitului pe S servere scalabilitate prin distribuirea serviciilor între servere, replicându-le conform necesităților ◉ ▲ ✸ micro-servicii (fiecare funcționalitate  serviciu separat) ◉ ◉ ▲ ▲ ◉ ✸ ▲ ▲ ✸ ✸ ▲ ✸ exemple de bună practică + alte resurse: microservices.io avansat
  9. 9. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ Beneficii ale micro-serviciilor: izolare autonomie scalabilitate individuală reziliență viteză suport pentru experimentare feedback rapid flexibilitate ușor de înlocuit ecosistem S. Tilkov, A Question of Size – Modularization & Microservices, Java Forum Nord 2017: speakerdeck.com/stilkov/a-question-of-size-modularization-and-microservices avansat
  10. 10. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ micro-servicii Funcționale (functional services) implementează funcționalităti specifice (business operations) avansat
  11. 11. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ micro-servicii Funcționale (functional services) implementează funcționalităti specifice (business operations) expuse consumatorului de servicii independente (fără efecte colaterale – no side effects) nu sunt partajabile uzual avansat
  12. 12. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ micro-servicii Control – infrastructură (infrastructure services) implementează activități non-funcționale: autentificare, autorizare, jurnalizare, monitorizare,… avansat
  13. 13. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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
  14. 14. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ implementare de la cereri efectuate de client la obținerea răspunsului oferit de API via micro-servicii funcționale bazate pe cele vizând infrastructura M. Richards, Microservices vs. Service-Oriented Architecture (2016) www.nginx.com/resources/library/microservices-vs-soa/ client requests API layer functional service infrastructure service avansat
  15. 15. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ micro-servicii Aspect de interes: proprietar – ownership + coordonare – coordination avansat
  16. 16. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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
  17. 17. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ micro-servicii Aspect de interes: comunicarea – uzual, asincronă – între (micro-)servicii abordări: point-to-point sau publish-subscribe avansat
  18. 18. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ implementare intern, (micro-)serviciile pot comunica recurgând la publish-subscribe – WebSub (recomandare W3C, 2018): www.w3.org/TR/websub/ simplificarea accesului clientului via API Jonas Bonér (2016) avansat service serviceservice API gateway service events events sub subscribe
  19. 19. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ micro-servicii Uzual, arhitecturile ce recurg la micro-servicii nu includ componente middleware și nu oferă suport pentru abstractizarea interacțiunii dintre producătorii și consumatorii de servicii (contract decoupling) avansat
  20. 20. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ micro-servicii Uzual, arhitecturile ce recurg la micro-servicii nu includ componente middleware și nu oferă suport pentru abstractizarea interacțiunii dintre producătorii și consumatorii de servicii (contract decoupling) μSOA – Microservice Oriented Architecture avansat
  21. 21. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ arhitectură bazată pe servicii Web arhitectură recurgând la microservicii Z. Dehghani, How to break a Monolith into Microservices (2018) martinfowler.com/articles/break-monolith-into-microservices.html cazuri concrete: Amazon, Groupon, Netflix, Twitter,… de studiat prezentările lui Stefan Tilkov: speakerdeck.com/stilkov frontend (FE) ser- vice ser- vice ser- vice DB client ser- vice DB FE FE FE client DB ser- vice ser- vice DB avansat
  22. 22. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ micro-servicii: dezvoltare Platforme: Apache OpenWhisk, Dapr, Express Serverless, M3O,… Framework-uri: Akka, Baratine, Finagle, Ice, Moleculer, Vert.X, Wangle etc. SDK-uri multi-limbaj: Apex, CoAP, gRPC, Hprose multe alte instrumente software enumerate la github.com/mfornos/awesome-microservices avansat
  23. 23. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ API Accesul la un (micro-)serviciu are loc uzual pe baza unei interfețe de programare a aplicației API (Application Programming Interface)
  24. 24. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ Accesul la un (micro-)serviciu are loc uzual pe baza unei interfețe de programare a aplicației API (Application Programming Interface) “any well-defined interface that defines the service that one component, module, or application provides to other software elements” (de Souza et al., 2004) API
  25. 25. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ API „de succes” – adaptare după (Bloch, 2005) ușor de învățat facil de folosit, chiar și în lipsa documentației previne utilizarea eronată stabil și sigur ușor de menținut suficient de expresiv facil de extins vezi și S. Clarke, “Measuring API Usability”: drdobbs.com/windows/184405654 API
  26. 26. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ Componentă software concepută și invocată via tehnologiile Web actuale (URI, HTTP, formate de date: JSON, XML) poate fi dezvoltată conform unui stil arhitectural e.g., REST (REpresentational State Transfer) vezi cursul trecut API
  27. 27. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ implementare De la aplicații la API-uri și servere de aplicații Brian Mulloy, Web API Design, Apigee, 2016 docs-apis.apigee.io/files/Web-design-the-missing-link-ebook-2016-11.pdf 😍 customer ⧉ app  dev 💡 API 👨‍👩‍👧‍👦 API team ⛮  🛢️ backend
  28. 28. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ API public (disponibil pe baza unei licențe de utilizare) versus API privat (pentru uz intern) API
  29. 29. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ browser modern prezen- tare proce- sare abstrac- tizare date recurgere la API JSON, XML, CSV,… server „slab” (thin) client Web modern (HTML5 APIs) aplicație JavaScript (eventual, via app store) API: abordare client – JavaScript browser Web pe calculatoare convenționale, dispozitive mobile și altele
  30. 30. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ browser modern prezen- tare proce- sare abstrac- tizare date recurgere la API JSON, XML, CSV,… server „slab” (thin) client Web modern (HTML5 APIs) aplicație JavaScript (eventual, via app store) implementarea aplicației JavaScript poate recurge la biblioteci, framework-uri, componente specifice e.g., Angular, React, Riot.js, Svelte, Vue API: abordare client – JavaScript
  31. 31. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ sistem de operare prezen- tare proce- sare abstrac- tizare date recurgere la API JSON, XML, CSV,… server „slab” (thin) client nativ modern (smart device) aplicație nativă C#, Kotlin, Swift,… (uzual, via app store) API: aplicații native desktop și/sau mobile, smart TV, home appliance, dispozitiv ambiental
  32. 32. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ sistem de operare prezen- tare proce- sare abstrac- tizare date recurgere la API JSON, XML, CSV,… server „slab” (thin) client nativ modern (smart device) aplicație nativă C#, Kotlin, Swift,… (uzual, via app store) implementarea aplicației native poate recurge la biblioteci, framework-uri, componente specifice e.g., Apache Cordova, Flutter, Ionic, React Native, NW.js API: aplicații native
  33. 33. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ brow- ser prezen- tare proce- sare abstrac- tizare date API JSON et al. server „slab” (thin) client Web „prostuț” (dumb) server de prezentare pagini HTML www.leaseweblabs.com/2013/10/api-first-architecture-fat-vs-thin-server-debate/ API: abordare bazată pe intermediari book reader chioșc informativ automobil
  34. 34. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ API: instrumente de testare Utilitarul curl + biblioteca libcurl – curl.haxx.se HTTPbin – httpbin.org Insomnia – insomnia.rest Postman – www.postman.com Postwoman – postwoman.io REST Test Test – resttesttest.com
  35. 35. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ API: în contextul serverless avansat Aplicația depinde semnificativ de componente externe, disponibile în „nori” (micro-)servicii expuse via API  abordarea serverless
  36. 36. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ API: în contextul serverless Serverless strat de abstractizare a accesului la resursele unei platforme de tip cloud Mike Roberts (2018) martinfowler.com/articles/serverless.html avansat
  37. 37. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ brow- ser control proce- sare client modern BaaS func- ționa- litate1 func- ționa- litate2 auten- tificare ☁ BaaS = (Mobile) Backend As A Service FaaS = Functions As A Service FaaS căutare procesare comenzi BaaS comenzi produse acces la API API: în contextul serverless avansat ☁ ☁ ☁
  38. 38. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ API: în contextul serverless FaaS – Functions As A Service funcții (cloud functions) implementând funcționalități expuse consumatorului de servicii avansat
  39. 39. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ API: în contextul serverless FaaS – Functions As A Service funcții (cloud functions) implementând funcționalități expuse consumatorului de servicii as small as possible uzual, implementări sub 100 de linii de cod avansat
  40. 40. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ API: în contextul serverless FaaS – Functions As A Service executate – la nivel de server – independent și asincron, fără a cauza efecte colaterale avansat
  41. 41. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ API: în contextul serverless FaaS – Functions As A Service executate – la nivel de server – independent și asincron, fără a cauza efecte colaterale declanșate de evenimente utilizatorul nu e preocupat de managementul resurselor și alte sarcini avansat
  42. 42. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ API: în contextul serverless BaaS – Backend As A Service încapsulează servicii de infrastructură ce implementează activități non-funcționale (autentificare, autorizare, jurnalizare, monitorizare etc.) avansat
  43. 43. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ API: în contextul serverless BaaS – Backend As A Service încapsulează servicii de infrastructură ce implementează activități non-funcționale (autentificare, autorizare, jurnalizare, monitorizare etc.) private – nu sunt expuse în exterior pot fi partajate de serviciile interne avansat
  44. 44. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ API: în contextul serverless Serverless computing = FaaS + BaaS a se consulta și articolul Sabin Buraga, Aspecte arhitecturale vizând dezvoltarea de aplicații serverless (2019) itransfer.space/aspecte-arhitecturale-vizand-dezvoltarea-de-aplicatii-serverless/ resurse + soluții software: github.com/anaibol/awesome-serverless avansat
  45. 45. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ Cum poate fi descrisă interfața unui API?
  46. 46. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ OpenAPI Specification (ex-Swagger) – openapis.org RAML (RESTful API Modeling Language) – raml.org API Blueprint – apiblueprint.org alte resurse de interes: github.com/Kikobeats/awesome-api API: descriere abstractă avansat
  47. 47. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ OpenAPI Specification soluție modernă de a declara – independent de platformă – interfața publică a unui API REST versiunea curentă: OpenAPI 3.0.3 (februarie 2020) formate folosite: JSON și/sau YAML API: descriere abstractă avansat
  48. 48. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ OpenAPI Specification biblioteci de procesare – exemple: KaiZen OpenAPI Parser (Java) Microsoft.OpenApi.net (C#) Open API Definition Parser (Ruby) Spectral (JavaScript, TypeScript) API: descriere abstractă avansat
  49. 49. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ OpenAPI Specification creare de servicii (puncte terminale – end-points) pe baza unui document OpenAPI: Exegesis (Node.js) FastAPI (Python) Fusio (PHP, JavaScript) PHP-CRUD-API (PHP) Vert.x (Java, Kotlin, JS, Ruby, Scala,…) API: descriere abstractă avansat
  50. 50. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ OpenAPI Specification generatoare de cod – exemplificări: BaucisJS (Node.js) gnostic (Go) WebSphere Liberty (Java) ZRO (Ruby on Rails) API: descriere abstractă avansat
  51. 51. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ API: descriere abstractă OpenAPI Map openapi-map.apihandyman.io/?version=3.0 explorarea vizuală a construcțiilor OpenAPI Specification
  52. 52. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ API: descriere abstractă { // specificăm accesul la o resursă: GET /resource?param "openapi": "3.0.0", "paths": { // căi (URL-uri) spre resursele oferite de API-ul REST "/resource": { // acces la reprezentarea resursei desemnate de /resource "get": { // metoda HTTP: GET, HEAD, POST, PUT, PATCH, DELETE "operationId": "service", // specifică numele unic al operației dorite "parameters": [ { // lista parametrilor "name": "param", "in": "query", // parametru adăugat URL-ului (în query string) "schema": { "type" : "string" } } ], "responses": { // răspunsuri oferite (succes, eroare,…) "200": { // cod de stare HTTP: 200, 400, 403, 405, 500 "description": "Success", "schema": { // descrie (cu JSON Schema) răspunsul oferit "$ref":"#/definitions/Response" } } } } } „scheletul” unui document OpenAPI specificând un API REST
  53. 53. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ editarea unei specificații de API proiectul UReR (V. Vîrlan et al., 2017) github.com/VirlanValentin/WADe_UReR avansat
  54. 54. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ avansat inspectarea specificației unui API cu Apicurio Studio www.apicur.io
  55. 55. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ avansat instrumente OpenAPI pentru conversie, validare, documentare, generare de cod, testare etc. openapi.tools
  56. 56. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ API: descriere abstractă avansat o listă de API-uri publice însoțite de specificațiile OpenAPI în formatele JSON și YAML: apis.guru/browse-apis/
  57. 57. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ Putea utiliza servicii Web (API-uri) pentru autorizare și autentificare?
  58. 58. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ autorizare Etape esențiale: obținere cheie de acces 🔑  autentificarea + autorizarea aplicației ⎆ ⧉  obținerea acordului utilizatorului ⌨ ⍝ 👀  apelarea funcționalităților serviciului (via API)
  59. 59. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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 concepute via situl entității furnizoare a serviciului
  60. 60. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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 concepute via situl entității furnizoare a serviciului cheie de acces – API key, consumer key, developer key
  61. 61. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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 autentifica pentru a putea fi autorizată să acceseze serviciul dorit
  62. 62. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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 autentifica pentru a putea fi autorizată să acceseze serviciul dorit pot fi impuse diverse politici de acces (permissions): doar consultare (read), posibilitatea editării etc.
  63. 63. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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ției au loc cu acordul utilizatorului
  64. 64. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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ției au loc cu acordul utilizatorului dacă utilizatorul nu este autentificat, i se vor solicita informaț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
  65. 65. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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 serviciu pentru preluarea/modificarea datelor de interes, conform politicilor de acces
  66. 66. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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 serviciu pentru preluarea/modificarea datelor de interes, conform politicilor de acces sesiunea curentă va fi stabilită și menținută pe baza unor informații de autentificare – uzual, stocate și vehiculate via jetoane (auth tokens)
  67. 67. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ oauth Autorizarea unei aplicații să acceseze date private într-un mod standardizat – pe baza tehnologiilor Web actuale – se poate realiza via OAuth avansat
  68. 68. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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 6749 OAuth 1.0 (2010), OAuth 2.0 (2012), OAuth 2.1 (în lucru) oauth.net/2/ avansat
  69. 69. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ oauth Tutoriale introductive: L. Spyna, An OAuth 2.0 Introduction for Beginners (2018) itnext.io/an-oauth-2-0-introduction-for-beginners-6e386b19f7a9 A. Parecki, OAuth 2 Simplified (2014) aaronparecki.com/oauth-2-simplified/ avansat
  70. 70. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ securitatea datelor autorizarea prin OAuth a aplicației JS Bin pentru a obține accesul la datele unui utilizator deținute de GitHub avansat
  71. 71. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ securitatea datelor procesele de autorizare a accesului la o resursă Web conform Dominik Mengelt (2013) avansat
  72. 72. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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 avansat
  73. 73. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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/ avansat
  74. 74. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ oauth Servicii proxy de autentificare/autorizare prin OAuth Auth0 – auth0.com/docs/ Glewlwyd – github.com/babelouest/glewlwyd ORY Hydra – www.ory.sh/hydra/ OAuth – github.com/oauth-io Okta – developer.okta.com SimpleLogin – simplelogin.io/developer/ SSQ singon – github.com/ssqsignon avansat
  75. 75. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ rest: dezvoltare – oauth exemplificare: helloJS – soluție modulară, la nivel de client, vizând autentificarea și accesarea serviciilor Web via REST adodson.com/hello.js/ avansat
  76. 76. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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/ avansat
  77. 77. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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 avansat
  78. 78. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/www.bonkersworld.net/best-social-network-ever/ (în loc de) pauză
  79. 79. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ autentificare Metode de autentificare: bazate pe sesiunea Web via SID (Session IDentifier) implicit, Web-ul e stateless avansat
  80. 80. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ autentificare Metode de autentificare: folosind jetoane (tokens) token based authentication avansat
  81. 81. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ autentificare Metode de autentificare: fără parolă (passwordless) one-time-use URL exemplu: Tumblr avansat
  82. 82. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ autentificare Metode de autentificare: SSO (Single Sign-On) autentificarea utilizatorilor în cadrul mai multor aplicații înrudite avansat
  83. 83. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ autentificare Metode de autentificare: autentificare socială via alte conturi de utilizator de exemplu, via rețele sociale sau alte situri Web de încredere avansat
  84. 84. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ autentificare Metode de autentificare: 2FA (Two-Factor Authentication) avansat
  85. 85. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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 avansat
  86. 86. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ rest: dezvoltare soluții de autentificare multi-factor (2FA) pentru diverși ofertanți de servicii: twofactorauth.org avansat
  87. 87. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ autentificare Metode de autentificare: autentificare biometrică avansat
  88. 88. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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 avansat
  89. 89. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ autentificare Metode de autentificare: autentificare via dispozitiv hardware exemplu tipic: smartcard avansat
  90. 90. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ autentificare Metode de autentificare – privire de ansamblu: bazate pe sesiunea Web folosind 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 avansat
  91. 91. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ openid OpenID manieră descentralizată de autentificare a utilizatorului la nivel de Web pe baza paradigmei SSO avansat
  92. 92. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ openid OpenID manieră descentralizată de autentificare a utilizatorului la nivel de Web pe baza paradigmei SSO utilizatorul poate demonstra că deține un URL specific menit a-l identifica on-line via un ofertant (serviciu) de identitate digitală (identity provider) e.g., folosind o aplicație Web socială avansat
  93. 93. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ openid Fiecare identitate a unui utilizator e desemnată de un URL (stabilit de identity provider) exemplu: steamcommunity.com/openid/id/steamid avansat
  94. 94. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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,… avansat
  95. 95. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ openid OpenID Connect oferă un nivel vizând identitatea utilizatorului (identity layer) pe baza protocolului OAuth 2 formatul de date folosit: JWT – JSON Web Token standardizat de RFC 7519 openid.net/connect/ avansat
  96. 96. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ Un jeton (token) JWT include un obiect JSON folosit pentru interschimb „sigur” de date între două entități – uzual, un client ce invocă un serviciu Web (API) avansat
  97. 97. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ Un jeton (token) JWT include un obiect JSON folosit pentru interschimb „sigur” de date între două entități – uzual, un client ce invocă un serviciu Web (API) cazuri concrete: autorizare fiecare cerere a clientului autorizat pentru a invoca o funcționalitate a serviciului Web va include jetonul JWT corespunzător (în mod similar sesiunilor Web) avansat
  98. 98. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ Un jeton (token) JWT include un obiect JSON folosit pentru interschimb „sigur” de date între două entități – uzual, un client ce invocă un serviciu Web (API) cazuri concrete: interschimb de informații jetoanele JWT pot fi utilizate pentru asigurarea integrității schimbului de date (e.g., detectarea tentativelor de modificare neautorizată a informațiilor de către terțe entități) avansat
  99. 99. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ Un jeton (token) JWT include un obiect JSON folosit pentru interschimb „sigur” de date între două entități – uzual, un client ce invocă un serviciu Web (API) datele vehiculate pot fi verificate și considerate de încredere via semnături digitale avansat
  100. 100. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ Un jeton (token) JWT include un obiect JSON folosit pentru interschimb „sigur” de date între două entități – uzual, un client ce invocă un serviciu Web (API) datele vehiculate pot fi verificate și considerate de încredere via semnături digitale se folosesc diverși algoritmi de tip digest pentru a se asigura autenticitatea mesajelor (HMAC – Hash-based Message Authentication Code) în conjuncție cu perechi de chei criptografice publice/private avansat
  101. 101. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ Mesaje – de autentificare sau interschimb de informații de autorizare (credentials) – vehiculate în format JWT pe baza unui algoritm criptografic resurse de interes + instrumente oferite de jwt.io jeton JWT avansat algoritm + tip de jeton date propriu- zise info de verif. a semnăturii
  102. 102. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ openid OpenID Connect biblioteci open source disponibile pentru C, C#, Java, JavaScript, PHP, Python, Ruby,… openid.net/developers/libraries/ avansat
  103. 103. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ openid OpenID Connect suport oferit de serverul Web: mod_auth_openidc – modul Apache github.com/pingidentity/mod_auth_openidc L. Crilly, Authenticating API Clients with JWT (2016) www.nginx.com/blog/authenticating-api-clients-jwt-nginx-plus/ avansat
  104. 104. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ openid În conjuncție cu JWT, a se considera specificațiile JOSE – JSON Object Signing and Encryption: specificarea semnăturilor digitale JWS – JSON Web Signature: tools.ietf.org/html/rfc7515 definirea metodelor criptografice JWE – JSON Web Encryption: tools.ietf.org/html/rfc7516 reprezentarea cheilor criptografice JWK – JSON Web Key: tools.ietf.org/html/rfc7517 identificarea & înregistrarea algoritmilor criptografici JWA – JSON Web Algorithms: tools.ietf.org/html/rfc7518 avansat
  105. 105. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ Există alternative privitoare la REST?
  106. 106. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 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” graphql.org sub jurisdicția Linux Foundation gql.foundation avansat
  107. 107. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql Graph Query Language declarativ inspirat de JSON strict (strong-typed) avansat
  108. 108. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql Graph Query Language sunt permise interogări (queries) – operații de citire – și actualizări (mutations) – operații de alterare a datelor avansat
  109. 109. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql Graph Query Language sunt permise interogări (queries) – operații de citire – și actualizări (mutations) – operații de alterare a datelor se oferă suport pentru a anticipa ce date vor fi întoarse + structura acestora avansat
  110. 110. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql Graph Query Language relațiile dintre diverse (categorii de) resurse se pot specifica via conexiuni (connections) avansat
  111. 111. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql Graph Query Language răspunsul oferit include doar datele ce au fost solicitate îmbunătățirea performanței la nivel de client avansat
  112. 112. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql Graph Query Language răspunsul oferit include doar datele ce au fost solicitate îmbunătățirea performanței la nivel de client rezolvarea problemelor vizând over/under fetching (preluare a mai multor sau prea puține date) philsturgeon.uk/api/2017/01/24/graphql-vs-rest-overview/ nordicapis.com/is-graphql-the-end-of-rest-style-apis/ avansat
  113. 113. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql GraphQL ca alternativă la dezvoltarea de servicii via paradigma REST GraphQL REST entitate resursă resursă format JSON orice Media Type (MIME) frecvent: JSON protocol HTTP – uzual, adoptă convenții proprii independent de protocol (uzual, HTTP) cine decide ce date vor fi întoarse clientul serverul puncte terminale (endpoints) un singur punct terminal pentru a oferi date conexe, dacă au fost specificate relații între ele puncte terminale multiple (independente) tipuri de date strong (tipuri declarate explicit) weak (verificarea tipurilor de date nu e obligatorie) relație client-server fat client—fat server thin client—fat server documentare autodescriptiv (self-describing) necesită terțe soluții (e.g., OpenAPI Specification) viziune limbaj de interogare, specificație, colecție de instrumente stil arhitectural
  114. 114. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql Aspecte de considerat de către implementatori: probleme de securitate – e.g., autentificare, autorizare, refuz al serviciilor suportul pentru caching trebuie oferit explicit managementul versiunilor blog.pusher.com/rest-versus-graphql/ avansat
  115. 115. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql Instrumente pentru dezvoltatori: implementare de referință pentru server (Node.js) GraphQL.js graphql.org/graphql-js/ biblioteci disponibile pentru C, Go, Java, .NET, PHP, Python, Ruby, Swift, Typescript,… graphql.org/code/ avansat
  116. 116. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql Instrumente pentru dezvoltatori: de experimentat și Apollo – dev.apollodata.com avansat
  117. 117. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql Instrumente pentru dezvoltatori: de experimentat și Apollo – dev.apollodata.com suport la nivel de client (front-end): la nivel de Web via JavaScript – e.g., Angular, Vue, Meteor pentru aplicații bazate pe React, a se folosi Relay (Modern) – relay.dev soluții pentru Android (Java) și iOS (Swift) avansat
  118. 118. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql Instrumente pentru dezvoltatori: o abordare arhitecturală bazată pe micro-servicii GrAMPS (GraphQL Apollo Microservice Pattern Server) folosită de IBM gramps.js.org avansat
  119. 119. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql Instrumente pentru dezvoltatori: de experimentat și framework-ul Graphene implementări pentru limbajele de programare JavaScript – graphene-js.org + Python – graphene-python.org avansat
  120. 120. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql Instrumente pentru dezvoltatori: servere GraphQL concepute în Java – www.graphql-java.com Kotlin – expediagroup.github.io/graphql-kotlin/ avansat
  121. 121. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql exemple de interogări GraphQL ale unor API-uri publice (e.g., Giphy, Hacker News, Reddit): www.graphqlhub.com în acest caz, Twitter { twitter { search(q: "W3C", count: 5, result_type: mixed) { user { screen_name tweets_count } text created_at retweets(limit: 2) { user { name created_at } } } } avansat primele 5 mesaje având maxim 2 acțiuni (retweets) + meta-date (numărul de tweet-uri, data creării contului) vizând utilizatorii care le-au expus
  122. 122. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql un posibil rezultat al interogării GraphQL + schema de date vizând conceptul (resursa) User avansat rezultate schema
  123. 123. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql posibilă manieră de semnalare a erorilor/excepțiilor avansat { "data": { "twitter": { "errors": [ { "message": "Rate limit exceeded", "locations": [ { "line": 10, "column": 7 } ] } ] } } }
  124. 124. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql testarea interactivă cu GraphiQL – github.com/graphql/graphiql – a API-ul GitHub via GraphQL developer.github.com/v4/ conceptul Repository (depozit de cod-sursă) și proprietățile aferente avansatinterogare rezultate schema
  125. 125. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql Alte exemplificări: AWS AppSync – sincronizare în timp-real a datelor via servicii Amazon disponibile „în nori” docs.aws.amazon.com/appsync/latest/devguide/ Product Hunt – recomandare de produse via GraphQL api.producthunt.com/v2/docs Shopify – acces la date vizând comerțul electronic help.shopify.com/en/api/graphql-admin-api Yelp – acces la recenzii de produse/servicii www.yelp.com/developers/graphql/guides/intro avansat
  126. 126. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql Resurse de interes, studii de caz, noutăți: Awesome GraphQL github.com/chentsulin/awesome-graphql Open GraphQL dev.to/open-graphql G. Brito, M. Valente, REST vs GraphQL: A Controlled Experiment (2020) arxiv.org/abs/2003.04761 avansat
  127. 127. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql Alternativă: PartiQL inițiativă Amazon, necesitând Java pentru rulare (JVM) acces la date eterogene (relaționale, semi-structurate,…) independent de serverul de stocare, sub „umbrela” SQL, cu verificarea opțională a validității (optional schema) partiql.org avansat
  128. 128. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ model de acces la date: graphql Alternativă: TreeQL inspirat de REST și GraphQL implementare de referință în PHP7 răspunsul la o interogare reprezintă un „arbore” de obiecte JSON corespunzătoare structurii (relațiilor) bazei de date relaționale (SQL) interogate via REST treeql.org avansat
  129. 129. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ 🛍 comerț electronic 🗺 turism 🎛 monitorizare 🔮 📈 prognoze (finanțe, transport,…) 📰 👥 💬 știri comunic. interpersonală 🎬 🎪 amuzament software platformă ⚡⚡ putere de calcul 🗄🗄 stocare 📡 rețea 👾 identitate  baze de date 🛠⚙️ execuție software ✉️ procesare cozi de mesaje 🔐 securitate infrastructură Web – ingredient cheie al tehnologiilor în „nori” cloud computing 📺 🏡💻  📱🎮 🚕🌃
  130. 130. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ anumite funcționalități pot fi gestionate „în propria ogradă” (on-premises) sau de un furnizor de servicii disponibile „în nori” – conform (Eizadirad, 2017) www.linkedin.com/pulse/iaas-paas-saas-explained-compared-arsalan-eizadirad avansat
  131. 131. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ A. Barron, Pizza As A Service (2014) www.linkedin.com/pulse/20140730172610-9679881-pizza-as-a-service avansat
  132. 132. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ D. Ng, SaaS, PaaS and IaaS explained in one graphic (2017) m.oursky.com/saas-paas-and-iaas-explained-in-one-graphic-d56c3e6f4606 avansat
  133. 133. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ P. Kerrison, Pizza As A Service 2.0 (2017) www.paulkerrison.co.uk/random/pizza-as-a-service-2-0 avansat
  134. 134. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ rezumat dezvoltare de servicii Web ◳de la micro-servicii și specificarea API-urilor la serverless și accesul la date via GraphQL
  135. 135. Dr.SabinBuragaprofs.info.uaic.ro/~busaco/ episodul viitor: transfer asincron al datelor via Ajax aplicații Web de tip mash-up

×