Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 38 odgovora
  • 9.401 pregleda

Najnovija ↓

Delphi server android client 05.04.2017. u 22:04 · pre 116 meseci #1
Dakle, nisam još definitivno odlučio, ali želim čuti i ovdje mišljenja. Ideja je slijedeća:
Android -> aplikacija za narudžbe u restoranu. Kači se na lokalni wifi, osnovni parametri su u sqlite bazi.
Delphi -> server, prima i obrađuje podatke

Razmišljao sam napraviti jednostavan rest server. Android kod prijave konobara šalje npr
Code:
localhost/1234/konobar/1

Delphi http server zaprima, provjerava da li postoji konobar 1 i vraća TRUE/FALSE.

Razmišljao sam o Indy http serveru, razmjena podataka JSON.

Molim za iskustva, prijedloge. Ima netko savjet zašto ne/da http server?
Hvala.
Potpis
F
Re: Delphi server android client 05.04.2017. u 22:43 · pre 116 meseci #2
Ako misliš da praviš REST server nema razloga da ne koristiš http server koji najbolje "leži" uz alat - Indy za Delphi, Tomcat za Javu, Kestrel za .Net.
Naravno, uvek možeš i da napraviš svoju implementaciju servera, ali onda moraš sam da procesiraš hedere.

I nije true/false odgovor nego 200 za OK, a neki od statusa 4xx ili 5xx za različite greške.
Re: Delphi server android client 05.04.2017. u 23:10 · pre 116 meseci #3
Ok, hvala djoka. Imaš neko "pametnije" rješenje od REST servera?

Napisao sam true/false jer sam planirao da repsonse bude uvijek neki JSON string, za konkretan primjer npr
Code:
{"konobar": true}
ili je to loša praksa?
Potpis
F
Re: Delphi server android client 05.04.2017. u 23:44 · pre 116 meseci #4
Pa, nije neki problem da uvek vraćaš neki JSON u response contentu ali nije ni neophodno. Po nekom pravilu, GET treba da vrati JSON, a ako želiš samo da uradiš UPDATE ili INSERT koristiš POST ili PUT metod. Tada se očekuje samo status, a ne i dodatne informacije. Opet, to je stvar tvoje odluke.

Ako misliš sam da uradiš i serverski i klijentski deo, tada budi dosledan samom sebi, a ako želiš da još nekog da uključiš, nemoj da iznenađuješ ljude. Nije problem da se bilo šta isprogramira, samo ne vidim šta time dobijaš.

Ono što je moguća komplikacija je da ne napraviš "overkill" pa da se nepotrebno upetljavaš u REST. Postoje i jaki razlozi zašto REST.bZamisli sledeću situaciju - ne napraviš REST server nego nabudžiš nešto svoje, pa ti onda naručilac posla kaže: ovaj tvoj softver je strava, a da li možeš da sada jelovnik staviš na web sajt restorana?

Jelovnik već držiš u bazi, ali sada moraš da pišeš novi API za web, a drugi za kelnersku aplikaciju.
Re: Delphi server android client 05.04.2017. u 23:59 · pre 116 meseci #5
Citat:
The HTTP specification (RFC 2616) has a number of recommendations that are applicable. Here is my interpretation:

HTTP status code 200 OK for a successful PUT of an update to an existing resource. No response body needed. (Per Section 9.6, 204 No Content is even more appropriate.)
HTTP status code 201 Created for a successful PUT of a new resource, with the most specific URI for the new resource returned in the Location header field and any other relevant URIs and metadata of the resource echoed in the response body. (RFC 2616 Section 10.2.2)
HTTP status code 409 Conflict for a PUT that is unsuccessful due to a 3rd-party modification, with a list of differences between the attempted update and the current resource in the response body. (RFC 2616 Section 10.4.10)
HTTP status code 400 Bad Request for an unsuccessful PUT, with natural-language text (such as English) in the response body that explains why the PUT failed. (RFC 2616 Section 10.4)


http://stackoverflow.com/quest...put-operation-return-something
Re: Delphi server android client 06.04.2017. u 00:29 · pre 116 meseci #6
Hvala djoka, od silnog googlanja sada mi je košmaru glavi. REST sam uzeo kao prvi izbor baš iz tog razloga da kasnije budem fleksibilniji.
Jesam dobro shvatio?

Android Client odradi nešto i šalje JSON tipa

