18
Zahtjevno-Orijentirana Web Arhitektura |1 Zahtjevno-Orijentirana Web Arhitektura Web Arhitektura Vjeran Marčinko Kapsch Carrier Com

Zahtjevno-Orijentirana Web Arhitektura

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Zahtjevno-Orijentirana

Web Arhitektura

| 1Zahtjevno-Orijentirana Web Arhitektura

Web Arhitektura

Vjeran MarčinkoKapsch Carrier Com

Eksplozija klijentskih uređaja

| 2Zahtjevno-Orijentirana Web Arhitektura

• Aplikacije na klijentima dohvaćaju podatke na serverima• Kako implementirati serverske API-e?

REST API?

• REST definirao Roy Fielding u svojoj dizertaciji iz 2000. g.• On je usko povezan sa razvojem weba i HTTP protokola u ‘90-tim

| 3Zahtjevno-Orijentirana Web Arhitektura

• HTTP je inicijalno zamišljen za statični web sadržaj - skupina resursa lociranim pod nekim URL-ovima

• No što je sa web aplikacijama?

REST za web aplikacije?

| 4Zahtjevno-Orijentirana Web Arhitektura

Problemi s REST API-ima...

• API je podijeljen u „logične” resurse• Ti resursi, sa stajališta klijenta, vjerovatno:

• Imaju nepotrebnih detalja• Imaju podatke u neodgovarajućem obliku• Nemaju sve potrebne detalje

| 5Zahtjevno-Orijentirana Web Arhitektura

• Nemaju sve potrebne detalje• JOIN-ovi među resursima? Višestruki HTTP pozivi?

Performanse? (pozivi često idu preko WAN-a!)• Grubi model weba: Map<String, Resource>

• Ne možete predvidjeti što klijenti žele – to može biti mješavina resursa, ili nečega što uopće nisu resursi itd...

• Kako posluživati N različitih klijenata sa jednim servisom?

„The REST interface is designed to be efficient for large-grain hypermedia data transfer, optimizing for the common case of the Web, but resulting in an interface

| 6Zahtjevno-Orijentirana Web Arhitektura

of the Web, but resulting in an interface that is not optimal for other forms of architectural interaction.”

– Roy Fielding (izumitelj REST-a)

Da li vam je to poznato?

| 7Zahtjevno-Orijentirana Web Arhitektura

SELECT count(*), a.city, a.post_codeFROM employee e, address a INNER JOIN ON a.employee_id = e.idWHERE e.active = trueGROUP BY a.city

Rješenje

• Klijenti specifiraju što žele od servisa i dobivaju točno ono što su zatražili

• Svi zahtjevi idu prema jednom endpointu (npr. jedan URL)

• Zahtjeva složeniji „interpreter” zahtjeva na serverskoj

| 8Zahtjevno-Orijentirana Web Arhitektura

• Zahtjeva složeniji „interpreter” zahtjeva na serverskoj strani

• Veći „up-front” trošak, no dugoročno smanjen trošak održavanja serverskog API-a

• Poboljšanje performansi zbog „batch” odgovora

Implementacije

• Implementacije uglavnom prisutne u „full-stack” Javascript svijetu

| 9Zahtjevno-Orijentirana Web Arhitektura

Falcor / JSONGraph

| 10Zahtjevno-Orijentirana Web Arhitektura

... iliti priča kako je NETFLIX eliminirao 90% njihovog „networking” koda

• JSONGraph je njihov „query language”

Relay / GraphQL

| 11Zahtjevno-Orijentirana Web Arhitektura

• Facebook izumio Relay i njegov query language GraphQL

• Na serveru treba imati GraphQL server koji interpretira zahtjev i dohvaća specifirane podatke

Struktura sučelja

PANELPANEL

PANEL 1PANEL 1 TEXT AREATEXT AREA

| 12Zahtjevno-Orijentirana Web Arhitektura

• Sučelje aplikacije je „drvo” UI komponenti

TAB 1TAB 1 TAB 2TAB 2 TAB 3TAB 3

COMBO BOX COMBO BOX BUTTONBUTTON

Struktura sučelja

PersonListQuery: {persons: $}

PersonListQuery: {persons: $}

PersonPerson

REQUEST:

{persons: {

id,name,

RESPONSE:

{”persons”: [

{ ”id”: 11,”name”: ”John”,

| 13Zahtjevno-Orijentirana Web Arhitektura

PersonQuery: {id, name, age, address: $}

PersonQuery: {id, name, age, address: $}

AddressQuery: {city, state}

AddressQuery: {city, state}

name,age,address: {

city,address

}}

”name”: ”John”,”age”: 31,” address ”: {

”city”: ”Dallas”,”state”: ”Texas” }

},{ ”id”: 14,”name”: ”Michael”,....

}]}

Primjer React komponente sa Relay/GraphQL-om

var friendInfo = React.createClass({statics: {

queries: {user: function () {

return graphql {name,mutual_friends { count }

QUERY DIO

| 14Zahtjevno-Orijentirana Web Arhitektura

mutual_friends { count }};} }

}render: function () { return {

<div><span>{this.props.user.name}</span><span>Mutual Friends:</span><span> {this.props.user.mutual_friends.count}</span>

</div>}}

}

RENDER DIO

„LISP programmers know the value of everything and the cost of nothing.” – Alan Perlis

| 15Zahtjevno-Orijentirana Web Arhitektura

cost of nothing.” – Alan Perlis

Poteškoće

• Network caching• REST je tu jak

• Autorizacija• nešto kompleksnija zbog bogate specifikacije

zahtjevanih podataka

| 16Zahtjevno-Orijentirana Web Arhitektura

zahtjevanih podataka• Preveliki inicijalni trošak implementacije arhitekture?• Neraširenost trenutnih implementacija

Zaključak

• Klijenti specifiraju točno što žele, u najmanje detalje• Konvertirajuća logika na klijentu nestaje• Front-end tim ne opterećuje back-end tim• ”Batching” odgovora od servera poboljšava

performanse

| 17Zahtjevno-Orijentirana Web Arhitektura

performanse

| 18Zahtjevno-Orijentirana Web Arhitektura