Top Banner
DIZAJN SOA Informacioni sistemi 2 dr Miloš CVETANOVIĆ dr Miloš CVETANOVIĆ dr Vladimir BLAGOJEVIĆ
14

DIZAJN SOA Informacioni sistemi 2 - si4is2.etf.rs

Nov 28, 2021

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: DIZAJN SOA Informacioni sistemi 2 - si4is2.etf.rs

DIZAJN SOAInformacioni sistemi 2

dr Miloš CVETANOVIĆdr Miloš CVETANOVIĆdr Vladimir BLAGOJEVIĆ

Page 2: DIZAJN SOA Informacioni sistemi 2 - si4is2.etf.rs

1. Kako definisati API servisa, koji su uobičajni API stilovi i kada treba određeni stil biti1.  Kako definisati API servisa, koji su uobičajni API stilovi i kada treba određeni stil bitiupotrebljen?

2. Kako klijenti i servisi mogu da komuniciraju, i koje su osnove za kreiranje kompleksnih konverzacija u kojima veći broj strana razmenjuje podatke u toku dužeg perioda vremena?

3. Koje opcije postoje kada je reč o implementaciji servisne logike i kada određeni pristup treba da bude korišćen?

4. Kako klijent može da postane slabije vezan za sistem koji se koristi na strani servisa?j p j j

5. Kako informacije o servisu mogu biti otkrivene?

6. Kako generičke funkcije poput autentikacije, validacije, keširanja i logovanja mogu biti podržane na klijentskoj i servisnoj strani?klijentskoj i servisnoj strani?

7. Koje promene na strani servisa dovode do prestanka rada klijenata?

8.    Koji si uobičajni načini za verzionisanje servisa?

9.    Kako servisi treba da budu dizajnirani kako bi podržali kontinuirani razvoj poslovne logike bez potrebe da i klijenti budu stalno nadograđivani?

Page 3: DIZAJN SOA Informacioni sistemi 2 - si4is2.etf.rs

API Stil servisaKako klijent može da poziva udaljene procedure preko HTTP?

Naziv procedurese koristi

za selekciju...

Poruka zahteva sadrži ...

Naziv procedureŠalje zahtev

I

Asinhronost moguća interekacijom po principu zahtev/obaveštenje (Request/Acknowledge)

j

Servis

Argumente procedure

Klijent

Blokiranje klijenta se može izbeći asinhronom obradom odgovora(Asynchronous Response Handler)

Rezultati procedureVraćanjerezultata

Poruka odgovora sadrži ...

Stil inspirisan RPC (Remote Procedure Call)Interakcija  po principu zahtev/odgovor (Request/Response) → klijent se blokiraUpotreba servis deskriptora (Service Descriptors) npr. WSDL 

API  nalik klasičnim potpisima metoda → osetljiv na promeneUporeba proksija (Proxies) → lokacijska transparentnostDelimični otkazi sistema? npr. otkaz mrežePromene propagiraju od potpisa, prekog deskriptora do proksija

Klijent Proksi

Poruka

Servis deskriptor

Udaljena procedura (servis)

Page 4: DIZAJN SOA Informacioni sistemi 2 - si4is2.etf.rs

Primer 16Primer 16. Posmatra se servis za proveru dostupnosti avio leta. Servis je zasnovan na JAX‐WS uz upotrebu Document‐Literal‐Wrapped SOAP. 

Page 5: DIZAJN SOA Informacioni sistemi 2 - si4is2.etf.rs

Definicija porta koristeći WSDL 1.1 (Web Service Description Language)

<wsdl:portType name=“AvioPonudaServisPort"><wsdl:portType name= AvioPonudaServisPort ><wsdl:operation name=“DohvatiRasporedLetova">

<wsdl:input message="DohvatiRasporedLetova"/><wsdl:output message="DohvatiRasporedLetovaOdgovor"/>

/</wsdl:operation></wsdl:portType>

...