Code:
{"narudzba": {
  "stol": "1",
  "artikli":  [
      {"sifra": "1", "kolicina": "1"},
      {"sifra": "2", "kolicina": "5"},
      {"sifra": "3", "kolicina": "7)"}
    ]
}}


i šalje to npr.

Code:
localhost:123/narudzba/{JSONstring}
(POST)

Delphi Server prima JSON, parsiram ga i zapisujem u bazu.

U obratnom slučaju, kada Android Client zatraži stanje stola 1,

{
"stol":"1"
}

Code:
localhost:123/stol/{JSONstring}
(GET)

Delphi Server šalje JSON na

Code:
localhost:123/stol/{JSONstring}
(GET)

Android Client prima JSON, parsira i prikazuje na ekranu.
Potpis
F
Re: Delphi server android client 06.04.2017. u 01:24 · pre 116 meseci
izmenjeno 1 put, poslednji put djoka_l 06.04.2017. u 01:36
  1. djoka_l06.04.2017. u 01:36zapis iz teksta poruke
#7
Nije tako.

Klijent šalje nešto tipa:

Code:

PUT localhost:port/appname/v1/narudzba HTTP/1.1
Host: clinet_name_or_ip_address
Content-Type: application/json

{"narudzba": {
  "stol": "1",
  "artikli":  [
      {"sifra": "1", "kolicina": "1"},
      {"sifra": "2", "kolicina": "5"},
      {"sifra": "3", "kolicina": "7)"}
    ]
}}


a server vraca nesto kao

Code:

Content-Type: application/json
status: 201 OK

{ "ID": "/appname/v1/narudzba/23456" }

(ne mora ceo URI, moze samo ID 23456)

Ovo je pod pretpostavkom da je ovo prva narudzbenica (PUT) i da se u odgovoru vrati ID 23456. Ako se jos nesto doda onda ides sa POST na localhost:port/appname/v1/narudzba/23456

JSON je UVEK u content delu, u URI ide samo id resursa (a resurs je u ovom slucaju narudzba sa ID: 23456

Da bi dobio sve narudzbine klijent moze da posalje samo
Code:

GET localhost:port/appname/v1/narudzba HTTP/1.1
Host: client_name_or_ip


pa da dobije odgovor kao monstruozni JSON
Code:

Content-Type: application/json
status: 200 OK 

{MONSTRUOZNI JSON}


ili da pita samo za specificni id:
Code:

GET localhost:port/appname/v1/narudzba/23456 HTTP/1.1
Host: client_name_or_ip
Re: Delphi server android client 06.04.2017. u 01:46 · pre 116 meseci #8
Ti pravis serverski deo gde prijavis da neka funkcija reaguje na /appname/v1/narudzba

Funkcija dobija kao argument, recimo varijablu Message
Ti onda mozes da pristupis poljima hedera, recimo sa Message.Header.Content-Type
a samoj JSON poruci kao Message.Content pa da onda parsiras JSON
Re: Delphi server android client 06.04.2017. u 02:00 · pre 116 meseci #9
Citat:
djoka_l:I nije true/false odgovor nego 200 za OK, a neki od statusa 4xx ili 5xx za različite greške.


Ovo nikako. Njemu trebaju biznis odgovori a ne tehnicki odgovori.

Znaci, ako konobar ID 1 ne postoji to nije tehnicki problem nego biznis problem i u tom slucaju svakako treba da vrati HTTP 200 uz odgovarajuci JSON koji ce druga strana da interpretira.
Re: Delphi server android client 06.04.2017. u 02:16 · pre 116 meseci #11
djoka, puno hvala na trudu, puno je jasnije nego je bilo na prvom pitanju.
Javim se sutra na PM pa možda dogovorimo neku suradnju ako imate vremena.
Potpis
F
Re: Delphi server android client 06.04.2017. u 02:20 · pre 116 meseci #12
Citat:
djoka_l:
Pa nije tako, hajde da piamo swagger kako treba:
http://petstore.swagger.io/

pogledaj, recimo return kodove za PUT metod za URI /pet


400 Invalid ID supplied
404 Pet not found
405 Validation exception


Znači ja bi mogao npr. slijedeće?

400 ID konobara ne postoji
401 ID konobara je prijavljen na drugom uređaju
402 ID OK

Ali da li se može definirati na serveru koji kod da vraća za koju grešku? Ili sam zabrazdio sa razmišljanjem?
Potpis
F
Re: Delphi server android client 06.04.2017. u 02:26 · pre 116 meseci #13
Return kodovi su ono sto se definise APIjem. Mozes da vratis bilo sta, ali ako neces da iznenadjujes ljude koji pisu klijenta, vratices 2xx za uspeh, 4xx za gresku.

Znaci ne 402 ID OK, nego 200 ID OK (ili 201 ako je to kreiralo novi slog u bazi, ili 204 ako je content prazan). Uopste ni ne moras da koristis HTTP protokol, mozes da smislis svoj, pa da te programeri koji rade klijentsku aplikaciju mrze kao Nemca :)
Re: Delphi server android client 06.04.2017. u 02:31 · pre 116 meseci #14
Hahahahahahaha :)
Kužim, pratim logiku 2XX za uspjeh i 4XX za grešku i to je to. Možda sam dosadan sa pitanjima, ali vjerujem da će i drugim kolegama to koristiti :)

