Post on 18-Aug-2020
UNIVERZITET U NOVOM SADU
TEHNIČKI FAKULTET
„MIHAJLO PUPIN“
ZRENJANIN
RAZMENA PODATAKA IZMEĐU MOBILNE I VEB
APLIKACIJE
DATA EXCHANGE BETWEEN MOBILE AND WEB
APPLICATION
–MASTERRAD–
MENTOR:doc. drLjubicaKazi STUDENT: Mirko Mijajlović
BR. INDEKSA:MIT14/16
SMER: INFORMACIONE TEHNOLOGIJE -
MASTER
ZRENJANIN, 2019.
1
UNIVERZITET U NOVOM SADU
TEHNIČKI FAKULTET »MIHAJLO PUPIN« ZRENJANIN
KLJUČNA DOKUMENTACIJSKA INFORMACIJA
Redni broj:
RBR
Identifikacioni broj:
IBR
Tip dokumentacije:
TD Monografska dokumentacija
Tip zapisa:
TZ Tekstualni štampani materijal
Vrsta rada:
VR Master rad
Ime i prezime autora:
AU Mirko Mijajlović
Mentor (titula, ime, prezime,
zvanje):
MN
doc. dr Ljubica Kazi
Naslov rada:
NR Razmena podataka izmeĎu mobilne i WEB aplikacije
Jezik publikacije:
JZ Srpski
Jezik izvoda/apstrakta:
JI Srpski /Engleski
Zemlja publikovanja:
ZP Republika Srbija
Uţe geografsko područje:
UGP AP Vojvodina
Godina:
GO 2019.
Izdavač:
IZ Autorski reprint
Mesto i adresa:
MA Zrenjanin, Đure Đakovića bb
Fizički opis rada:
FO
(broj poglavlja / stranica / slika / grafikona / referenci /
priloga)
Naučna oblast:
NO Informacione tehnologije – master
Naučna disciplina:
ND Distribuirani informacioni sistemi
Predmetna odrednica, ključne
reči:
PO
Razmena podataka izmeĎu mobilne i veb aplikacije,
razmena podataka, HTML, XML, JSON, veb servis,
SOAP, REST
UDK
Čuva se u:
ČU
Biblioteka Tehničkog fakulteta
„Mihajlo Pupin“ Zrenjanin
2
Vaţna napomena:
VN Nema
Izvod/Apstrakt
IZ
Pitanje razmene podataka izmeĎu računara, po utisku
autora ovog rada nastalog nakon istraţivanja, postoji
od samog nastanka računara i potrebe za
umreţavanjem. Kako su rasli računarski sistemi koji
su meĎusobno komunicirali i kako su ideje nastajale iz
različitih naučnih i razvojnih centara, na red je došla
standardizacija. Kako računarskih mreţa, tako i
softverskog dela vezanog za razmenu podataka –
protokola, bezbednosti, datoteka i servisa. Akcenat je
u ovom radu stavljen na poslednja dva pomenuta
elementa (u skladu sa hipotezom istraţivanja), na
primeru komunikacije izmeĎu mobilne i veb aplikacije
uz pomoć REST servisa – što je u realizovanom
primeru i korišćeno.Realizovani primer je u vidu
informacionog sistema za restoran, sa mogućnošću
komunikacije izmeĎu mobilne i veb aplikacije. Primer
je realizovan korišćenjem Visual Studio 2017
Community alata i radnih okvira ASP.NET za veb i
Xamarin za mobilnu aplikaciju.
Datum prihvatanja od strane
NN veća:
DP
Datum odbrane:
DO
Članovi komisije:
KO
3
UNIVERSITY OF NOVI SAD
TEHNICAL FACULTY »MIHAJLO PUPIN« ZRENJANIN
KEY WORD DOCUMENTATION
Accession number:
ANO
Identification number:
INO
Document type:
DT Monograph documentation
Type of record:
TR Textual printed material
Concents code:
CC M.Sc.thesis
Author:
AU Mirko Mijajlovic
Mentor:
MN PhD LjubicaKazi, assistant professor
Title:
TI
Data exchange between mobile and Web
application
Language of text:
LT Serbian
Language of abstract:
LA English / Serbian
Country of publication:
CP Republic of Serbia
Locality of publication:
LP AP Vojvodina
Publication year:
PY 2019.
Publisher:
PU The author’s reprint
Publication place:
PP Zrenjanin, ĐureĐakovića bb
Physical description:
PD
Scientific field:
SF Computer Science – M.Sc.
Scientific discipline:
SD Distributed information systems
Subject, Key words:
SKW
Data exchange between mobile and Web
application, HTML, XML, JSON, web
service, SOAP, REST
UDC
Holding data:
HD
Library of Technical Faculty “Mihajlo
Pupin”Zrenjanin
Note:
N None
Abstract:
AB
The data exchange process between
computers, as this paper author’s impression is
after the research, exists from the early
beginning of the computer era and the need for
4
networking. As computer systems which were
networked in have been expanding, and new
ideas were developed from different science
and development centers, the turn was on
standardization. As was for computer
networks, the same was for the software part
of the data exchange – protocols, security, files
and services. In this paper, the accent is set on
two last elements from previous list (in
accordance with research hypothesis), on the
example of the communication between
mobile and web application via REST services
– which was used in the realized
example.Presented example of an information
system is based on real example of a
restaurant, with communication ability
between mobile and web app. IDE for this
example was Visual Studio 2017 Community
and ASP.NET framework and Xamarin for
mobile app.
Accepted on Scientific Board on:
AS
Defended:
DE
Thesis Defend Board:
DB
5
Sadrţaj
1. Uvod ...................................................................................................................................... 9
2. Metodološki okvir istraživanja ............................................................................................ 11
2.1. Predmet i problem istraživanja ................................................................................... 11
2.2. Vrsta istraživanja ......................................................................................................... 11
2.3. Cilj i zadaci istraživanja ................................................................................................ 11
2.4. Hipoteza i podhipoteze ............................................................................................... 11
2.5. Očekivani rezultati....................................................................................................... 11
2.6. Metodološki postupak ................................................................................................ 12
3. Teorijsko istraživanje ........................................................................................................... 13
3.1. Razmena podataka ...................................................................................................... 13
3.2. Jezici za razmenu podataka ......................................................................................... 13
3.2.1. SGML ................................................................................................................... 13
3.2.2. HTML ................................................................................................................... 14
3.2.3. XML ..................................................................................................................... 14
3.2.4. JSON .................................................................................................................... 15
3.2.5. Drugi jezici i modeli vezani za razmenu podataka .............................................. 15
3.3. Veb aplikacije .............................................................................................................. 16
3.4. Veb servisi ................................................................................................................... 19
3.5. Veb servisi bazirani na SOAP ....................................................................................... 19
3.6. RESTful veb servisi ....................................................................................................... 20
3.7. Mobilne aplikacije ....................................................................................................... 21
3.8. Razvoj mobilnih aplikacija ........................................................................................... 21
4. Stručno istraživanje ............................................................................................................. 22
4.1. Komunikacija Android mobilne aplikacije sa veb servisima ........................................ 22
4.2. Povezivanje putem HTTP metoda ............................................................................... 22
4.2.1. Korišdenje HttpsUrlConnection API-a .................................................................. 23
5. Naučnostručno istraživanje ................................................................................................. 27
6. Implementirano rešenje ...................................................................................................... 31
6.1. Opis problema ............................................................................................................. 31
6.2. Modeli ......................................................................................................................... 31
6.3. Korisničko uputstvo ..................................................................................................... 33
6.4. Opis implementacije ................................................................................................... 37
6.4.1. Opis korišdenih alata za realizaciju primera ........................................................ 37
6.4.2. SQL skript baze podataka .................................................................................... 40
6
6.4.3. JSON fajl za komunikaciju .................................................................................... 43
6.4.4. Tabela sa slojevima i podslojevima strukture aplikacije ..................................... 44
6.4.5. Ključni delovi programskog koda sa objašnjenjima ............................................ 46
6.5. Problemi realizacije ..................................................................................................... 50
7. Zaključak .............................................................................................................................. 53
8. Literatura ............................................................................................................................. 54
9. Prilozi ................................................................................................................................... 55
9.1. Prilog 1 ........................................................................................................................ 55
9.2. Prilog 2 – Listing koda ................................................................................................. 57
7
Apstrakt
Pitanje razmene podataka između računara, po utisku autora ovog rada nastalog
nakon istraživanja, postoji od samog nastanka računara i potrebe za umrežavanjem.
Kako su rasli računarski sistemi koji su međusobno komunicirali i kako su ideje
nastajale iz različitih naučnih i razvojnih centara, na red je došla standardizacija. Kako
računarskih mreža, tako i softverskog dela vezanog za razmenu podataka – protokola,
bezbednosti, datoteka i servisa. Akcenat je u ovom radu stavljen na poslednja dva
pomenutaelementa (u skladu sa hipotezom istraživanja), na primeru komunikacije
između mobilne i veb aplikacije uz pomod REST servisa – što je u realizovanom primeru
i korišdeno.
Realizovani primer je u vidu informacionog sistema za restoran, sa mogudnošdu
komunikacije između mobilne i veb aplikacije. Primer je realizovan korišdenjem Visual
Studio 2017 Community alata i radnih okvira ASP.NET za veb i Xamarin za mobilnu
aplikaciju.
Abstract
The data exchange process between computers, as this paper author’s impression is
after the research, exists from the early beginning of the computer era and the need
for networking. As computer systems which were networked in have been expanding,
and new ideas were developed from different science and development centers, the
turn was on standardization. As was for computer networks, the same was for the
software part of the data exchange– protocols, security, files and services. In this
paper, the accent is set on two last elements from previous list (in accordance with
research hypothesis), onthe example of the communication between mobile and web
application via REST services – which was used in the realized example.
Presented example of an information system is based on real example of a restaurant,
with communication ability between mobile and web app. IDE for this example was
Visual Studio 2017 Community and ASP.NET framework and Xamarin for mobile app.
8
9
1. UVOD
Mobilne aplikacije danas imaju veoma široku primenu u različitim oblastima privatnog
života pojedinca i poslovanja. Kada su mobilne aplikacije bile u fazi svog nastanka,
veliki boj njih je bio bez potrebe za internet vezom. Drugim rečima, korisnici nisu imali
potrebu za prelazak sa PC okruženja na mobilne uređaje. Sa porastom ponude servisa
u aplikacijama, potražnje za istim i istovremenim padom cene za Internet pristup,
popularnost mobilnih aplikacija je naglo skočila. Taj rast je pratio i sve jači hardver
mobilnih uređaja, što je otvaralo mesta za vedi broj kvalitetnije razvijenih aplikacija na
mobilnom uređaju i sa vedim brojem mogudnosti. Danas je nezamislivo imati mobilni
uređaj bez Internet veze, naročito kod mlađe populacije. Tako jeautor kroz ovaj master
rad obradiotemu jednog često korišdenog procesa – povezivanje mobilne aplikacije sa
veb aplikacijama i servisima. Ta tehnološka mogudnost naročito u poslovnom svetu ima
veliki značaj.
U ovom radu opisan je koncept veb i mobilne aplikacije, predstavljen pojam razmene
podataka i navedene su vrste fajlova koje se najčešde koriste za razmenu podataka.
Zatim je objašnjen proces uspostave veze u Andorid aplikaciji sa udaljenim resursima
preko HTTP protokola i metoda ostvarenih uz pomod REST veb servisa, a u
naučnostručnom delu je prikazano povezivanje iPhone aplikacije preko JSON i REST-a.
Kroz praktičan primer je pomenuto predstavljeno u vidu informacionog sistema za
restoran.
Na početku ovog rada najpre je izložen metodološki okvir istraživanja; definisani su
predmet, problem, vrsta, cilj i zadaci istraživanja, postavljena je hipoteza i izneseni su
očekivani rezultati.U teorijskom istraživanju obrađen je pojam razmene podataka,
navedeno je koji se jezici (vrste datoteka) koriste za razmenu podataka i izložen pojam
veb aplikacije, veb servisa i mobilne aplikacije. U stručnom istraživanju, na konkretan
način i kroz listinge kodova prikazani su načini za ostvarenje veze mobilne aplikacije sa
udaljenim resursima. U naučnostručnom istraživanju iznesen je primer komunikacije
mobilne aplikacije sa resursima u zdravstvenom informacionom sistemu preko REST
servisa i JSON fajlova. Realizovan primer obuhvata prikaz realizovane veb i mobilne
aplikacije sa međusobnom komunikacijom i bazom podataka, opis korišdenih alata za
10
realizaciju primera, prikaz modela putem UML dijagrma, korisničko uputstvo za
aplikativni deo realizovanog primera, zatim opis implementacije sa ključnim delovima
koda sa objašnjenjem i na kraju ključni problemi realizacije praktičnog dela ovog rada.
11
2. METODOLOŠKI OKVIR ISTRAŢIVANJA
2.1. Predmet i problem istraţivanja
U ovom radu, predmet i problem istraživanja su tehnike programiranja kojim se postiže
razmena podataka između mobilne i veb aplikacije, datoteke koje se koriste za
razmenu podataka, softverski servisi za razmenu podataka.
2.2. Vrsta istraţivanja
Vrste istraživanja u ovom radu su:
Teorijsko istraţivanje i
Empirijsko istraţivanje.
2.3. Cilj i zadaci istraţivanja
Cilj istraživanja je izučiti problematiku razmene podataka između mobilne i veb
aplikacije sa teorijskog i naučnostručnog aspekta.
2.4. Hipoteza i podhipoteze
Osnovna hipoteza:
Savremena razmena podataka između mobilne i veb aplikacije realizuje se putem
specifičnih datoteka i servisa.
2.5. Očekivani rezultati
Teorijski prikaz osnovnih pojmova vezanih za pitanje razmene podataka izmeĎu
mobilne i veb aplikacije,
Prikaz rezultata stručnog istraţivanja u oblasti mobilnih aplikacija, veb
aplikacija i veb servisa sa fokusom na mobilne i veb aplikacije koje su razvijene
korišćenjem savremenih pristupa za razvoj i komunikaciju
Prikaz rezultatanaučnoistraţivačkograda u oblasti mobilnih aplikacija, veb
aplikacija, veb servisa i njihove meĎusobne komunikacije
Realizovan primer mobilne i veb aplikacije sa mogućnošću komunikacije preko
mreţne veze, odreĎenih datoteka i servisa
12
2.6. Metodološki postupak
1. Metodološko koncipiranje istraţivanja
2. Teorijsko istraţivanje osnovnih koncepata i metoda
3. Istraţivanje postojećih naučnih i stručnih rešenja
4. Izrada prototipa mobilne i veb aplikacije
5. Testiranje prototipa
6. Dokumentovanje i analiza rezultata
13
3. TEORIJSKO ISTRAŢIVANJE
3.1. Razmena podataka
Razmena podataka je proces upotrebe podataka struktuiranim pod izvornom šemom i
transformacije u podatke struktuirane pod ciljnom šemom, tako da su ciljani podaci
tačna predstava izvornih podataka.„Razmena podataka omoguduje deljenje podataka
između računarskih programa. Koristi se za obavljanje zadataka kada je potrebno da
podaci budu preneseni između postojedih, nezavisno kreiranih aplikacija. Prvi sistemi
koji su podržavali restrukturiranje i prevođenje podataka bili su napravljeni pre
nekoliko desetina godina.“ Kreirani su različiti sistemi i jedan od njih je poneo ime
„EXPRESS“. On je obavljao razmenu podataka između šema struktuiranih po hijerarhiji.
„Potreba za sistemom koji podržava razmenu podataka je odavno postojao. U
poslednje vreme, ova potreba je postala više izražena kako se teren za razmenu
podataka proširio izazvano rapidnim rastom podataka na vebu skladištenih u različitim
formatima, kao što su tradicionalne šeme relacionih baza podataka, polu-struktuirane
šeme (npr. DTD i XML šeme) i različiti naučni formati.[1]
3.2. Jezici za razmenu podataka
Studijama na temu jezika za razmenu podataka pridaje se važnost od 80-ih godina
prošlog veka. Vremenom, jezici za razmenu podataka su „evoluirali od opisnih
(engl.markup), preko prikazno-orjentisanih do jezika koji podržavaju kodiranje
metapodataka koji opisuju strukturne atribute informacija“ koje prenose. Razvijanjem
Svetske Široke Mreže (engl.World Wide Web) i širenjem mogudnostiveb stranica (tada
uz pomod aplikacija napisanih u Java programskom jeziku) javila se potreba za
standardizovanim formatima za razmenu podataka.[2][3]
Različiti formati, odnosno jezici za razmenu podataka se koriste u različitim domenima.
Jedan od prvih takvih jezika je SGML (engl.Standard Generalized Markup Language), na
čijoj osnovi i ideji je nastao potpuniji HTML (engl. Hyper Text Markup Language), zatim
XML (engl. Extensible Markup Language) i drugi.[5]
3.2.1. SGML
SGML (engl.Standard Generalized Markup Language) služi za definisanje opisnih (engl.
markup) jezika. Kreiran je od strane IBM kompanije i „korišden je od strane velikih
14
korporacija i vladinih organizacija radi kodiranja kompleksnih dokumenata korišdenih u
industriji“. Iz tog razloga SGML i HTML imaju „relativno bogat rečnik za opisivanje
različitih tekstualnih struktura koje se često javljaju u pisanim resursima, kao što su
liste (<ul>, <ol>, i <dl>) i izlazne računarske informacije(<code>, <samp> i <kbd>), ali
isto tako oskudevaju u odnosu na ostale vrste rečnika.“Taj nedovoljno bogat rečnik je
jedan od razloga nastanka proširivog opisnog jezika - XML-a.[5][5]
3.2.2. HTML
„HTML je jezik jezgra Veba koji služi za stvaranje sadržaja za svakoga i bilo gde.“ Koristi
se za prikaz Veb stranica preko Veb pregledača (engl. browser). HTML (engl. Hyper Text
Markup Language) je jedna od primena (aplikacija) SGML-a do verzije „HTML 4“.
Najnovija glavna(engl. major) verzija „HTML 5“ je prestala da bude SGML primena.
Dobila je svoju „html“serijalizaciju i odobrena je od W3C-a (engl. World Wide Web
Consortium)2014. godine iako su prvi nacrti napravljeni još 2008. godine. Trenutna
verzija HTML 5.2odobrena je 2017. godine. [6][7][8][9][10]
Slika 1 – Izvorni kod u HTML-u[6]
3.2.3. XML
„XML (engl. Extensible Markup Language) – proširiv opisni jezikje podskup SGML-a i
razvijen je zbog kompleksnostiSGML-a.“ XML je smatran za veoma važan izum u
računarstvu zbog svog univerzalnog formata za predstavljanje podataka između
nesličnih sistema.“ Karakterišu ga jednostavnost i čitljivost pogodna za čoveka.
Napravljen je s namerom da pre svega bude pogodan za korišdenje na Internetu, koje
treba biti jednostavno. „Primarno se koristi za RPC (engl. Remote Procedure Calls –
poziveudaljenih procedura) i serijalizaciju objekata za prenos podataka između
aplikacija. Korišden je za kreiranje sadržaja od korisnički-definisanihopisnih jezika do
15
dokumenata i šema za kodiranje. XML nema predefinisane skupove oznaka (engl. tag
sets), a skupovi validnih oznaka su definisani od strane korisnika ili kroz druge
automatizovane šeme.“[3][4]
Slika 2 – Prikaz jednostavnosti strukture XML-a, koja predstavlja kodiranje imena
osobe [3]
3.2.4. JSON
„JSON (engl. JavaScriptObjectNotation–JavaScript označavanje objekta)je jezik pravljen
da bude razumljiv čoveku i lak za parsiranje (engl. parse – raščlanjavanje) i korišdenje
za računar. … Kako je pokazao značajne performanse u poređenju sa XML-om, koji
zahteva dodatne biblioteke da bi primio podatke iz DOM-a objekata (engl. Document
Object Model). Procenjeno je da JSON parsira podatke i do sto puta brže od XML-a u
radu sa modernim pregledačima, ali uprkos tvrdnjama o značajnim performansama,
argumenti protiv JSON-a upudeni su na račun nedostatka imenskih prostora (engl.
namespace), provere valjanosti (validacije) ulaznih podataka i nedostaci vezani za
proširivost.“ Na te argumente su dati odgovori da je, u stvari, „svaki objekat unutar
JSON-a imenski prostor“. Kao i to da „JSON koristi kontekst kako bi se izbegla
dvosmislenost, kao kod programskih jezika“. Dalje, sa korišdenjem JSON-a validacija je
prepuštena svakoj aplikaciji koja ga koristi, a na nedostatak proširivosti JSON odgovara
„fleksibilnošdu njegovih konstrukata“. [3]
Slika 3 – Prikaz jednostavnog JSON konstrukta, koji predstavlja kodiranje imena osobe
[3]
3.2.5. Drugi jezici i modeli vezani za razmenu podataka
Postoji još jezika i modelakoji su vezani za razmenu podataka, a neki od njih su:
16
RDF – (engl. ResourceDescriptionFramework) je„standardni model za razmenu
podataka na Vebu. RDF ima mogudnosti koje olakšava spajanje podataka iako
se osnovne šeme razlikuju.“ Podržava i razvijanje šema, bez potrebe da se
konzumenti tih šema menjaju.[11]
YAML – (engl. YetAnotherMarkupLanguage) je „format za serijalizaciju i model
za obradu podataka. (…) Optimizovan je za serijalizaciju podataka, podešavanja
konfiguracije, fajlove evidencije (engl. log files), razmenu poruka preko
Interneta i filterisanje.“ [12]
Rebol – (engl. RelativeExpressionBasedObjectLanguage) baziran je na obradi
(procesiranju) uz pomod simbola i denotacionoj semantici. Radi uz pomod
„relativnih izraza“ (engl. relativeexpressions) zvanih „dijalekti“. Upotrebu
dijalekata karakteriše koncept da su jezici koji ga koriste: mali, efikasni, da je to
domenski jezik za kodiranje, podatke i metapodatke. To znači da se Rebol
koristi za skladištenje podataka (baze podataka), pravljenje korisničkih i
serverskih programa.Takođe, poslužio je kao inspiracija za JSON. Na slici Slika 4
nalazi se uporedni prikaz Robol i JSON jezika. Na njoj se može primetiti
jednostavnost Robol sintakse, kao i korišdenje tipa podatka kao vrednost i
manipulacija istim na primeru za datum rođenja i pol.[13][14]
Slika 4 – Uporedni prikaz Robol (levo) i JSON jezika (desno)
3.3. Vebaplikacije
Veb aplikacija predstavlja aplikaciju izrađenu u klijent-server arhitekturi. Za njihovo
korišdenje, odnosno pristup interfejsu aplikacije od strane klijenta koristi se veb
pregledač. Kao i kod veb sajtova, veb aplikacija može imati više stranica, a postoji i SPA
17
(engl.Single-pageApplication) – jednostranična aplikacija –vebaplikacija izrađena na
jednoj HTML stranici.[15][16]
Za razliku od veb sajtova, koji su uglavnom statični, veb aplikacije spadaju u dinamički
Internet sadržaj. To znači da veb aplikacije imaju mogudnost da, kao reakcija na
korisničke zahteve, stvaraju sadržaj, menjaju stanje parametara u bazi podataka i pre
nego što isporuči sadržaj, uzima u obzirviše parametara. Sadržaj veb aplikacija semenja
često ili automatski. Servisi, odnosno zadaci za koje je aplikacija isprogramirana da
obavlja, izvršavaju se uz interakciju sa korisnikom. Pri njihovom izvršavanju koriste se
različite vrste baza podataka postavljene na servere kojima se pristupa preko
Interneta.Dinamičke veb aplikacije opslužuje dinamički veb server koji se sastoji od
statičkog servera i dodatnog softvera za smeštanje i upravljanje veb aplikacijama i
bazama podataka. Dinamički server uz pomod svog aplikativnog dela ažurira fajlove
smeštene na serveru pre njihovog slanja klijentu, odnosno pregledaču. Pregledač zatim
čita fajlove HTML stranica i vrši prikaz sadržaja.[15][17][18]
18
Slika 5 – Šematski prikaz učitavanja dinamičke veb stranice (prikazana prema izvoru iz
reference)[19]
U kombinaciji sa programiranjem na serveru, veb aplikacija se može razviti u
kompleksan i modan softverski paket koji ima određenu poslovnu ili neku drugu svrhu.
U poslovnom svetu, one uspešno služe zarad povedanja efikasnosti u poslovanju i
korisničke interakcije uz pomod naprednih funkcionalnosti pruženih u pristupačnom
obliku. Postoje osnovne funkcionalnosti koje veb aplikacija podrazumeva. Jedna od njih
je unapređena interakcija sa korisnicima, zatim mora imati vezu sa bazom podataka i
dinamičko generisanje sadržaja i rezultata koji se prikazuju korisniku.[20]
Iz godine u godinu veb aplikacije bivaju posmatrane od strane privrednih stručnjaka
kako klijenti očekuju od developera ispunjenje svih potreba potrošača zarad povedanja
korišdenja aplikacija od strane potrošača.[20]
19
Veb aplikacije danas uspešno služe kao zamena za neke softverske pakete koji moraju
biti instalirani na računaru da bi obavljali zadatke za koje su namenjeni.Razni servisi,
odnosno delovi aplikacije uz pomod kojih se vrši obrada podataka koriste resurse
servera umesto resursa radne stanice, na kojoj se nalazi korisnički interfejs aplikacije.
3.4. Veb servisi
Veb servisi su klijentske i serverske aplikacije koje komuniciraju preko HTTP-a (engl.
HyperText Transfer Protocol). Po opisu od strane W3C-a „veb servisi pružaju
standardna sredstva za interoperabilnost između softverskih aplikacija pokrenutih na
različitim platformama i okvirima (engl. framework).“ Karakteristični su po odličnom
interoperabilnošdu i mogudnošdu proširivanja. Zahvaljujudi XML-u imaju računarski
lako obradive definicije i mogu biti međusobno kombinovani u slaboj sprezi (engl.
loosecoupling) zarad obrade složenih operacija.[21]
Postoji glavna podela veb servisa na dve vrste, po načinu na koji oni mogu biti
implementirani. [22]
3.5. Vebservisi bazirani na SOAP
Veb servisi koji koriste SOAP (engl. SimpleObject Access Protocol) zovu se još i „Big“
(engl. big – veliki). SOAP je protokol za komunikaciju po kojem su usklađene poruke u
XML-u koje servis koristi za razmenu podataka. Takođe, u XML-u se definišu
arhitektura i formati poruka koje se razmenjuju.U nekim sistemima postoje definicije
operacija ponuđenih preko servisa napisane u WSDL (engl. Web
ServicesDescriptionLanguage), koji predstavlja XML jezik za sintaksno definisanje
interfejsa servisa. [22]
Dizajn softvera po SOAP-u mora imati sledede elemente:
Postojanje formalnog ugovora za opisivanje interfejsa koje veb servis nudi. Opis
formalnog ugovora se može pisati u WSDL-u. Opis može biti sastavljen od
poruka, operacija, veza i lokacije veb servisa.
Arhitekturu koja adresira složene nefunkcionalne elemente kao što su
transakcije, bezbednost, adresiranje, poverljivost, koordinacija itd.
Arhitekturu koja podržava asinhrone procese i pozive.[22]
20
3.6. RESTful veb servisi
RESTful (engl. RepresentationalState Transfer) veb servisi služe za osnovne zahteve u
komunikaciji između aplikacija.Bazirani su na REST arhitekturi. Kako imaju vedi nivo
integracije sa HTTP-om od servisa zasnovanih na SOAP, manje su zahtevni za
implementaciju. Ne zahtevaju da poruke budu u XML-u kao ni WDSL definicije. Zbog
svoje jednostavnosti jeftiniji su za implementiranje i kao tehnologija laki za
razumevanje i usvajanje.[22][24]
Okruženje adekvatno za RESTful za je ono koje ima sledede uslove:
Nepostojanje stanja (engl. stateless) – trajno stanje servisane postoji, što znači
da „server ne čuva nikakvo stanje vezano za sesijuklijenta. … Svaki HTTP zahtev
se dešava u potpunoj izolaciji. … Svaki zahtev mora da sadrži sve neophodne
informacije za razumevanje zahteva i bilo kakav sačuvani kontekst sa servera se
ne može koristiti. … Server se nikada ne oslanja na informacije iz prethodnih
zahteva.“
Mogudnost keširanja (engl. cacheable) –ako podaci koje veb servis vrada nakon
zahteva nisu dinamički generisani i mogu biti keširani na serveru radi
poboljšanja performansi;
Međusobno razumljiv kontekst i sadržaj–sa strane autora veb servisa i sa strane
korisnika mora da postoji međusobno razumevanje konteksta i sadržaja i
usklađenost šeme za razmenu podataka;
Ograničeni protok podataka– količina podatakakoja se prenosi mora biti
ograničena zarad performansi, naročito zbog mobilnih uređaja;
Laka implementacija u postojeda veb rešenja– RESTful je mogude primeniti bez
značajnih promena na arhitekturi postojede veb aplikacije ili sajta.Mogu se
primeniti uz korišdenje raznih alata kao što je AJAX za JavaScript[22][23]
RESTful veb servisi se mogu primeniti uz pomod AJAX pristupa koji radi u kombinaciji
više tehnologija (HTML ili XHTML, CSS, JS, DOM, XML, XSLT i XHR), za Majkrosoft
tehnologijevodedi je ASP.NET, a u Java okruženju upotrebom JAX-RS tehnologije ili
DWRalata.[22][25][26]
21
3.7. Mobilne aplikacije
Mobilne aplikacije su softverski programi razvijeni za mobilne uređaje kao što su
pametni telefoni, tableti, pametni satovi i PDA uređaji.[28]
Svrha mobilne aplikacije može biti različita. Počevši od uslužnih, raznih softverskih
alata i onih za poboljšanje produktivnosti, za komunikaciju i navigaciju do onih za igru,
zabavu, rekreaciju i sport. Vodede su one za socijalne mreže, a najkorišdenija aplikacija
za sve platforme u 2017. godini bila je Facebook aplikacija.[28]
Neke aplikacije dolaze uz kupljeni uređaji, ali vedina zvaničnih aplikacija je dostupna za
preuzimanje iz specifičnih prodavnica kao što je „Google Play“ za uređaje sa „Android“
operativnim sistemom, „Apple’sApp Store“ za uređaje sa „iOS“ operativnim sistemom i
„AmazonAppStore“ za „Amazon Fire“ uređaje.[28]
3.8. Razvojmobilnihaplikacija
„Razvoj mobilnih aplikacija je proces kreiranja softverskih aplikacija koje se pokredu na
mobilnom uređaju i tipična mobilna aplikacija koristi mrežnu vezu za rad sa udaljenim
računarskim resursima.“[27]
Postoje četiri glavna pristupa za razvoj mobilnih aplikacija:
Izvorne (engl. native) mobilne aplikacije
Višeplatformske (engl. Cross-Platform) izvorne mobilne aplikacije
Hibridne mobilne aplikacije
Progresivne veb aplikacije[27]
Pored navedenih, postoje i veb aplikacije koje su prilagođene za korišdenje na
uređajima saekranima koji imaju opseg rezolucija kao kod modernih pametnih
telefona.
22
4. STRUČNO ISTRAŢIVANJE
4.1. Komunikacija Android mobilne aplikacije sa veb servisima
Android operativni sistem ima ugrađene interfejse za povezivanje sa ostalim
uređajima, između ostalog i preko mreže putem najčešde korišdenog protokola za
povezivanje aplikacija koje zahtevaju mrežnu vezu zarad razmene podataka –
HTTP.Pored biblioteka ugrađenih u operativni sistem i koje pružaju osnovne
mogudnosti, postoje i biblioteke koje se preuzimaju kao što su Volley i Cronet. Takve
biblioteke pružaju dodatne mogudnosti, najpre vezane za performanse prenosa
podatakai olakšice oko podešavanjamrežne veze.[29][30]
Bez obzira na izbor načina uspostave veze, zajedničko za svaku Android aplikaciju je
pre svega uključivanje dozvola za korišdenje Internet veze i pristupu informaciji o
stanju mreže uređaja (da li uređaj ima mrežnu vezu ili ne). To se izvodi u dve HTML
linije u fajlu AndroidManifest.xml koji postoji u svakoj Android aplikaciji.
<uses-permissionandroid:name="android.permission.INTERNET"/> <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
Listing 1 – Deo XML koda AndroidManifest.xml fajla za ostvarenje dozvola u Android
aplikaciji[29]
4.2. Povezivanje putem HTTP metoda
„Pre dodavanje mrežne funkcionalnosti u aplikaciju, treba se uveriti da podaci i
informacije unutar aplikacije ostaju sigurne prilikom prenosa istih preko mreže.“
Preporuka sa „treninga“ sa zvaničnog sajta Androida je slededa praksa:
Svesti na minimum prenos osetljivih i ličnih podataka korisnika koji se prenose
preko mreže.
Svaki promet podataka izvršiti putem SSL-a (engl. SecureSocketsLayer).
Razmotriti ideju o sigurnoj postavci mreže i korišdenje sertifikata izdatih od
posebnih CA (engl. CertificateAuthorities–izdavač sertifikata)ili ograničiti pristup
sistemskih sertifikata koji su podrazumevano odobreni.[29]
Nakon obezbeđivanja sigurnog načina za komunikaciju bira se način za povezivanje sa
udaljenim resursima. Najčešde biran način za razmenu podataka je HTTP. Android
23
platforma ima ugrađen HttpsURLConnection klijent koji podržava TLS (engl. Transport
LayerSecurity), inače naslednika SSL-a.HttpsURLConnection klijent podržava striming
slanja i preuzimanja podatka, podesive pauze (engl. timeouts), IPv6 (Internet Protokol
verzija 6) ipuling veze (engl. connectionpooling). [30][31]
classMainActivity:FragmentActivity(),DownloadCallback<String>{
...
//Referenca ka NetworkFragment biblioteci, koja poseduje
asinhroniAsyncTask objekat koji se koristi za izvršavanje operacija
sa mrežom
privatevar networkFragment:NetworkFragment?=null
// Boolean vrednost koja govori da li je preuzimanje u toku,
radi sprečavanja preklapanja preuzimanja sa višestrukim klikom na
dugme za preuzimanje
privatevar downloading =false
overridefun onCreate(savedInstanceState:Bundle?){
...
networkFragment
=NetworkFragment.getInstance(supportFragmentManager,"https://www.go
ogle.com")
}
privatefun startDownload(){
if(!downloading){
// Izvršenje preuzimanja asinhrono
networkFragment?.apply {
startDownload()
downloading =true
}
}
}
}
Listing 2–Povezivanje sa mrežom korišćenjem «Fragment»implementacije i
«DownloadCallback» interfejsa[29]
4.2.1. KorišćenjeHttpsUrlConnection API-a
Prethodno pomenut način uspostavljanja veze predstavlja pristup koji je najpribližniji
izvornom. Što bi, drugim rečima, značilo da se koriste najosnovnije ugrađene biblioteke
Android sistema.
24
S više jednostavnosti, a s manje kodapružaslededi način za uspostavljanje veze i slanje
HTTP GET zahteva, takođe kroz ugrađene funkcije. [29]
Uspešno uspostavljena veza se označava uz pomod statusnog koda 200, a statusne
kodove vrada „getResponseCode()“ metoda. [29]
/**
* Zadati URL postavlja vezu i prima telo HTTP odgovora sa
servera.
* Ako je zahtev mreže uspešno izvršen, vraća telo odgovora u
String obliku (u obliku niza karaktera). U suprotnom vratiće
IOException.
*/
@Throws(IOException::class)
privatefun downloadUrl(url: URL): String? {
var connection: HttpsURLConnection? = null
returntry {
connection = (url.openConnection() as?
HttpsURLConnection)
connection?.run {
// Vreme čekanja za čitanje InputStream-a proizvoljno
je podešeno na 3000ms.
readTimeout = 3000
// Vreme čekanja za connection.connect() proizvoljno
je podešeno na 3000ms.
connectTimeout = 3000
// Za ovaj slučaj korišćenja, postavlja se HTTP
metoda na GET.
requestMethod = "GET"
// Već podrazumevana vrednost, ali postavlja se za
svaki slučaj; potrebno je da bude„true“zbog toga što ovaj zahtev
nosi telo input-a (odgovora).
doInput = true
// Otvori komunikacionu vezu (mrežni saobraćaj se
ovde dešava).
connect()
publishProgress(CONNECT_SUCCESS)
if (responseCode != HttpsURLConnection.HTTP_OK) {
throwIOException("HTTP error code:
$responseCode")
}
// Prijem tela odgovora kao InputStream.
publishProgress(GET_INPUT_STREAM_SUCCESS, 0)
inputStream?.let { stream ->
// Konvertovanje Stream-au String sa maksimalnom
25
dužinom 500.
readStream(stream, 500)
}
}
} finally {
// Zatvori Stream i prekini HTTPS vezu.
connection?.inputStream?.close()
connection?.disconnect()
}
}
Listing 3–Deo koda za GET zahtev uz pomoć HttpsUrlConnection API-a[29]
Tekst tela odgovora u navedenom primeru u Listing 3je „InputStream“ – ulazni
tokpodataka.Nakon prijema InputStream-a, koji predstavlja mašinski čitljiv izvor
bajtova, njime se može dalje manipulisati. Najčešda praksa za slededi korak je
konverzija Stream-a u čoveku razumljivi pojam, bio on tekstualni tip (String) ili slika
(Bitmap). [29]
Povezivanje sa udaljenim resursima iz Android aplikacije se svodi na sličan algoritam
čiji je deo prikazan kroz navedeni kod u Listing 2 i Listing 3. Upotrebom metoda u Kotlin
programskom jeziku, taj algoritam izgleda slično slededem: (Pojašnjenje navedenih
pojmova može se nadi u Prilogu 1 na kraju dokumenta.)
1. Activity pokrede NetworkFragment i prosleđuje mu navedeni URL.
2. Kada korisnikova akcija okine metodu downloadData() iz Activity-a,
NetworkFragment izvršava DownloadTask.
3. Asinhrona AsyncTask metoda onPreExecute() se prva pokrede (na niti
korisničkog interfejsa (engl. UI thread)) i otkazuje započeti zadatak u slučaju da
uređaj nije povezan na Internet.
4. AsyncTask metoda doInBackground() se pokrede zatim na niti za pozadinske
zadatke (engl. backgroundthread) i zatim poziva downloadUrl() metodu.
5. InputStream je prosleđen readStream() metodi koja konvertuje tok u niz
znakova (engl. string).
6. Na posletku, kada je posao u pozadini završen, asinhrona AsyncTaskmetoda
onPostExecute()se pokrede na niti korisničkog interfejsa i koristi
26
DownloadCallback za slanje rezultata nazad na korisnički interfejs kao niz
znakova.[29]
Nakon implementacije operacija za rad sa mrežom u Android aplikaciju veoma je bitno
prilagoditi aplikaciju shodno korisničkom ponašanju u tom smislu što Android
operativni sistem na menjanje položaja uređaja uspravno/vodoravno odgovara
ponovnim kreiranjem Activity-a, što za posledicu ima referenciranje novog
NetworkFragment-a koje treba izbedi. To znači da „stari“NetworkFragment gubi vezu
sa novokreiranimActivity-em i nakon završetka prijema podataka korisniku nede biti
mogud prikaz rezultata – kojibiva protraden.[29]
Nakon toga, treba obratiti pažnju na kontrolu (stanja) mrežne veze i potrošnju
mrežnog protoka kao i optimizaciju podataka koji se prenose preko mreže.
Kada su podaci preuzeti, mogude je njima dalje upravljati.
27
5. NAUČNOSTRUČNO ISTRAŢIVANJE
Kao rezultat naučnostručnog istraživanja, u ovom delu rada iznesena su iskustva
prilikom razvoja, odabira tehnologije za razvoj dela aplikacije za komunikaciju sa
udaljenim resursima i korišdenja mobilne aplikacije.
U konkretnom slučaju radi se o aplikaciji za korišdenje u zdravstvu za pregled podataka
o pacijentu od strane medicinskog osoblja sa mobilnog telefona sa iOS operativnim
sistemom.Error! Reference source not found.
Neki od problema na koje se nailazi sa tehničke strane u komunikaciji između mobilne
aplikacije i ostatka informacionog sistema je komunikacija novih klijenata (mobilnih
uređaja) sa postojedim API-ima koji su, uglavnom, napisani u SOAP tehnologiji. Tako je
jedan od problema bio i taj koji API koristiti u izradi mobilne aplikacije za pristup velikoj
bazi podataka koja takođe sadrži poverljive podatke, a da pritom performanse budu u
fokusu u komunikaciji između klijenta i back-end servisa, a takođe i jednostavnost
povezivanja sa istim za nove klijente.Brzina je naročito bitna kod aplikacije za ovakve
namene zato što je poželjno za medicinsko osoblje da ima brz uvid u stanje pacijenta.
Takođe, poželjan je i brz razvoj, menadžment, mogudnost proširivanja i lakoda
održavanja dostupnih mogudnosti aplikacije i povezanog servisnog sloja.Error!
Reference source not found.
Što se bezbednosti podataka o stanju pacijenata tiče vezano za upotrebu ovakve
aplikacije, autori aplikacije su odlučili da ne čuvaju nikakav podatak u samom uređaju,
kako podatke o pacijentu, tako i o prijavi autorizovanog korisnika. Aplikaciji se pristupa
tako što autorizovani korisnik unese svoju šifru u aplikaciju, zatim šifra biva poslata
preko API-a na server. Nakon uspešne provere šifre, server vrada bezbednosni token
koji se iznova koristi prilikom svakog novog podzahteva poslatog serveru.Error!
Reference source not found.
Kao još jedan od pomenutih problema sa kojima su se inženjeri susreliprilikom izrade
aplikacijeje izbor početne i dodatnih platformi za koje se mobilna aplikacija razvija. Kao
višeplatformsko rešenje pomenuta je veb aplikacija prilagođena za korišdenje sa
mobilnih uređaja, čiji je razvoj brži i zahteva manje vremena za izradu, dok je za
mobilnu aplikaciju za svaku najčešde korišdenu platformu potrebno više vremena, te je
28
„neophodno minimizirati složenost integracije sa back-end servisima i pokušati
„rasparivanje“ razvoja i održavanje klijentskih i komponenata sa serverske
strane.“Error! Reference source not found.
Pre razvoja mobilne aplikacije za zdravstvenu ustanovu, postojale su samo veb
aplikacije za pristup podacima o pacijentima koje su ili bile jako međusobno zavisne
(engl. tightlycoupled) ili se njima pristupalo preko veb servisa baziranim na SOAP. A kao
što je ranije pomenuto, servisi bazirani na SOAP imaju svoje prednosti (bezbednost pre
svega) i nedostatke (robusnost). Error! Reference source not found.
Slika 6 – Šematski prikaz integrisane mobilne/REST API arhitekture iz veb aplikacije
«Elysium VHR»Error! Reference source not found.
U informacionom sistemu za komunikaciju sa klijentom korišdeni su HTTP zahtevi
poslati kroz SSL da bi se pribavio JSON fajl sa demografskim podacima pacijenta ili sa
podacima o njegovom zdravstvenom stanju. Izbor se sveo na JSON zbog svoje
Klijentska aplikacija
REST API mrežni prolaz servisa
JAX-RS – Java REST veb API
Integracija podataka
Trajni sloj
Pacijenti | Laboratorijski rezultati
Elysium VHR zdravstveni
informacioni sistem
29
kompaktnosti i nudi bolje performanse u odnosu na XML. Radi očuvanja privatnosti,
osetljivi podaci, kao što je ime pacijenta, slati su u telu zahteva. Kao dodatan učinak za
bolje performanse, odgovori koje šalje REST API kompresovani su korišdenjem GZIP
(formata datoteke).Error! Reference source not found.
Zbog nepostojanja stanja (engl. statelessosobina) REST servisa, velike količine podataka
slate su iz više zahteva, što je suočilo inženjere sa problemom preklapanja podataka,
na šta se morala obratiti pažnja. Takođe, trebalo je odrediti i maksimalni broj
pacijenata za koji se vrši upit.Primena upita prikazana je na slici - Slika 7. Error!
Reference source not found.
{"query": {"family":"...", "max":N, "offset":M} }
{"patients": {"list":[list of patients], "count":X, "offset":Y, "remain":Z} }
Listing 4 – Primer upita u vidu JSON objekta za podatke o pacijentima (gore) i dobijeni
odgovor u vidu JSON objekta(dole)Error! Reference source not found.
30
Slika 7 – Izgled korisničkog interfejsa za pretragu imena pacijenataError! Reference
source not found.
Slika 8 – Izgled sažetka podataka za jednog pacijenta putem REST API-a u vidu JSON
objekta prikazano u korisničkom interfejsu iPhone aplikacijeError! Reference source
not found.
31
{"lab-results": {"list": [{"lab-result": {"entry":"...", "facility":"...", "normalcy":"...", "orderedBy":"...", "status":"...", "subject":"...", "urgency":"..."}}, {"lab-result": {"date":"...", ...}}, ...], "count":{count}, "offset":{offset}, "remain":{remain} }
Listing 5 – Primer upita u vidu JSON
objekata za podatke o jednom pacijentu
Error! Reference source not found.
Slika 9 – Izgled korisničkog interfejsa za
detaljni prikaz podataka o jednom
pacijentu iz listinga - Listing 5Error!
Reference source not found.
6. IMPLEMENTIRANO REŠENJE
6.1. Opis problema
Problem za koji je realizovano softversko rešenje je restoransko poslovanje. Potrebno
je omoguditi unos artikala kroz veb aplikaciju, unos i uređivanje cenovnika, kao i
pregled narudžbina dodatih od strane konobara. S tim u vezi, potrebno je omoguditi i
unos narudžbina putem mobilnog uređaja od strane konobara. Radi bržeg unosa
narudžbina, potrebno je omoguditi pretragu artikala dodatih na cenovnik. Takođe,
osim stavki narudžbine potrebno je dozvoliti i unos količine izabranog artikla i broja
stola za koji je narudžbina namenjena.
Rešenje se sastoji iz dva dela. Prvi deo je veb aplikacija koja služi za uređivanje
podataka o artiklima, prikazu artikala na mobilnom uređaju i cenama artikala, pregledu
izvršenih narudžbina i njihovih stavki. A drugi deo je mobilna aplikacija koja komunicira
32
sa veb aplikacijom radi unosa narudžbina. Potrebno je da konobar ima ažurni prikaz
dostupnih artikala i prikaz cene za izabranu količinu.
6.2. Modeli
U ovom odeljku prikazani su osnovni modeli putem UML dijagrama. Dati dijagrami
služe kao šematski prikaz realizovane baze podataka, istovremeno modela unutar veb
aplikacije, takođe za prikaz razmeštaja elemenata sistema i njihove međusobne
zavisnosti i kao prikaz komponenti informacionog sistema restorana i veza između njih.
Dijagram klasa daje prikaz realizovane šeme podataka koja je deo informacionog
sistema restorana iz implementiranog rešenja – kako u bazi podataka tako i u
modelima veb aplikacije.
Slika 10 – Dijagram klasa
Dijagram razmeštaja predstavlja šematski prikaz fizičkog razmeštaja artifakata (delova
softvera) raspoređenih po čvorovima. Čvorovi predstavljaju hardverske jedinice u
kojima se nalaze elementi realizovanog informacionog sistema.
33
Slika 11 – Dijagram razmeštaja
Dijagram komponenti daje šematski prikaz sastavnih delova realizovanog
informacionog sistema i njihovu međusobnu zavisnost, generalizaciju (sloj logike za
komunikaciju sa veb servisom ka sloju logike mobilne aplikacije) i realizaciju (veb servis
ka veb API-u), kao i korišdenje određenih datoteka.
34
Slika 12 – Dijagram komponenti
6.3. Korisničko uputstvo
Pre korišdenja ostatka softverskog rešenja, potrebno je izvršiti unos podataka
neophodnih za rad informacionog sistema, odnosno potrebno je najpre uneti listu
artikala i cene za artikle u delu za uređivanje cenovnika. Sa početne strane veb
aplikacije mogude je izvršiti navigaciju ka uređivanju artikala, cenovnika i pregled
postojedih narudžbina. To se može učiniti klikom na dugmad na sredini početne strane,
ili sa bilo koje strane iz navigacione trake koja se nalazi na vrhu veb aplikacije.
35
Slika 13 – Izgled početne stranice veb aplikacije
Na cenovnik se ne može dvaput dodati isti artikal. Unosom statusa aktivan omoguduje
se prikaz artikla u listi na mobilnom uređaju.
Slika 14 – Izgled stranice za unos artikala u cenovnik sa porukom greške
36
Slika 15
Slika 16 – Izgled mobilne aplikacije: početni ekran (levo) i sa izvršenom pretragom i
unesenom narudžbom (desno)
37
Slika 17 – Prikaz izvršene narudžbe za sto broj 5 i porukom o uspešnom unosu u dnu
ekrana
Pregled narudžbina se može izvršiti putem veb aplikacije. Mogud je i pregled
narudžbina za svaku narudžbinu po master-detail dizajnu interfejsa.
Slika 18 – Pregled izvršenih narudžbina
38
Slika 19 – Prikaz detalja narudžbine
6.4. Opis implementacije
6.4.1. Opis korišćenih alata za realizaciju primera
6.4.1.1. Visual Studio 2017 Community
Za izradu veb aplikacije, veb servisa i mobilne aplikacije korišdeno je radno okruženje
Visual Studio 2017 verzije Community.Microsoft Visual Studio je integrisano razvojno
okruženje (IDE - IntegratedDevelopmentEnvironment) napravljeno od strane
Majkrosofta. Koristi se za razvijanje programa za računare, prvenstveno za operativni
sistem Microsoft Windows, takođe i za veb sajtove, veb aplikacije i veb servise.[34]
Microsoft Visual Studio koristi platforme za razvojni softver kao što su Windows API,
Windows Forms, Windows PresentationFoundation, Windows Store i Microsoft
Silverlight. Pomodu njega se može proizvesti i mašinski (native) kod i upravljeni
(managed) kod.[34]
Visual Studio uključuje uređivač koda koji podržava InteliSens (komponenta koja
dovršava kod) kao i refaktorisanje koda. Takođe poseduje integrisani softver za
otklanjanje grešaka koji radi istovremeno kao dibager na nivou koda i mašinskom
nivou. Takođe uključuje i razne dizajnere kao što je dizajner formi za aplikacije sa
grafičkim korisničkim interfejsom, veb dizajner, dizajner klasa i dizajner šema baza
podataka.[34]
39
Pre verzije Visual Studio 2013 Update 4 program je bio besplatan za studente, ali
počevši od navedene verzije program ima svoje izdanje Zajednice (engl. community)
koja je besplatna za sve i uključujemogudnosti kao što je i Xamarin.[34]
Slika 20 – Razvojni alat Visual Studio
Platforma Xamarin 2.0 je objavljena februara 2013. godine. Njom je bilo omogudena
izrada izvornih Android, iOS i Windows u programskom jeziku C# preko Visual Studio-a
ili Xamarin Studio-a. Platforma je zasnovana na principu korišdenja postojedeg,
značajnog C# koda i raspodela po navedenim mobilnim platformama. Danas se
upotrebljava kao nastavak na Visual Studio za razvoj Android i iOS aplikacija. [34][35]
Takođe, postoji i prodavnica komponenti za integrisanje bek-end sistema, raznih
biblioteka tredih lica, klaud usluga i kontrola grafičkog korisničkog interfejsa direktno u
mobilnu aplikaciju; kao i baza znanja slična Majkrosoftovom MSDN-u. [37]
Xamarin.Forms je kros-platform alat za kreiranje korisničkog interfejsa koji omogudava
developerima da sa lakodom naprave izvorni raspored korisničkog interfejsa koji de biti
deljen između Android-a, iOS, i Windows Phone-a. To bi značilo da aplikacije mogu
deliti veliku količinu koda njihovog korisničkog interfejsa, a da i dalje zadrže izvorni
izgled i osedaj ciljne platforme. [37]
40
Za izradu Forms aplikacije se ne treba odlučiti u svakom slučaju. Sam proizvođač
savetuje da je Forms najbolji za aplikacije kao što su aplikacije za pristup podacima,
aplikacije koje ne zahtevaju velike platformske funkcionalnosti, prototipove i aplikacije
gde je deljenje koda mnogo značajnije nego prilagođeni interfejs. Sa druge strane,
trebalo bi se odlučiti za Xamarin.iOS i Xamarin.Android umesto Xamarin.Forms ako se
izrađuju aplikacije koje zahtevaju specijalizovanu interakciju, aplikacije sa dizajnom na
višem nivou, aplikacije koje koriste dosta API-a specifičnih za tu platformu i aplikacija
kod kojih je prilagođeni interfejs mnogo važniji nego deljenje koda (pr. muzički plejer,
igrica itd.).[37]
Slika 21 - Grafički prikaz strukture Xamarin.Formscross-platform mobilne
aplikacije[38]
6.4.1.2. PowerDesigner
„PowerDesigner omogudava jedinstven set alata za modelovanje poslovnih procesa
koji objedinjuju savremene tehnike notacije BPM, modelovanja podataka i UML
standarda sa jedinstvenim funkcijama koje su na raspolaganju za analizu, dizajn,
pravljenje i održavanje aplikacija, kao i za podršku savremenim softverskim razvojnim
alatima. PowerDesigner i njegova rešenja pružaju da se direktno povežu dizajn i
održavanje osnovnih slojeva bilo koje aplikacije u skladu sa zahtevima određenog
projekta, poslovnim procesima, objektno-orijentisanim kodom, XML šemama i
skladištima podataka. Uz pomod mnoštva grupa modela na svim nivoima apstrakcije,
PowerDesigner pomaže da se u što kradem roku i sa što manje resursa, kroz iterativni
postupak, dođe do željenog rešenja, kroz sve faze projekta, od konceptualnog do
samog izvršavanje neke aplikacije.“Svi modeli u ovom radu kreirani su uz pomod
PowerDesigner softvera. [36]
41
Slika 22 – PowerDesigner sa otvorenim projektom za kreiranje klasnog dijagrama za
potrebe ovog rada
6.4.2. SQL skript baze podataka
Slededi listing koda prikazuje SQL skript baze podataka koju koristi realizovani
informacioni sistem za restoran.
USE [master] GO /****** Object: Database [RestWebAppDB] Script Date: 16.9.2019. 06:20:38 ******/ CREATEDATABASE [RestWebAppDB] GO CREATETABLE [dbo].[__MigrationHistory]( [MigrationId] [nvarchar](150)NOTNULL, [ContextKey] [nvarchar](300)NOTNULL, [Model] [varbinary](max)NOTNULL, [ProductVersion] [nvarchar](32)NOTNULL, CONSTRAINT [PK_dbo.__MigrationHistory] PRIMARYKEYCLUSTERED ( [MigrationId] ASC, [ContextKey] ASC )WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=
42
ON,ALLOW_PAGE_LOCKS=ON)ON [PRIMARY] )ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO /****** Object: Table [dbo].[Artikals] Script Date: 16.9.2019. 06:20:39 ******/ SETANSI_NULLSON GO SETQUOTED_IDENTIFIERON GO CREATETABLE [dbo].[Artikals]( [ArtikalId] [smallint] IDENTITY(1,1)NOTNULL, [Naziv] [nvarchar](max)NOTNULL, CONSTRAINT [PK_dbo.Artikals] PRIMARYKEYCLUSTERED ( [ArtikalId] ASC )WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON [PRIMARY] )ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO /****** Object: Table [dbo].[Cenovniks] Script Date: 16.9.2019. 06:20:39 ******/ SETANSI_NULLSON GO SETQUOTED_IDENTIFIERON GO CREATETABLE [dbo].[Cenovniks]( [CenovnikId] [int] IDENTITY(1,1)NOTNULL, [CenaArtikla] [decimal](18, 2)NOTNULL, [Aktivan] [bit] NOTNULL, [ArtikalId] [smallint] NOTNULL, CONSTRAINT [PK_dbo.Cenovniks] PRIMARYKEYCLUSTERED ( [CenovnikId] ASC )WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON [PRIMARY] )ON [PRIMARY] GO /****** Object: Table [dbo].[Narudzbinas] Script Date: 16.9.2019. 06:20:39 ******/ SETANSI_NULLSON GO SETQUOTED_IDENTIFIERON GO CREATETABLE [dbo].[Narudzbinas]( [NarudzbinaId] [smallint] IDENTITY(1,1)NOTNULL, [Datum] [datetime] NOTNULL, [Ukupno] [decimal](18, 2)NOTNULL, [Sto] [tinyint] NOTNULL, CONSTRAINT [PK_dbo.Narudzbinas] PRIMARYKEYCLUSTERED ( [NarudzbinaId] ASC )WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON [PRIMARY] )ON [PRIMARY] GO /****** Object: Table [dbo].[StavkaNarudzbines] Script Date: 16.9.2019.
43
06:20:39 ******/ SETANSI_NULLSON GO SETQUOTED_IDENTIFIERON GO CREATETABLE [dbo].[StavkaNarudzbines]( [StavkaNarudzbineId] [int] IDENTITY(1,1)NOTNULL, [NarudzbinaId] [smallint] NOTNULL, [Kolicina] [smallint] NOTNULL, [Ukupno] [decimal](18, 2)NOTNULL, [ArtikalId] [smallint] NOTNULL, CONSTRAINT [PK_dbo.StavkaNarudzbines] PRIMARYKEYCLUSTERED ( [StavkaNarudzbineId] ASC )WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON [PRIMARY] )ON [PRIMARY] GO /****** Object: Index [IX_ArtikalId] Script Date: 16.9.2019. 06:20:39 ******/ CREATENONCLUSTEREDINDEX [IX_ArtikalId] ON [dbo].[Cenovniks] ( [ArtikalId] ASC )WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,SORT_IN_TEMPDB=OFF,DROP_EXISTING=OFF,ONLINE=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON [PRIMARY] GO /****** Object: Index [IX_ArtikalId] Script Date: 16.9.2019. 06:20:39 ******/ CREATENONCLUSTEREDINDEX [IX_ArtikalId] ON [dbo].[StavkaNarudzbines] ( [ArtikalId] ASC )WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,SORT_IN_TEMPDB=OFF,DROP_EXISTING=OFF,ONLINE=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON [PRIMARY] GO /****** Object: Index [IX_NarudzbinaId] Script Date: 16.9.2019. 06:20:39 ******/ CREATENONCLUSTEREDINDEX [IX_NarudzbinaId] ON [dbo].[StavkaNarudzbines] ( [NarudzbinaId] ASC )WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,SORT_IN_TEMPDB=OFF,DROP_EXISTING=OFF,ONLINE=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON [PRIMARY] GO ALTERTABLE [dbo].[Narudzbinas] ADDDEFAULT ((0))FOR [Sto] GO ALTERTABLE [dbo].[Cenovniks] WITHCHECKADDCONSTRAINT [FK_dbo.Cenovniks_dbo.Artikals_ArtikalId] FOREIGNKEY([ArtikalId]) REFERENCES [dbo].[Artikals]([ArtikalId]) ONDELETECASCADE GO ALTERTABLE [dbo].[Cenovniks] CHECKCONSTRAINT [FK_dbo.Cenovniks_dbo.Artikals_ArtikalId] GO ALTERTABLE [dbo].[StavkaNarudzbines] WITHCHECKADDCONSTRAINT [FK_dbo.StavkaNarudzbines_dbo.Artikals_ArtikalId] FOREIGNKEY([ArtikalId]) REFERENCES [dbo].[Artikals]([ArtikalId])
44
ONDELETECASCADE GO ALTERTABLE [dbo].[StavkaNarudzbines] CHECKCONSTRAINT [FK_dbo.StavkaNarudzbines_dbo.Artikals_ArtikalId] GO ALTERTABLE [dbo].[StavkaNarudzbines] WITHCHECKADDCONSTRAINT [FK_dbo.StavkaNarudzbines_dbo.Narudzbinas_NarudzbinaId] FOREIGNKEY([NarudzbinaId]) REFERENCES [dbo].[Narudzbinas]([NarudzbinaId]) ONDELETECASCADE GO ALTERTABLE [dbo].[StavkaNarudzbines] CHECKCONSTRAINT [FK_dbo.StavkaNarudzbines_dbo.Narudzbinas_NarudzbinaId] GO USE [master] GO ALTERDATABASE [RestWebAppDB] SETREAD_WRITE GO
Listing 6 – SQL skript baze podataka
6.4.3. JSON fajl za komunikaciju
Slededi listing JSON koda prikazuje rezultat izvršenog GET upita ka adresi aplikacije:
«~/api/Artikal».
[
{
"ArtikalId": 12,
"Naziv": "Kiselavoda 0,33",
"Cena": 40.00
},
{
"ArtikalId": 13,
"Naziv": "SokJabuka",
"Cena": 100.00
},
{
"ArtikalId": 14,
"Naziv": "Pizza Capricciosa",
"Cena": 500.00
},
...
]
Listing 7 – Deo liste artikala u JSON formatu dobijenih preko GET zahteva
Slededi listing JSON koda prikazuje telo POST zahteva koji je potrebno izvršiti kako bi
narudžbina bila unesena u bazu podataka putem adrese:
«~/api/Narudzbina?sto=[broj stola]».
{ "StavkaNarudzbines": [
45
{ "ArtikalId": 1, "Kolicina": 1, "Ukupno": 1 }, { "ArtikalId": 2, "Kolicina": 1, "Ukupno": 1 } ] }
Listing 8 – Telo POST zahteva za kreiranje narudžbe
6.4.4. Tabela sa slojevima i podslojevima strukture aplikacije
Slededa tabela prikazuje strukturu realizovanog informacionog sistema restorana po
modulima, odnosno strukturu veb aplikacije sa veb servisom i strukturu mobilne
aplikacije.
MODUL GLAVNI SLOJ DIZAJN PATERN PODSLOJ TEHNOLOŠKA IMPLEMENTACIJA
VEB APLIKACIJA
PREZENTACIONI SLOJ
VIEW Korisnički interfejs
CSHTML, CSS, JS, jQuery
CONTROLLER Klase prezentacione logike
DLL biblioteka klasa
SERVISNI SLOJ Veb servis Projekat tipa veb servis, Klasa System.Web.Http. ApiController
Klase za mapiranje slojeva
DLL biblioteka klasa
SLOJ POSLOVNE LOGIKE
Radni tokovi - Engine za upravljanje radnim tokovima - DLL biblioteka klasa
MODEL Poslovni objekti
DLL biblioteka klasa sa klasama koje predstavljaju poslovne objekte (ArtikalViewModel, RestWebAppContext) -Master-detail odnosi podataka (Narudzbina -> StavkaNarudzbine)
Poslovna pravila
- Engine za izvršavanje poslovnih
46
pravila, eksterna poslovna pravila zapisana formalnim jezikom - DLL biblioteka klasa sa algoritmima provere i automatske primene poslovnog pravila
SLOJ ZA RAD SA PODACIMA
Rad sa relacionom bazom podataka
DLL biblioteka klasa - Entityframework
MOBILNA APLIKACIJA
PREZENTACIONI SLOJ
LAYOUT Korisnički interfejs
AXML
VIEW DLL biblioteka sa ugrađenim i korisničkim klasama
CONTROLLER Klase prezentacione logike
DLL biblioteka klasa
SERVISNI SLOJ Klase za mapiranje slojeva
DLL biblioteka klasa
SLOJ POSLOVNE LOGIKE
Radni tokovi - Engine za upravljanje radnim tokovima - DLL biblioteka klasa
MODEL Poslovni objekti
DLL biblioteka klasa sa klasama koje predstavljaju poslovne objekte
Poslovna pravila
- Engine za izvršavanje poslovnih pravila, eksterna poslovna pravila zapisana formalnim jezikom - DLL biblioteka klasa sa algoritmima provere i automatske primene poslovnog pravila
Tabela 1–Slojevi i podslojevi strukture informacionog sistema55[33],
47
6.4.5. Ključni delovi programskog koda sa objašnjenjima
U ovom odeljku nalaze se delovi koda sa objašnjenjima koji vrše logičke funkcije i upite ka bazi
podataka koji su ključni za rad aplikacije.
6.4.5.1. Korisnički interfejs veb aplikacije
Kod koji je prikazan u Listingu – Listing 9 prikazuje deo Create.cshtml datoteke koja
služi za prikaz korisničkog interfejsa za unos artikala u cenovnik. Da unos bio mogud,
neophodno je imati artikle u bazi podataka i postojede artikle koji ved u cenovniku. U
slučaju da nema artikala koji nisu dodati, prikazade se poruka u sklopu if petlje koja je u
listingu podvučena.
@using (Html.BeginForm()) { @Html.AntiForgeryToken() <div class="form-horizontal"> <hr /> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(model => model.Artikal.Naziv, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @if (Model.Artikals == null){Model.Artikals = new List<Artikal>();} @Html.DropDownListFor(model => model.ArtikalId, new SelectList(Model.Artikals, "ArtikalId", "Naziv"), "Izaberite...", new { @class = "form-control" }) @Html.ValidationMessageFor(model => model.ArtikalId, "", new { @class = "text-danger" }) @if (!Model.Artikals.Any()) { <p class="text-danger">Svi artikli su dodati u cenovnik. @Html.ActionLink("Dodajte nove artikle", "Index", "Artikals")</p> } </div> </div> ...
</div>
Listing 9– Deo koda za prikaz stranice za dodavanje artikala u cenovnik
Slededi listing 10 je u skladu sa prethodnim i prikazuje serversku stranu procesa dodavanja
artikla u cenovnik. Prva Create metoda se poziva prilikom učitavanja stranice, a druga prilikom
slanja unetih podataka putem dugmeta „Sačuvaj“.
public ActionResult Create() { var listaArtikalaNaCenovniku = db.Cenovniks.Select(x => x.Artikal);
48
var listaArtikala = new Cenovnik { Artikals = db.Artikals.Except(listaArtikalaNaCenovniku).ToList() }; return View(listaArtikala); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create([Bind(Include = "CenovnikId,ArtikalId,CenaArtikla,Aktivan,Artikals")] Cenovnik cenovnik) { if (ModelState.IsValid) { db.Cenovniks.Add(cenovnik); db.SaveChanges(); return RedirectToAction("Index"); } if (cenovnik.Artikals == null) { var listaArtikalaNaCenovniku = db.Cenovniks.Select(x => x.Artikal); cenovnik.Artikals = db.Artikals.Except(listaArtikalaNaCenovniku).ToList(); } return View(cenovnik); }
Listing 10 – Back-end logika za dodavanje artikla na cenovnik
6.4.5.2. REST Veb API
Kao što je pomenuto u istraživanjima koja su u sklopu ovog rada, da bi se aplikacija
(klijent) povezala na veb aplikaciju preko veb servisa putem jednostavnog GET,
neophodno je napraviti RESTful veb servis. U ASP.NET za to postoji ugrađena klasa
ApiController koja se nasleđuje, čime se postiže kreiranje API kontrolera.
public class ArtikalController : ApiController { private readonly RestWebAppContext _db = new RestWebAppContext(); public IQueryable<ArtikalViewModel> Get() { var artikli = _db.Cenovniks.Include(x => x.Artikal).Where(x => x.Aktivan).Select(x => new ArtikalViewModel { ArtikalId = x.ArtikalId, Naziv = x.Artikal.Naziv, Cena = x.CenaArtikla }); return artikli;
49
} ... }
Listing 11- Kreiranje REST servisa i metode GET
Sličan postupak prati kreiranje POST metode. U listingu 12 je prikazano kreiranje POST
zahteva na servisu za prijem narudžbine sa klijenta. Iz tela POST zahteva prima se
objekat tipa Narudzbina i njegove vrednosti se upisuju u bazu.
// POST: api/Narudzbina public void Post(byte sto, [FromBody]Narudzbina narudzbina) { _db.Narudzbinas.Add(new Narudzbina { Datum = DateTime.Now, Sto = sto, StavkaNarudzbines = narudzbina.StavkaNarudzbines, Ukupno = narudzbina.StavkaNarudzbines.Select(x => x.Ukupno).Sum() }); _db.SaveChanges(); }
Listing 12 – Kreiranje REST servisa i metode POST
6.4.5.3. Korisnički interfejs mobilne aplikacije
Slededi listing koda prikazuje deo koda za kreiranje korisničkog interfejsa Android
aplikacije. U listingu je prikazano kreiranje:
RelativeLayout – rasporeda sa relativnim rasporedom elemenata koji su u njega
uključeni,
Button – dugme za slanje liste stavki za unos narudžbine,
EditText – polje za unos broja stola za koji je narudžbina namenjena,
ListView – lista artikala za slanje narudžbine,
SearchView – polje za pretragu artikala.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"
50
tools:showIn="@layout/activity_main" android:id="@+id/relativeLayout1"> <Button android:text="Pošalji" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:id="@+id/btnPosalji" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:hint="Broj stola" android:gravity="center" android:id="@+id/etxtBrojStola" android:layout_toLeftOf="@id/btnPosalji" android:inputType="number" /> <ListView android:minWidth="25px" android:minHeight="25px" android:layout_width="wrap_content" android:layout_height="190dp" android:layout_below="@id/etxtBrojStola" android:id="@+id/listView1" /> <SearchView android:minWidth="25px" android:minHeight="25px" android:layout_width="wrap_content" android:layout_height="45dp" android:layout_alignParentRight="true" android:layout_alignParentLeft="true" android:layout_below="@id/listView1" android:id="@+id/searchView1" android:background="#ffbbdefb" android:queryHint="Pretraga..."/> ... </RelativeLayout>
Listing 13 – Deo (A)XML koda korisničkog interfejsa Android aplikacije
6.4.5.4. Pristup REST servisu iz Android aplikacije
U kodu koji je prikazan u listingu 14 nalaze se dve metode koje se pozivaju za
ostvarenje komunikacije sa veb servisom putem REST API-a. Za olakšani pristup,
preuzeta je, inače veoma popularna za komunikaciju sa REST servisima,
RestSharpbiblioteka i njene klase su RestClient, RestRequest i druge vezane za zahtev.
Klasi RestClient se dodeljuje URL na kojem je smešten API. Takođe, u listingu se vidi još
jedna preuzeta biblioteka za olakšani rad sa JSON podacima. U navedenom slučaju,
njena klasa JsonConvert služi za razlaganje primljenog JSON objekta u sklopu GET
zahteva i za spajanje unutar POST zahteva pre slanja podataka.
51
using RestSharp; using Newtonsoft.Json; ... //Artikli GET private void GetArtikal() { var client = new RestClient("http://10.51.37.5:45455/api/Artikal"); var request = new RestRequest(Method.GET); var response = client.Execute(request); var res = response.Content; _listaArtikala = JsonConvert.DeserializeObject<List<Artikal>>(res); } //POSTNarudzba private HttpStatusCode PostNarudzbina(string brojStola, string listaArtikala) { var client = new RestClient("http://10.51.37.5:45455/api/Narudzbina?sto=" + brojStola); var request = new RestRequest(Method.POST); request.AddJsonBody(listaArtikala); var response = client.Execute(request); return response.StatusCode; }
Listing 14 – Listing koda za kreiranje GET i POST zahteva u Android aplikaciji
6.5. Problemi realizacije
Tokom razvoja praktičnog dela ovog rada, odnosno informacionog sistema za potrebe
restoranskog poslovanja nastalo je nekoliko izazovnih problema koje je trebalo na
određeni način rešiti uz postojede iskustvo o tehnologijama i nova saznanja nastalih
prilikom istraživanja mogudeg rešenja za taj problem.
Kako je glavni problem – ujedno i glavni deo logike mobilne aplikacije – onaj koji vrši
prilagođavanje podataka za korisnički interfejs i listu za, najpre, konverziju u JSON
objekat i zatim slanje podataka na veb API putem POST zahteva.
listaIzabranihArtikala.Add( artikal.ArtikalId + " | " + izabraniArtikalNaziv + "\tKoličina: " + _kolicina.Text + "\tCena: " + (artikal.Cena * Convert.ToDecimal(_kolicina.Text)).ToString("F"));
Listing 15 – Dodavanje izabranih artikla u listu koja će biti prilagođena za slanje
52
U slededem listingu nalazi se metoda KreiranjeListeZaSlanje koja se poziva klikom na
dugme _btnPosalji za slanje narudžbina na veb servis. Ona formira novu listu
spremnaLista koja se sastoji od stavki za narudžbinu primljenih sa korisničkog
interfejsa. Podaci su morali da budu ekstraktovani iz stavki nove narudžbe koje se
prikazuju u korisničkom interfejsu u tekstualnom obliku (slika 16, desno). Nakon
formiranja liste spremnaLista, ista se dodaje u novu instancu objekat narudzba i ta
instanca se prosleđuje na konverziju u JSON objekat (metodom
JsonConvert.SerializeObject()), koji biva poslat na veb servis.
_btnPosalji.Click += delegate { var statusCode = PostNarudzbina(_etxtBrojStola.Text, KreiranjeListeZaSlanje(listaIzabranihArtikala)); ... } ... private string KreiranjeListeZaSlanje(ArrayList lista) { var spremnaLista = new List<StavkaNarudzbine>(); foreach (var stavka in lista) { var deloviStavke = stavka.ToString().Split('|',':'); var artikalId = Convert.ToInt16(deloviStavke[0].Trim()); var kolicina = Convert.ToInt16(deloviStavke[2] .Split('C').GetValue(0).ToString().Trim()); var ukupno = Convert.ToDecimal(deloviStavke[3].Trim()); spremnaLista.Add(new StavkaNarudzbine { ArtikalId = artikalId, Kolicina = kolicina, Ukupno = ukupno }); } var narudzba = new Narudzbina { StavkaNarudzbines = spremnaLista }; return JsonConvert.SerializeObject(narudzba); } ... //POST private HttpStatusCode PostNarudzbina(string brojStola, string listaArtikala) { var client = new RestClient("http://10.51.37.5:45455/api/Narudzbina?sto=" + brojStola); var request = new RestRequest(Method.POST);
53
request.AddJsonBody(listaArtikala); var response = client.Execute(request); return response.StatusCode; }
Listing 16–Prikaz formiranja liste i JSON objekta za slanje narudžbine za određeni sto
putem POST zahteva
Ovakvim planiranjem baze podataka i postupkom slanja podataka u prilagođenom
JSON objektu postiže se Master-detail dizajn interfejsa. Naime, da bi pomenut proces
bio jasniji, drugim rečima: preko POST zahteva se šalje objekat NARUDZBINA koji ne
sadrži ništa osim određeni broj pod-objekta STAVKANARUDZBINE.
{ objekat NARUDZBINA "StavkaNarudzbines": [ { pod-objekat STAVKANARUDZBINE "ArtikalId": 1, "Kolicina": 1, "Ukupno": 1 }, { pod-objekat STAVKANARUDZBINE "ArtikalId": 2, "Kolicina": 1, "Ukupno": 1 } ] } kraj objekta NARUDZBINA
Listing 17 – JSON objekat za slanje narudžbine putem POST zahteva
Kako Master-detail izgleda u korisničkom interfejsu, prikazano je na slici 18 i 19.
54
7. ZAKLJUČAK
U ovom radu, predmet istraživanja bile su tehnike programiranja kojim se postiže
razmena podataka između mobilne i veb aplikacije, datoteke koje se koriste za
razmenu podataka, softverski servisi za razmenu podataka. Cilj istraživanja bio je
izučavanje problematike razmene podataka između mobilne i veb aplikacije sa
teorijskog i naučnostručnog aspekta. Istražene su i prikazane osnovne tehnike
programiranja i popularni načini za postizanje komunikacije i razmene podataka.
Osnovna hipoteza je potvrđena kroz rezultate naučnostručnog istraživanja i
realizovanog primera. U oba pomenuta slučaja korišdenje veb servis zasnovan na REST
veb API-u za povezivanje sa udaljenim resursima, dok je prenos podataka vršen uz
upotrebudatoteka, odnosno, u realizovanom slučaju, uz upotrebuJSON objekata iz
radne memorije.
Istraživanje koje bi moglo biti nastavak ili nadovezivanje na ovaj može se usmeriti ka
drugim popularnim platformama i tehnologijama za uspostavljanje mogudnosti
razmene podataka između mobilnih i veb aplikacija različitim od ASP.NET tehnologije
sa veb strane i Android platforme sa mobilne strane. Još jedan mogud pravac za
istraživanje bi bio upotreba SOAP i praktični uporedni prikaz rezultata sa različitih
aspekata, kao na primer sa aspekta bezbednosti ili performansi.
55
8. LITERATURA
[1] Fagin, Ronald, et al. „Data exchange: semantics and query answering.“Theoretical Computer
Science 336.1 (2005): 89-124.
https://www.sciencedirect.com/science/article/pii/S030439750400725X
[2] Billingsley, F.C. (1988). „General Data Interchange Language“. ISPRS Archives. 27(B3): 80–91.
pristupljeno 27.7.2019. „The transformation routines will constitute a language and syntax which
must be discipline and machine independent.“
https://www.isprs.org/proceedings/XXVII/congress/part3/default.aspx
[3] Nurseitov, Nurzhan, et al. „Comparison of JSON and XML data interchange formats: a case
study.“ Caine 9 (2009): 157-162.
https://pdfs.semanticscholar.org/8432/1e662b24363e032d680901627aa1bfd6088f.pdf
[4] T. Anderson, (2004.) http://www.itwriting.com/xmlintro.php, pristupljeno 27.7.2019.
[5] Lewis, Joe, and MeitarMoscovitz. „AdvancED CSS“. Apress, (2009), pristupljeno 9.8.2019.
https://books.google.ba/books?id=HTtFEKPBtcsC&pg=PA5&lpg=PA5&redir_esc=y#v=onepag
e&q&f=false
[6] Zvaničnivebsajt W3C, https://www.w3.org/html/, pristupljeno 11.8.2019.
[7] Opis SGML jezika, https://www.w3.org/TR/WD-html40-970708/intro/sgmltut.html, pristupljeno
9.8.2019.
[8] HTML5 zvaničnapreporuka, https://www.w3.org/2014/10/html5-rec.html.en, pristupljeno
11.8.2019.
[9] Dokumentacija HTML5, https://www.w3.org/TR/2008/WD-html5-20080122/, pristupljeno
11.8.2019.
[10] HTML5.2 zvaničnapreporuka, https://www.w3.org/TR/2017/REC-html52-20171214/,
pristupljeno 11.8.2019.
[11] RDF model, https://www.w3.org/2001/sw/wiki/RDF, pristupljeno 19.8.2019.
[12] YAML, https://yaml.org/spec/history/2001-12-10.html, pristupljeno 19.8.2019.
[13] O REBOL jeziku, http://www.rebol.com/what-rebol.html, pristupljeno 19.8.2019.
[14] JSON naspram REBOL-a, http://www.rebol.com/article/0522.html, pristupljeno 19.8.2019.
[15] ShklarL.,Rosen R.,„Web Application Architecture“,John Wiley & Sons Ltd,(2003):4-6,
https://pdfs.semanticscholar.org/f522/e77cc67eb7f552e4882ec11ea0aaf8c1e3f4.pdf
[16] MSDN Magazin - Pojam SPA, https://msdn.microsoft.com/en-us/magazine/dn463786.aspx,
pristupljeno 25.8.2019.
[17] O statičkomidinamičkomsadrţajuveba,
https://racunarstvoiinformatika.wordpress.com/2012/04/01/staticki-i-dinamicki-vebnajcesce-
veb-tehnologije-portali/, pristupljeno 25.8.2019.
[18] MDN – O vebserveruhttps://developer.mozilla.org/en-
US/docs/Learn/Common_questions/What_is_a_web_server,pristupljeno25.8.2019.
[19] Slika: Šemadinamičkevebaplikacije, https://alb.host.cs.st-
andrews.ac.uk/webdatabases/dsn.htm,pristupljeno 27.8.2019.
56
[20] Vaţnostvebaplikacija u biznisu, https://www.linkedin.com/pulse/importance-web-applications-
businesses-sayed-jasi, pristupljeno 27.8.2019.
[21] O vebservisima, https://docs.oracle.com/javaee/6/tutorial/doc/gijvh.html, pristupljeno 28.8.2019.
[22] Vrstevebservisa, https://docs.oracle.com/javaee/6/tutorial/doc/giqsx.html,pristupljeno31.8.2019.
[23] PojamStatelessnesskod REST API-a, https://restfulapi.net/statelessness/, pristupljeno31.8.2019.
[24] RESTful vebservisi, https://docs.oracle.com/javaee/6/tutorial/doc/gijqy.html,
pristupljeno1.9.2019.
[25] Pojam AJAX-a, https://developer.mozilla.org/en-US/docs/Web/Guide/AJAX,
pristupljeno1.9.2019.
[26] ASP.NET WEB APIs, https://dotnet.microsoft.com/apps/aspnet/apis, pristupljeno 1.9.2019.
[27] What is mobile application development, https://aws.amazon.com/mobile/mobile-application-
development/, pristupljeno 1.9.2019.
[28] What Is a Mobile Application, https://www.lifewire.com/what-is-a-mobile-application-2373354,
pristupljeno2.9.2019.
[29] Android - Connect to the network, https://developer.android.com/training/basics/network-
ops/connecting, pristupljeno4.9.2019.
[30] Android – Volley, https://developer.android.com/training/volley, pristupljeno4.9.2019.
[31] Deprecating SSL 3.0, https://tools.ietf.org/html/rfc7568, pristupljeno5.9.2019.
[32] Andry, F., Wan, L., & Nicholson, D. (2011).„A mobile application accessing patientshealth
records through a RESTAPI“, HEALTHINF 2011 INTERNATIONAL CONFERENCE ON
HEALTH INFORMATICS (pp. 27-32)
[33] Opšta struktura višeslojne aplikacije,doc. dr Ljubica Kazi, Tehnički fakultet „M. Pupin“, (2016.)
http://www.tfzr.rs/Content/files/0/OPSTA%20STRUKTURA%20VISESLOJNE%20OO%20AP
LIKACIJE.pdf
[34] O Programu Visual Studio 2017 i Xamarin-u, http://visualstudio.com/, pristupljeno 16.9.2019.
[35] O Xamarinu, https://www.zdnet.com/article/xamarin-delivers-tool-for-building-native-mac-os-x-
apps-with-c/, pristupljeno 16.9.2019.
[36] O PowerDesigner-u, http://poslis.fon.rs/download/vezbe/PD%20Skripta.pdf, pristupljeno
16.9.2019.
[37] O Xamarin-u, https://docs.microsoft.com/en-gb/xamarin/, pristupljeno 16.9.2019.
[38] SlikaXamarin.Formsslojeva, https://www.imobdevtech.com/Xamarin.Forms-Make-Cross-
Platform-Mobile-Development-Impactful, pristupljeno 16.9.2019.
[39] Android zvaničnadokumentacija, https://developer.android.com, 16.9.2019.
9. PRILOZI
9.1. Prilog 1
Sažet programerski pojmovnik za Android operativni sistem
57
Pojam Značenje pojma
Activity (bilo koje dugme, tekstualno polje je aktivnost)
Svaki zasebni prikaz (ekran)korisničkog interfejsa
View Svaki element korisničkog interfejsa (dugme, raspored, lista…)
AsyncTask Predstavlja zadatak koji se izvršava asinhrono, što znači u pozadini, bez blokiranja korisničkog interfejsa
Bundle Ugrađena biblioteka za prenos podataka između Activity-a
Fragment Deo Activity-a, uz pomodu kojeg se ostvaruje veda modularnost dizajna
Intent Ugrađena biblioteka za prenos kratkih poruka između Activity-a
Stream Niz elemenata koji podržava redne i paralelne zbirne operacije (pr. preuzimanje datoteke)
Task Definiše jedinicu niza korisničke interakcije kao jedan zadatak.Task takođe čuva podatke o svim aktivnostima koje je korisnik otvorio.
Tabela 2 – Pojmovnik za Android operativni sistem[39]
58
9.2. Prilog 2 – Listingkoda
using System.Collections.Generic; namespace RestMobApp { public class Narudzbina { public ICollection<StavkaNarudzbine> StavkaNarudzbines { get; set; } } } ... namespace RestMobApp { public class StavkaNarudzbine { public short ArtikalId { get; set; } public short Kolicina { get; set; } public decimal Ukupno { get; set; } } }
Listing 18 – Kod za klase putem kojih se u Android aplikaciji formira objekat za slanje
narudžbine putem POST zahteva