Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Delphi server android client

[es] :: Pascal / Delphi / Kylix :: Delphi server android client

Strane: 1 2

[ Pregleda: 5573 | Odgovora: 38 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

captPicard
programer
more i planine

Član broj: 216084
Poruke: 1119



+19 Profil

icon Delphi server android client05.04.2017. u 21:04 - pre 84 meseci
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.
F
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Delphi server android client05.04.2017. u 21:43 - pre 84 meseci
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.
 
Odgovor na temu

captPicard
programer
more i planine

Član broj: 216084
Poruke: 1119



+19 Profil

icon Re: Delphi server android client05.04.2017. u 22:10 - pre 84 meseci
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?
F
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Delphi server android client05.04.2017. u 22:44 - pre 84 meseci
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.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Delphi server android client05.04.2017. u 22:59 - pre 84 meseci
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
 
Odgovor na temu

captPicard
programer
more i planine

Član broj: 216084
Poruke: 1119



+19 Profil

icon Re: Delphi server android client05.04.2017. u 23:29 - pre 84 meseci
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.

F
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Delphi server android client06.04.2017. u 00:24 - pre 84 meseci
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




[Ovu poruku je menjao djoka_l dana 06.04.2017. u 01:36 GMT+1]
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Delphi server android client06.04.2017. u 00:46 - pre 84 meseci
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
 
Odgovor na temu

anon115774

Član broj: 115774
Poruke: 1656



+920 Profil

icon Re: Delphi server android client06.04.2017. u 01:00 - pre 84 meseci
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.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Delphi server android client06.04.2017. u 01:15 - pre 84 meseci
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
 
Odgovor na temu

captPicard
programer
more i planine

Član broj: 216084
Poruke: 1119



+19 Profil

icon Re: Delphi server android client06.04.2017. u 01:16 - pre 84 meseci
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.
F
 
Odgovor na temu

captPicard
programer
more i planine

Član broj: 216084
Poruke: 1119



+19 Profil

icon Re: Delphi server android client06.04.2017. u 01:20 - pre 84 meseci
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?
F
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Delphi server android client06.04.2017. u 01:26 - pre 84 meseci
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
 
Odgovor na temu

captPicard
programer
more i planine

Član broj: 216084
Poruke: 1119



+19 Profil

icon Re: Delphi server android client06.04.2017. u 01:31 - pre 84 meseci
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 :)


F
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6275

Sajt: pedja.supurovic.net


+1570 Profil

icon Re: Delphi server android client06.04.2017. u 07:05 - pre 84 meseci
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.

 
Odgovor na temu

anon115774

Član broj: 115774
Poruke: 1656



+920 Profil

icon Re: Delphi server android client06.04.2017. u 08:54 - pre 84 meseci
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...
 
Odgovor na temu

ravni

Član broj: 8894
Poruke: 373



+15 Profil

icon Re: Delphi server android client06.04.2017. u 11:05 - pre 84 meseci
6.5.4.  404 Not Found

The 404 (Not Found) status code indicates that the origin server did
not find a current representation for the target resource or is not
willing to disclose that one exists.

https://tools.ietf.org/html/rfc7231#section-6.5.4

Prema ovome, ok je upotrebiti ovaj status za nedostajuceg ljubimca.
 
Odgovor na temu

iglig
Igor Iglič
Beograd, Srbija

Član broj: 300685
Poruke: 80



+16 Profil

icon Re: Delphi server android client06.04.2017. u 14:05 - pre 84 meseci
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.
 
Odgovor na temu

anon115774

Član broj: 115774
Poruke: 1656



+920 Profil

icon Re: Delphi server android client06.04.2017. u 14:22 - pre 84 meseci
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.".
 
Odgovor na temu

captPicard
programer
more i planine

Član broj: 216084
Poruke: 1119



+19 Profil

icon Re: Delphi server android client06.04.2017. u 15:27 - pre 84 meseci
Ok, koliko sam shvatio, u header ide kod odgovora 2xx, 4xx a u body ide JSON sa biznis odgovorom?
F
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Delphi server android client

Strane: 1 2

[ Pregleda: 5573 | Odgovora: 38 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.