Potpis
F
Re: Delphi server android client 06.04.2017. u 08:05 · pre 116 meseci #15
Nemi se taj REST pristup nikako nije uklapao. Kad god sam pravio API, uvek sam se ograđivao od HHTP poruika. Ako se pai izvrši on uvek vrati 200 a u jsonu se nalazi sve što treba pa i statusi grešaka. U praksi se pokazalo kao vrlo korisno, fleksibilno i oslobađajuće od stega HTTP-a.

Nije ništa komplikovano za implementaciju i lako se primenjuje na svim platformama.
Potpis
http://pedja.supurovic.net - http://wireless.uzice.net - Besplatni .RS domeni - Mikrotik uputstva - YT9TP - OpenStreetMap Srbija
Re: Delphi server android client 06.04.2017. u 09:54 · pre 116 meseci #16
Citat:
djoka_l:
Pa nije tako, hajde da piamo swagger kako treba:
http://petstore.swagger.io/

pogledaj, recimo return kodove za PUT metod za URI /pet


400 Invalid ID supplied
404 Pet not found
405 Validation exception


Ovo je klasicno silovanje standarda. Ako je negde definisano da je HTTP 404 = Strana ne postoji onda tako treba i da bude a ne da se tehnicke greske koriste umesto biznis gresaka. Kako ce onda da signalizira natrag ako stranica stvarno ne postoji? Da izmisli neki novi kod?

I kako se onda uopste razlikuju biznis poruke od tehnickih poruka?

Po meni ovo je veoma opasno bez obzira sta na nekom sajtu pisalo. HTTP je bio i ostao tehnicki odgovor a biznis odgovore treba lepo upakovati u body (json ili sta god) i teraj...
Sviđa mi se1
Re: Delphi server android client 06.04.2017. u 15:05 · pre 116 meseci #18
Opet priča o standardizaciji, naravno da je poželjno pratiti preporuke ali šta ćemo kad npr postoji nekoliko konfliktnih ISO-a, da sedimo danima pred ekranima i plačemo od muke? Poenta je da se reši zadati problem a ne da akademski diskutujemo na ovu temu jer je stara koliko i web 2.0. Turi sve to u lepo formatiran Json, budi dosledan prilikom korišćenja naziva, napravi rečnik i ostatak dokumentacije pa nećeš imati problema ukoliko budeš morao da radiš refactor zbog dublje integracije u drugi API ili zbog promene serverske tehnologije. Bez dokumentovanja svakog bitnog koraka bićeš u problemu pratio standarde ili ne.
Re: Delphi server android client 06.04.2017. u 15:22 · pre 116 meseci #19
Ovo uopste nije teoretisanje vec cista praksa. Naravno da sve moze da se tumaci i ovako i onako ali u citiranom lepo pise da 404 treba da signalizira da resurs sa druge strane ne postoji ili server iz nekog razloga ne zeli da ga da. Dakle, ako pozovem stranicu i server mi kaze 404 to je tehnicki problem a ako mi server da stranicu sa sadrzajem koji mi se ne svidja to je onda biznis problem.

Problem nastaje kada gomila programera koji su totalno odvojeni i operisani od biznisa krenu da primenjuju svoju logiku. Tako se dobijaju ove varijante gde se biznis logika implementira u HTTP odgovore.

Odmah se setim one izreke: "Postoje uvek dva nacina da se nesto uradi: ispravan i laksi.".
Sviđa mi se1
Re: Delphi server android client 06.04.2017. u 16:27 · pre 116 meseci #20
Ok, koliko sam shvatio, u header ide kod odgovora 2xx, 4xx a u body ide JSON sa biznis odgovorom?
Potpis
F
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme