Professional Documents
Culture Documents
Web Aplikacije I Web Api - HTTP, XML, JSON
Web Aplikacije I Web Api - HTTP, XML, JSON
Korisnik preko veb pregledača šalje zahtev za resursom Veb server prihvata
zahtev, pronalazi traženi resurs i njega šalje korisniku
Resurs može biti HTML strana, slika, PDF dokument ili nešto četvrto – što god da
je u pitanju, klijent zahteva resurs, a server šalje klijentu resurs koji je zahtevan
U slučaju kada nema zahtevanog resursa, generiše se greška „404 Not found“
Termin „server“ označava i sam računar (tj. hardver) i program koji perdstavlja veb
server (tj. softver)
Ako iz konteksta nije jasno da li se radi o hardveru ili softveru, to će biti dodatno
istaknuto
FUNKCIONISANJE VEB KLIJENTA
FUNKCIONISANJE WEB KLIJENTA
Kada se govori o klijentu, ima se u vidu korisnik, ali i veb pregledač – aplikacija
koju korisnik koristi za surfovanje.
Korisnik preko web pregledača šalje zahtev za resursom
Pregledač je softver (npr. Netscape, Chrome, Mozzila, Yandex, Safari, Edge, Opera i sl.)
koji komunicira sa veb serverom. Osim poslova komunikacije, pregledač treba da
interpretira HTML kod i da iscrta veb strane za korisnika
Klijent može biti i ma koji drugi program koji komunicira sa serverom korišćenjem HTTP
protokola (curl, postman,…)
Ako se eksplicitno ne navede drugačije, nadalje će termin „klijent“ će obuhvatiti i
softver (tj. pregledač) i čoveka (tj. korisnika)
Drugim rečima, klijent je aplikacija - pregledač koja obavlja ono što korisnik zahteva da
se uradi
KLIJENT I SERVER KORISTE HTML I HTTP
Kada server šalje odgovor na zahtev, on pregledaču obično šalje sadržaj datog
tipa, tako da pregledač može da prikaže dobijeni odgovor.
Često je odgovor koji server šalje klijentu sekvenca znakova koji predstavljaju
dokument u HTML formatu. Taj HTML dokument potom biva prikazan od strane
pregledača
Najveći deo konverzacije između klijenata i servera se realizuje korišćenjem HTTP
protokola
Klijent tada šalje HTTP zahtev, a server odgovara sa HTTP odgovorom.
Kada server pošalje HTML stranu klijentu, on to radi korišćenjem HTTP protokola.
HTTP PROTOKOL
Podaci se mogu slati na server i pomoću metoda GET i pomoću metoda POST
Ukupan broj znakova koji se pomoću mogu poslati metoda GET je mnogo manji
od broja znakova koji se mogu poslati preko metoda POST, a to gornje
ograničenje zavisi od vrste veb servera i pregledača
Podaci koji se šalju korišćenjem metoda GET se nalepljuju na adresu u adresnoj
liniji pregledača, pa je sve što se tim putem šalje na server direktno vidljivo
korisniku (i samim tim podložnije manipulaciji)
Korisnik ne može postaviti marker na stranicu gde je sadržaj forme prosleđen
metodom POST, a može ako je za prosleđivanje korišćen metod GET
ANATOMIJA GET ZAHTEVA
ANATOMIJA POST ZAHTEVA
ANATOMIJA POST ZAHTEVA MVC
Baza podataka
ANATOMIJA HTTP ODGOVORA
Statusni kod HTTP odgovora je trocifren broj. Prva cifra statusnog koda HTTP
odgovora specificira o kojoj se od pet klasa odgovora radi
Statusni kodovi su proširivi i HTTP klijenti nisu obavezni da razumeju značenje
svih statusnih kodova
Pobrojani statusni kodovi su deo HTTP/1.1 standarda (dokument RFC 7231), osim
ako se ne istakne da je drugačije
STATUSNI KODOVI HTTP ODGOVORA
4xx: Client Error – zahtev sadrži nekorektnu sintaksu ili ne može biti ispunjen
STATUSNI KODOVI HTTP ODGOVORA
5xx: Server Error – server nije uspeo da ispuni naizgled valjan zahtev
PROTOKOL APLIKATIVNOG SLOJA - HTTP
Hypertext Transfer Protocol (HTTP), je protokol aplikacionog sloja koji predstavlja osnovu
weba
HTTP je implementiran u okviru dve vrste programa:
klijentskim programima, najčešće pregledačima veba
serverskim programima, najčešće veb serverima
Ovi programi medusobno komuniciraju razmenom HTTP poruka
HTTP definiše strukturu ovih poruka i način na koji klijenti i serveri razmenjuju ove poruke
Neki od osnovnih pojmova weba:
Web je distribuirana aplikacija zasnovana na web stranicama
Web strane se sastoje od objekata – hipertekstualnih datoteka opisanih na jeziku HTML, slika u
raznim formatima (npr. JPG, PNG, GIF), Java apleta i sli.
Svaki pojedinačni objekat ima jedinstvenu adresu u obliku tzv. URI (Uniform Resource Identifier)
PROTOKOL APLIKATIVNOG SLOJA – HTTP
HTTP zahtev se šalje nakon što je uspostavljena TCP konekcija sa nekih host računarom
U prvoj liniji, navodi se ime metoda, putanja (na serveru) do objekta koji se zahteva i verzija
HTTP protokola
Najčešće korišćeni metodi su GET, POST i donekle HEAD
HTTP zahtev sadrži i niz polja i njihovih vrednosti kojima klijent serveru saopštava neke
relevantne informacije:
Host: - obavezno polje u HTTP/1.1 i sadrži ime hosta na koji se šalje zahtev
User-Agent: - ovim se identifikuje klijentski softver koji šalje zahtev
Accept: - ovim klijent navodi vrstu sadržaja (MIME tip) koju priželjkuje
Accept-Language: - ovim klijent navodi jezik koji priželjkuje
Accept-Charset: - ovim klijent navodi kodnu stranu koju priželjkuje
Connection: - ovim se navodi da li se želi perzistentna (keep-alive) ili jednokratna (close) TCP
konekcija.
PROTOKOL APLIKATIVNOG SLOJA – HTTP
Sam veb server opslužuje samo statičke strane, ali se može koristiti posebna
pomoćna aplikacija, sa kojom komunicira veb server, a koja kreira dinamički
sadržaj
DINAMIČKE WEB STRANE
Dinamički sadržaj može biti bilo šta: datum i vreme sa servera, spisak datoteka u
direktorijumu, slučajno izabrana slika itd.
Dinamički sadržaj ne postoji sve dok ne stigne zahtev
Po prispeću zahteva, pomoćna aplikacija „kreira“ HTML a onda veb server taj
HTML „spakuje“ u odgovor
DINAMIČKE WEB STRANE
XML je na prvom mestu tehnologija (XML (Extensible Markup Language – proširiv jezik
za označavanje))
Nakon toga dolazi definicija da je XML jezik mada je XML manje jezik a više konvencija za
kodiranje.
XML je i skup srodnih tehnologija i sam za sebe ne predstavlja nešto posebno već tek sa
srodnim tehnologijama daje pune rezultate.
PREGLED XML-A I NJEGOVE OSOBINE
XML služi za transfer jer u sebi pored informacije ima i njenu poziciju u
odnosu na ostale informacije – XML pored informacije opisuje i strukturu.
XML je u svojoj osnovi informacija o informaciji.
Više nije dovoljno imati samo informaciju jer to u današnjim uslovima znači tražiti
i pronaći istu
već je potreban način da opišemo informaciju a da taj opis informacije
upotrebimo dalje za pronalaženje iste i za njenu dalju obradu.
PREGLED XML-A I NJEGOVE OSOBINE
Ovako bi mogao da izgleda jedan običan i jednostavan XML fajl kada ga posmatramo iz
Notepada.
Odmah je uočljivo da postoje neki tagovi (oznake) koje uokviruju neki tekst.
Upravo te oznake su ono što XML čini XML-om.
One opisuju sadržaj odnosno informaciju.
PREGLED XML-A I NJEGOVE OSOBINE
Međutim postoji još nešto što ovaj primer možda ne oslikava jasno – XML može da opiše
svojom strukturom i strukturu informacija odnosno njihov odnos u smislu hijerarhije.
Dve veoma bitne stvari.
Informacija o informaciji i informacija o strukturi u jednom dokumentu.
XML ČINJENICE
2. Zatim se isčitava prvi tag u XML strukturi i zapisuje njegovo ime – ovo je top
level ili startni tag.
3. Zatim se zapisuje ime elementa.
4. Zatim se isčitavaju ostali elementi redom da bi se odredilo koja svojstva ima
dati element strukture i zatim se ta svojstva upisuju - ako je u pitanju element
upisuje se njegova vrednost ili u formi uređenih parova atribut = vrednost ako je u
pitanju atribut.
KAKO RADI XML
5. Ako sledeći tag nakon prvog nađenog nije oznaka za zatvaranje isčitava se
sledeći tag i on se definiše kao dete trenutnog elementa.
Onda se parser vraća na korak 3. Ako je nađeni tag oznaka za zatvaranje onda je
element definisan.
6. Ovaj proces se ponavlja dok se ne obradi čitav dokument.
IMENOVANJE ELEMENATA
<prezime>, <adresa_stanovanja>
IMENOVANJE ELEMENATA
XML elementi mogu imati atribute u otvarajućem tagu kao i HTML. Oni se koriste
za dodatne informacije o elementu.
Iz HTML-a se sećamo ovoga:
<IMG SRC="slika.gif">
XML ATRIBUTI
<file type="gif">slika.gif</file>
XML ATRIBUTI
Znaci navoda
Vrednosti atributa moraju uvek biti unutar znaka navoda.
Međutim moguće je koristiti jednostruke ili dvostruke znake navoda:
<ime=“Pera">
ili:
<ime=‘Pera'>
XML ATRIBUTI
<ime>Pera</ime>
<nesto ime=“Pera">
XML ATRIBUTI
<komintent tip="nabavljač">
<ime>Pera</ime>
<prezime>Perić</prezime>
</komintent>
<komintent>nabavljač</komintent>
<ime>Pera</ime>
<prezime>Perić</prezime>
XML ATRIBUTI
Prva linija XML dokumenta - XML deklaracija - određuje XML verziju dokumenta.
U ovom slučaju dokument poštuje specifikaciju 1.0 XML-a koju propisuje
W3Consortium.
Ovaj red ujedno i govori Internet Exploreru da parsira (rasčlani) dokument XML
parserom odnosno da dokument tretira kao XML fajl a ne kao HTML fajl.
SINTAKSA XML-A
<Poruka>Ovo je neispravno</poruka>
<poruka>Ovo je ispravno</poruka>
SINTAKSA XML-A
HTML ispravno
<b><i>Ovo je tekst</b></i>
XML ispravno
<b><i>Ovo je tekst</i></b>
SINTAKSA XML-A
Svi XML dokumenti moraju da imaju osnovni (top level) ili startni tag
Prvi tag u XML dokumentu je osnovni tag.
Svi XML dokumenti moraju da imaju jedan par tagova koji definiše osnovni tag.
Svi ostali elementi su ugnežđeni u osnovni tag.
Gnežđenje u dubinu je neograničeno.
Znači element može imati neograničen broj elemenata-dece.
Odnos koji vlada je takozvani roditelj-dete odnos.
SINTAKSA XML-A
<note>
<to>Pera</to>
<from>Mika</from>
<subject>pozdrav</ subject>
<body>Puno pozdrava iz Beograda</body>
</note>
Ovde je par osnovnih tagova <note> i </note> dok su podčlanovi parovi:
<to> i </to>
<from> i </from>
<subject> i </ subject>
<body> i </body>
SINTAKSA XML-A
JSON je skraćenica od JavaScript Object Notation i predstavlja tekstualni format za skladištenje i transport
podataka
JSON je „samoopisujući“ i lako ga je razumeti, tako da se koristi za slanje podataka između računara
JSON je nezavisan od jezika, ekstenzija JSON fajlova je .json
Ovaj primer je JSON string:
'{"name":"John", "age":30, "car":null}’
Definiše objekat sa 3 svojstva:
Ime
Godine
Auto
Svaka osobina ima vrednost.
Ako se raščlani JSON string pomoću JavaScript programa, može se pristupiti podacima kao objektu:
let personName = obj.name;
let personAge = obj.age;
ZAŠTO KORISITI JSON
JSON format je sintaktički sličan kodu za kreiranje JavaScript objekata. Zbog toga,
JavaScript program može lako da konvertuje JSON podatke u JavaScript objekte.
Pošto je format samo tekstualni, JSON podaci se lako mogu slati između računara i
koristiti bilo kojim programskim jezikom.
JavaScript ima ugrađenu funkciju za pretvaranje JSON stringova u JavaScript objekte:
JSON.parse()
JavaScript takođe ima ugrađenu funkciju za pretvaranje objekta u JSON string:
JSON.stringify()
Prilikom skladištenja podataka, podaci moraju biti određenog formata, i bez obzira na
to gde odaberete da ih čuvate, tekst je uvek jedan od legalnih formata.
JSON omogućava skladištenje JavaScript objekata kao teksta.
JSON SINTAKSA
Ukoliko se razume kod sa prethodnog slajda potrebno je sačuvati kod sa slike dole
levo kao json.htm
Ukoli se kod potom pokrene pomoću IE ili bilo kojeg drugog pregledača sa
omogućenim javascriptom biće prikazan rezultat kao sa desne strane
JSON TIPOVI PODATAKA
1 Number
format sa pomičnim zarezom dvostruke preciznosti u JavaScript-u
2 String
Unicode u dvostrukim navodnicima sa izlaznom kosom crtom
3 Boolean
true ili false
4 Array
uređeni niz vrednosti
5 Value
može biti string, broj, true ili false, null itd
6 Object
neuređena kolekcija parova ključ:vrednost
7 Whitespace
može se koristiti između bilo kog para tokena
8 null
Prazno polje
JSON TIPOVI PODATAKA - NUMBER
Number tim
To je format sa pomičnim zarezom dvostruke preciznosti u JavaScript-u i zavisi od
implementacije.
Oktalni i heksadecimalni formati se ne koriste.
U Number se ne koristi NaN ili Infinity. Sintaksa
Sledeća tabela prikazuje tipove brojeva var json-object-name = { string :
Sr. Tipovi i opis number_value, .......}
No.
Primer koji prikazuje Number tip
1 Integer podataka , vrednost ne treba
Cifre 1-9, 0 i pozitivne i negativne vrednosti stavljati pod znake navoda
2 Fraction
Razlomic poput .3, .9 var obj = {marks: 97}
3 Exponent
Eksponenti poput e, e+, e-, E, E+, E-
JSON TIPOVI PODATAKA - STRING
Niz Sintaksa
To je uređena zbirka vrednosti. [ value, .......]
Objekat Sintaksa
To je neuređen skup parova ime/vrednost. { string : value, .......}
Razmak Sintaksa
Može se umetnuti između bilo kog para tokena. {string:" ",....}
Null Sintaksa
Označava prazan tip. null
Primer
JSON TIPOVI PODATAKA - BOOLEAN
Treba se uveriti da je tekst u JSON formatu, inače će se dobiti sintaksička greška.
JSON.PARSE() - NIZ KAO JSON
Kada se koristit JSON.parse() nad JSON izvedenim iz niza, metoda će vratiti
JavaScript niz, umesto JavaScript objekta.
const text = '["Ford", "BMW", "Audi", "Fiat"]';
const myArr = JSON.parse(text);
console.log(myArr);
Rezultat u konzoli:
JSON.PARSE() - IZUZECI - DATUMI
Rezultat u konzoli:
JSON.PARSE() - IZUZECI - DATUMI
Ili, se može koristiti drugi parametar, funkcije JSON.parse(), koji se zove reviver
(„funkcija za oživljavanje“).
Parametar reviver je funkcija koja proverava svako svojstvo, pre nego što vrati
vrednost.
const text = '{"name":"John", "birth":"1986-12-14", "city":"New York"}';
const obj = JSON.parse(text, function (key, value) {
if (key == "birth") {
return new Date(value);
} else {
return value;
}
});
console.log(myJSON);
Rezultat je : {"name":"John","city":"New York"}
Ovo se može izbeći ako se funkcije konvertuju u stringove pre pokretanja funkcije
JSON.stringify(). const obj = {name: "John", age: function ()
{return 30;}, city: "New York"};
obj.age = obj.age.toString();
const myJSON = JSON.stringify(obj);
JSON OBJEKTI
Primer: Kreiranje objekta sa atributom bookname sa vrednošću tipa string, atribut price sa
numeričkom vrednošću. Atributu se pristupa korišćenjem '.' tačka operatera
var JSONObj = { "bookname ":"VB BLACK BOOK", "price":500 };
JSON OBJEKTI PRIMER KREIRANJA
<html>
<head>
<title>Creating Object JSON with JavaScript</title>
<script language = "javascript" >
var JSONObj = { "name" : "tutorialspoint.com", "year" : 2005 };
for(i = 0;i<books.Scala.length;i++) {
document.writeln("<td>");
document.writeln("<table border = '1' width = 100 >");
document.writeln("<tr><td><b>Name</b></td><td width = 50>" + books.Scala[i].Name+"</td></tr>");
document.writeln("<tr><td><b>Price</b></td><td width = 50>" + books.Scala[i].price+"</td></tr>");
document.writeln("</table>");
document.writeln("</td>");
}
document.writeln("</tr></table>");
</script>
</head>
<body>
</body>
</html>
SKLADIŠTENJE I PRIJEM PODATAKA
// skladištenje podataka:
const myObj = {name: "John", age: 31, city: "New York"};
const myJSON = JSON.stringify(myObj);
localStorage.setItem("testJSON", myJSON);
// prijem podataka:
//localStorage – služe za skladištenje podataka lokalno u klijent pretraživača
let text = localStorage.getItem("testJSON");
let obj = JSON.parse(text);
document.getElementById("demo").innerHTML = obj.name;