<wsdl:message name=“DohvatiRasporedLetova"><wsdl:part name="parameters"

element="tns:DohvatiRasporedLetova"/>p /</wsdl:message><wsdl:message name=“DohvatiRasporedLetovaOdgovor">

<wsdl:part name="parameters"element "tns DohvatiRasporedLetovaOdgovor"/>element="tns:DohvatiRasporedLetovaOdgovor"/>

</wsdl:message>

Page 6: DIZAJN SOA Informacioni sistemi 2 - si4is2.etf.rs

Definicija poruka u odgovarajućem XSD (XML Schema Document)

<xs:element name=“DohvatiRasporedLetova"> <!‐‐ Naziv procedure ‐‐><xs:element name= DohvatiRasporedLetova >  <! Naziv procedure ><xs:complexType>

<xs:sequence><xs:element name=“polazakDetalji"                    <!‐‐ Prvi argument ‐‐>

/type=“DetaljiPutovanja"/><xs:element name=“povratakDetalji"                  <!‐‐ Drugi argument ‐‐>

type=" DetaljiPutovanja"/></xs:sequence>/xs:sequence

</xs:complexType></xs:element>...

<xs:element name=“DohvatiRasporedLetovaOdgovor"><xs:complexType>

<xs:sequence><xs:sequence><xs:element name=“DohvatiRasporedLetovaRezultat"

type=“OpcijePutovanja"                  <!‐‐ Ovo je tip odgovora ‐‐> minOccurs="0" nillable="true" />

/</xs:sequence></xs:complexType>

</xs:element>

Page 7: DIZAJN SOA Informacioni sistemi 2 - si4is2.etf.rs

Definicija Java SEI (Service Endpoint Interface)

@WebService(name=" AvioPonudaServisPort"@WebService(name=  AvioPonudaServisPort ,targetNamespace="http://www.primer.rs/schemas",wsdlLocation="WEB‐INF/wsdl/AvioPonudaServis.wsdl")

public interface AvioPonudaServisPort{@WebMethod@WebResult(name=“OpcijePutovanja",

targetNamespace="http://www.primer.rs")@RequestWrapper(localName=“DohvatiRasporedLetova",@RequestWrapper(localName DohvatiRasporedLetova ,

targetNamespace=" http://www.primer.rs/Schemas",className=“rs.primer.DohvatiRasporedLetova")

@ResponseWrapper(localName=“DohvatiRasporedLetovaOdgovor",t tN "htt // i /S h "targetNamespace="http://www.primer.rs/Schemas",className=“rs.primer.DohvatiRasporedLetovaOdgovor")

public OpcijePutovanja DohvatiRasporedLetova(p p j j p (@WebParam(name=“polazakDetalji" //prvi argument

targetNamespace="http://www.primer.rs/Schemas")DetaljiPutovanja polazakDetalji,

@WebParam(name=“povratakDetalji" //drugi argument@WebParam(name= povratakDetalji  //drugi argumenttargetNamespace="http://www.primer.rs/Schemas")DetaljiPutovanja povratakDetalji); }

Page 8: DIZAJN SOA Informacioni sistemi 2 - si4is2.etf.rs

Implementacija Java SEI

@WebService(@WebService(targetNamespace="http://www.primer.rs/Schemas",endpointInterface=“rs.primer.AvioPonudaServisPort")

public class BargainAirService implements AvioPonudaServisPort{@ResourceWebServiceContext wscontext;

public OpcijePutovanja DohvatiRasporedLetova(DetaljiPutovanja polazakDetalji,DetaljiPutovanja povratakDetalji)

{{// implementacija

}}}

Page 9: DIZAJN SOA Informacioni sistemi 2 - si4is2.etf.rs

API Stil servisaKako klijent može da šalje komande, obaveštenja i druge informacijeKako klijent može da šalje komande, obaveštenja i druge informacije

udaljenom sistemu preko HTTP uz izbegavanje vezivanja za udaljene procedure?

Sadržaj poruke k i ti

Identifikator teme, zadatka ili događajaŠ lj

Poruka zahteva sadrži ...

Klijent

se koristiza selekciju...

Servis

g j

Strukturiranisadržaj poruke

Šalje zahtev I

Procedura

Procedura

Standardizovani ili specifičan sadržaj

Vraćanjerezultata

Poruka odgovora sadrži ...Procedura

Stil inspirisan razmenom poruka (tzv. dokumenata)Servis ima ulogu dispečera koji svoju ulogu obavlja na osnovu sadržaja porukeInterakcija  po principu zahtev/odgovor (Request/Response) ali i zahtev/obaveštenje (Request/Acknowledge)Upotreba standardizovanih poruka npr. SOAP/XSD , ili POX (Plain Old XML)

Kao kod stila inspirisanog RPC:→ automatsko generisanje koda (upotreba servis deskriptora) npr. WSDL→ binarno enkodiranje poruka→ asinhronost interakcije Za razliku od stila inspirisanog RPC:→ izbegavanje blokiranja klijenta → zahtev se sastoji samo od jedne poruke

→ delegacija posla  uz pozivanje komandi (Command Invoker)→ podrška za komplikovane radne tokove (Workflow Connector)→ kasno vezivanje (Late binding)  postupkom nadovezivanja (Service Connector)

Page 10: DIZAJN SOA Informacioni sistemi 2 - si4is2.etf.rs

API Stil servisaKako klijent može da manipuliše podacima kojima upravlja udaljeni sistemKako klijent može da manipuliše podacima kojima upravlja udaljeni sistem

uz izbegavanje vezivanja za udaljene procedure i uz minimalno poznavanje domena?

Standardizovana metoda servera (GET, PUT, POST ...)

Poruka se sastoji od ...

HTTP protokol za CRUD (Create/Retrieve/Update/Detele):GET – dohvatanjePUT dodavanje ili menjanje

Klijent

URI

Servis

Koriste seza odabir ...

Šalje zahtev

I

OPCIONO  IStandardizovani 

ili specifičan tip medijaPUT – dodavanje ili menjanjeDELETE – brisanjePOST – specifične namene, tunelovanje PUT i DELETE

OPTIONS – provera podržanih HTTP metoda na ciljnoj URIHEAD – dohvatanja meta‐podataka o resursu bez dohvatanja resursa 

Standardizovani ili specifičan tip medija Vraćanje

rezultata

Odgovor može da sadrži ...

I, ILIStandardizovani 

Stil inspirisan upotrebom resursa uz upotrebu HTTP kao aplikativnog protokolaStilovi inprisani PRC i porukama koriste HTTP kao transaportni protokolResursi: tekst, video materijal, red u relacionoj tabeli, kolekcija podataka, procedura, izvršni program itd.

j p jkod statusa

Kao kod stilova inspirisanih RPC i porukama:→ asinhronost interakcije→ izbegavanje blokiranja klijenta→ kasno vezivanje (Late binding) postupkom nadovezivanja (Service Connector)→ kasno vezivanje (Late binding)  postupkom nadovezivanja (Service Connector)

Page 11: DIZAJN SOA Informacioni sistemi 2 - si4is2.etf.rs

Za razliku od stilova inspirisanih RPC i porukama:→ nemogućnost automatskg generisanje koda (nema servis deskriptora)→ adresibilnost resursa (izloženost napadima i kontrola pristupa?)→ fl k ibil t d bi klij t ( č bil i đ j bil k ji đ j b )→ fleksibilnost u odabiru klijenta (npr. računar, mobilni uređaj, bilo koji uređaj sa brauzerom)→ prilagodljivost prikaza željama klijenta (npr. jedan resurs – više pristupnih tačaka)→ mogućnost upotrebe rasprostranjenih tehnika keširanja

S iPosrednikKlijent

Klijentski  Serverski k š

ServisPosrednik(npr. reverzni proksi)

Posredničkik š

Prednost standardizovanosti protokola:→ standardizovani  povi resursa  npr. MIME (Multipurpose Internet Mail Extensions)

/ / /

keš keškeš

→ definicija kodova statusa ( www.w3.org/Protocols/rfc2616/rfc2616‐sec10.html )npr. 200‐uspešan zahtev, 301‐resurs uklonjen, 400‐loš format zahteva

Primer 17.  Uslovno dohvatanje resursa:GET /proizvodi/cenovnik HTTP/1 1GET /proizvodi/cenovnik HTTP/1.1Host: primeri.rsIf‐Modified‐Since: Fri, 27 Sep 2013 18:00:00 GMTPrimer 18.  Uslovna promena resursa:

REST (Representa onal State Transfer) → RESTful:Klijent/Server (Client/Server)Bez čuvanja konteksta (Stateless)Keširanje odgovora (Cacheable resposnes)Uniforman interfejs (Uniform interface)

( )p

PUT /proizvodi/cenovnik/123 HTTP/1.1Host: primeri.rsIf‐Unmodified‐Since: Fri, 27 Sep 2013 18:00:00 GMT

Slojevit sistem (Layer System)Kod na zahtev (Code on demand)

Page 12: DIZAJN SOA Informacioni sistemi 2 - si4is2.etf.rs

Primer 19Primer 19. Posmatra se servis za dohvatanje liste proizvoda. Servis je implementiran u vodu servis kontrolera koji na osnovu tipa traženog proizvoda i početnog slova proizvoda , dobijenih u zahtevu, poziva odgovarajuću metodu za pretragu, a klijentu vraća rezultat koji je pozvana metoda vratila. Pretpostaviti da metoda za pretragu vraća rezultat u vidu objekta za transfer podataka (DTO – Data Transfer Object) pod nazivom Proizvodi, a da servis treba da vraća klijentu rezultat u JSON formatu. Servis je zasnovan na JAX‐RS.Servis je zasnovan na JAX RS. 

Page 13: DIZAJN SOA Informacioni sistemi 2 - si4is2.etf.rs

Implementacija REST servisa u Javi

@Path("/tip")@Path( /tip )public class TipProizvodaKontroler {

private String NEXT_URI ="http://www.primeri.rs/ServisPretrage/proizvodi";

@GET@Path("/{nazivTipa}/{pocetnoSlovoProizvoda}")@ProduceMime("application/json")@ProduceMime( application/json )

public JAXBElement<Proizvodi> DohvatiProizvodeUnutarTipa (

@P thP (“ i Ti ") St i i Ti@PathParam(“nazivTipa") String nazivTipa,@PathParam(“pocetnoSlovoProizvoda") String pocinjeSa){

PretrazivacProizvoda pretrazivac = new PretrazivacProizvoda(NEXT_URI);p ( _ )

Proizvodi proizvodi = pretrazivac.dohvatiProizvode (nazivTipa, pocinjeSa);return new JAXBElement<Proizvodi>(new QName(“Proizvodi"),

Proizvodi class proizvodi);Proizvodi.class, proizvodi);}

Page 14: DIZAJN SOA Informacioni sistemi 2 - si4is2.etf.rs

Primer upotrebe REST servisa

Klijent šalje zahtev:Klijent šalje zahtev:

GET ServisPretrage/proizvodi/tip/tv/sa HTTP/1.1Host: primeri.rs

Klijent dobija odgovor:

{"@pocetnoSlovoProizvoda":“sa","@nazivTipa":“tv",{ @pocetnoSlovoProizvoda : sa , @nazivTipa : tv ,“Proizvod":[{“Naziv":“Samsung","URI" "htt // i i /S i P t / i di/S "}"URI":"http://www.primeri.rs/ServisPretrage/proizvodi/Samsung"},{"Name":“Sanyo","URI":" http://www.primeri.rs/ServisPretrage/proizvodi/Sanyo "}]}]}