Permalänk
Medlem

Hur kommunicera app - sql?

Vilket är ett bra/det bästa sättet att få en app (i förstahand till iOS, men senare till android) att kommunicera med SQL?

Jag har tänkt mig genom php, appen skickar inparametrar till min php-sida, som hämtar de önskade värdena från SQL och skickar tillbaka till appen.
Finns det någon direkt metod utan php?

Tack på förhand.

Visa signatur

i5 750 @ 4.0 GHz | GTX 680 | 8 GB Corsair Vengence CL9 | X25-M 80 GB SSD | Gigabyte GA-P55-UD3 | Fractal Design Newton 500W | Fractal Design R2 | BenQ XL 2410T 120hz

Permalänk
Medlem

Det beror ju helt på vad du hade tänkt att spara, eftersom du snackar om PHP så antar jag du syftar på någon form av centraliserad DB, då är det ju enklast att låta den servern ha någon form av webservice, REST t.ex. Så kan du enkelt posta data till den (t.ex. posta high scores eller nåt).

Om du snackar om data som ENDAST är till den lokala Appen så bör du ju använda de DB lösningar som finns för mobilerna, t.ex. SQLite för android

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem

Att inte ha ett lager mellan appen och databasservern är fatalt. Det innebär ju att vem som helst kan skicka in vad som helst till din server och mao kan sabba så mycket som databasanvändaren är tillåten att göra.

Permalänk
Skrivet av iXam:

Att inte ha ett lager mellan appen och databasservern är fatalt. Det innebär ju att vem som helst kan skicka in vad som helst till din server och mao kan sabba så mycket som databasanvändaren är tillåten att göra.

Inte nödvändigtvis, räcker med att sätta ett lösenord/checksumma eller liknande som ligger hårdkodat i appen. Inte tillräcklig säkerhet för en bankapp precis men duger åt det mesta.

Permalänk
Medlem

Bygg en REST service med JSON i PHP borde väll vara en ganska smidig lösning? Det brukar jag använda iaf.

JSON har dessutom minimal overhead och det finns snabba parsers i typ alla språk.

Permalänk
Medlem
Skrivet av iXam:

Att inte ha ett lager mellan appen och databasservern är fatalt. Det innebär ju att vem som helst kan skicka in vad som helst till din server och mao kan sabba så mycket som databasanvändaren är tillåten att göra.

Bara att lägga till en MAC lr liknande om du vill vara säker på vad som skickas in

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem
Skrivet av infinity08:

Inte nödvändigtvis, räcker med att sätta ett lösenord/checksumma eller liknande som ligger hårdkodat i appen. Inte tillräcklig säkerhet för en bankapp precis men duger åt det mesta.

Nej. Det duger inte till det mesta. Så fort appen blir poppis *kommer* någon att sniffa trafiken och syna protokollet och vips är det kört.

Skrivet av Gnejs:

Bara att lägga till en MAC lr liknande om du vill vara säker på vad som skickas in

Du får gärna ge mig ett exempel på hur det skulle göra saker säkrare. Om både klienten och servern anses säkra så är det ju en ide men här anses ju klienten osäker. Och sen behövs ju MACen kollas och mao behövs en server side språk.
Vi snackar ju inte om "man in the middle"-attacker utan att en klient kan skicka vilken SQL som helst.

Permalänk
Medlem
Skrivet av iXam:

Nej. Det duger inte till det mesta. Så fort appen blir poppis *kommer* någon att sniffa trafiken och syna protokollet och vips är det kört.

Du får gärna ge mig ett exempel på hur det skulle göra saker säkrare. Om både klienten och servern anses säkra så är det ju en ide men här anses ju klienten osäker. Och sen behövs ju MACen kollas och mao behövs en server side språk.

Den svaga "länken" om du använder dig av MACning är ju endast nyckellagringen på klienten, om nån sniffar trafiken har ingen betydelse alls.
Det beror ju mest på vad man ska skicka å välja en pragmatisk lösning i förhållande till det

Edit: Du la till ang SQL efter inlägget. Självklart skickar man inte SQL, du skickar ju endast data/instruktioner till resurserna så tar den hand om alla queries^^

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem
Skrivet av Gnejs:

Den svaga "länken" om du använder dig av MACning är ju endast nyckellagringen på klienten, om nån sniffar trafiken har ingen betydelse alls.
Det beror ju mest på vad man ska skicka å välja en pragmatisk lösning i förhållande till det

Edit: Du la till ang SQL efter inlägget. Självklart skickar man inte SQL, du skickar ju endast data/instruktioner till resurserna så tar den hand om alla queries^^

Ja och det var ju det som OP frågade om. Men då är vi på samma nivå

Permalänk
Medlem

Hade blivit ett helvete om man hade haft SQLn i Appen å köra mot en remote DB direkt-.- Då kan du inte ändra databasen heller eftersom du aldrig kan veta om alla versioner(som folk har installerade) av Appen har rätt SQL osv. It would be madness Mår illa bara av att tänka på det!
Tror TS borde kunna lösa det nu iaf

Cheers!

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem

Tack för era svar. Det stämmer att jag vill ha en central DB.
Ang. säkerheten var det precis det jag oroat mig för, kändes väldigt osäkert att ha en PHP emellan.

Jag nämnde det inte men jag är väldigt ny till programmering, jag läser dock java just nu så jag förstår grunderna.
REST sköter alltså de queries jag tänkt PHP skulle sköta åt mig genom appen direkt om jag förstår det rätt?

Jag ska läsa mer här imorgon: http://www.oracle.com/technetwork/articles/javase/index-13717...
Rätta mig gärna om jag hamnat fel

Tack återigen för era svar!

Visa signatur

i5 750 @ 4.0 GHz | GTX 680 | 8 GB Corsair Vengence CL9 | X25-M 80 GB SSD | Gigabyte GA-P55-UD3 | Fractal Design Newton 500W | Fractal Design R2 | BenQ XL 2410T 120hz

Permalänk
Medlem
Skrivet av Umiss:

Tack för era svar. Det stämmer att jag vill ha en central DB.
Ang. säkerheten var det precis det jag oroat mig för, kändes väldigt osäkert att ha en PHP emellan.

Jag nämnde det inte men jag är väldigt ny till programmering, jag läser dock java just nu så jag förstår grunderna.
REST sköter alltså de queries jag tänkt PHP skulle sköta åt mig genom appen direkt om jag förstår det rätt?

Jag ska läsa mer här imorgon: http://www.oracle.com/technetwork/articles/javase/index-13717...
Rätta mig gärna om jag hamnat fel

Tack återigen för era svar!

Om du nu läser Java varför inte göra servern i Java ?:) Väldigt lätt å sätta upp en embedded Jetty med REST-resurser sen kan du ha logik och SQL i Java servern å ansluta till DB med jdbc som vanligt^^ Finns väldigt mkt tutorials å libs att använda för att få upp resurserna smidigt, mappa/marshalla JSON osv
Såvida det inte nu är så att du har använt PHP tidigare

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Avstängd

Om din app skall fungera smidigt även med sämre mottagning bör du använda iOS lokala SQL-server.
Lektion 14
http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads...

Permalänk
Medlem
Skrivet av Umiss:

Tack för era svar. Det stämmer att jag vill ha en central DB.
Ang. säkerheten var det precis det jag oroat mig för, kändes väldigt osäkert att ha en PHP emellan.

Jag nämnde det inte men jag är väldigt ny till programmering, jag läser dock java just nu så jag förstår grunderna.
REST sköter alltså de queries jag tänkt PHP skulle sköta åt mig genom appen direkt om jag förstår det rätt?

Jag ska läsa mer här imorgon: http://www.oracle.com/technetwork/articles/javase/index-13717...
Rätta mig gärna om jag hamnat fel

Tack återigen för era svar!

REST är en typ av plattformsoberoende webbkommunikation där användaren (mer korrekt klienten, i detta fall din app) "surfar in" på en webbtjänst och får ett svar i exempelvis JSON eller XML. Själva webbtjänsten kan du implementera i vilket språk som helst.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Gnejs:

Om du nu läser Java varför inte göra servern i Java ?:) Väldigt lätt å sätta upp en embedded Jetty med REST-resurser sen kan du ha logik och SQL i Java servern å ansluta till DB med jdbc som vanligt^^ Finns väldigt mkt tutorials å libs att använda för att få upp resurserna smidigt, mappa/marshalla JSON osv
Såvida det inte nu är så att du har använt PHP tidigare

Jag förstod typ 10% av det där, men dels är det tänkt att databasen bör vara plattformsoberoende för att kunna hämta data till såväl iOS, android samt eventuell hemsida.
Jag antar att SQL i detta fallet är en bra idé, då jag som ni säger kan använda REST mellan apparna och PHP mellan eventuell hemsida.

Skrivet av MartenKL:

Om din app skall fungera smidigt även med sämre mottagning bör du använda iOS lokala SQL-server.
Lektion 14
http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads...

Tack, jag ska kika på länken.

Skrivet av Teknocide:

REST är en typ av plattformsoberoende webbkommunikation där användaren (mer korrekt klienten, i detta fall din app) "surfar in" på en webbtjänst och får ett svar i exempelvis JSON eller XML. Själva webbtjänsten kan du implementera i vilket språk som helst.

Jag förstår. För mig låter det väldigt likt min lösning med PHP? Appen surfar in på en webbtjänst (PHP-sidan) och får svar i exempelvis JSON?
Om jag förstått rätt ska dock REST vara säkrare, jag har inte hunnit gå igenom länken jag postade ovan än (har heltidsjobb) men ska försöka sätta mig in i det snart.

Vill mest ha råd så jag inte går i fel riktning och sen behöver göra om, detta ser jag som ett projekt att lära mig programmera främst, appen görs i samarbete med en vän som har erfarenhet av appar, men inte databaser.

Visa signatur

i5 750 @ 4.0 GHz | GTX 680 | 8 GB Corsair Vengence CL9 | X25-M 80 GB SSD | Gigabyte GA-P55-UD3 | Fractal Design Newton 500W | Fractal Design R2 | BenQ XL 2410T 120hz

Permalänk
Medlem

REST har inget med säkerhet att göra. I så fall får du implementera OAUTH ( så som google, facebook,twitter etc authentiserar externa appar mot deras API). Jag implementerade det själv i php och visst de var lite krångligt men de tog inte mer än nån dag eller två.

Permalänk
Medlem
Skrivet av =JoNaZ=:

REST har inget med säkerhet att göra. I så fall får du implementera OAUTH ( så som google, facebook,twitter etc authentiserar externa appar mot deras API). Jag implementerade det själv i php och visst de var lite krångligt men de tog inte mer än nån dag eller två.

Tack för förslaget, kom fram till detta igår att jag behöver någon form av autentisering.
Ska kika på detta efter jobbet: http://code.google.com/p/oauth2-php/

Visa signatur

i5 750 @ 4.0 GHz | GTX 680 | 8 GB Corsair Vengence CL9 | X25-M 80 GB SSD | Gigabyte GA-P55-UD3 | Fractal Design Newton 500W | Fractal Design R2 | BenQ XL 2410T 120hz

Permalänk
Medlem

Kör du med oauth2 så kräver det att du har giltigt ssl certifikat. oauth1 krypterar signeringen på ett sätt så du inte behöver ssl på servern.

Permalänk
Medlem

Jag har läst på lite av det ni lett mig in på, och för mig verkar det som att det bara är krångel att få igång RESTful. Har även kollat på JSON-RPC men det verkar inte vara riktigt det jag är ute efter?

Jag gjorde istället min egna php-kod, och enligt den kan jag ju nu hämta den information jag vill ha ur databasen som json:

Exempel på request från valfri app:
getjson.php?columns=*&where=city&whereis=Lund&table=list

På vilket sätt är detta sämre än RESTful eller JSON-RPC?
Nästa steg blir att implementera OAUTH1.

<?php include_once 'sql2json.php'; // header ("Content-type: application/json; charset=utf-8"); // When testing is finished, remove the comments to make this json file header("Content-Type: text/html; charset=utf-8"); // DEBUGGING ONLY! // get variables if(isset($_GET['columns'])) $columns = $_GET['columns']; else $columns = '*'; if(isset($_GET['table'])) $table = $_GET['table']; else $table = 'list'; // Standard table to show if(isset($_GET['where'])) $where = $_GET['where']; else $where = null; if(isset($_GET['whereis'])) $whereis = $_GET['whereis']; else $whereis = null; if(isset($where) & isset($whereis)) $finalwhere="WHERE " . $where . "=" . "'" . $whereis . "'"; // WHERE $where='$whereis' else $finalwhere=null; // connect to database $con = mysql_connect("localhost","test","123"); if (!$con) die('Could not connect: ' . mysql_error()); mysql_select_db("test", $con); // select database mysql_set_charset('utf8'); $result = sql2json("SELECT $columns FROM $table $finalwhere"); if(!$result) echo "[{No result, check parameters}]"; else echo $result; mysql_close($con); /* Attributes * * * * * * * * * * * * * * * * * * * * * * * * * - columns default = * * - table default = list * - where default = null * - whereis default = null * * how to call: * getjson.php?columns=*&where=city&whereis=Lund&table=list * */ ?>

Visa signatur

i5 750 @ 4.0 GHz | GTX 680 | 8 GB Corsair Vengence CL9 | X25-M 80 GB SSD | Gigabyte GA-P55-UD3 | Fractal Design Newton 500W | Fractal Design R2 | BenQ XL 2410T 120hz

Permalänk
Medlem
Skrivet av Umiss:

Jag har läst på lite av det ni lett mig in på, och för mig verkar det som att det bara är krångel att få igång RESTful. Har även kollat på JSON-RPC men det verkar inte vara riktigt det jag är ute efter?

Jag gjorde istället min egna php-kod, och enligt den kan jag ju nu hämta den information jag vill ha ur databasen som json:

Exempel på request från valfri app:
getjson.php?columns=*&where=city&whereis=Lund&table=list

På vilket sätt är detta sämre än RESTful eller JSON-RPC?
Nästa steg blir att implementera OAUTH1.

Det finns inget extra att "få igång" med RESTful. Det är, som tidigare sagts, en designfråga snarare än teknisk lösning. Din lösning är nästan där men tar för många inparametrar för att uppfylla alla kriterier, vilket även är den uppenbara (och stora) svaghet jag ser i systemet. Datan hämtas genom att man godtyckligt injicerar anropsparametrar och en användare kan missbruka tjänsten genom att till exempel skicka en query som hämtar ut all användardata.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

Det finns inget extra att "få igång" med RESTful. Det är, som tidigare sagts, en designfråga snarare än teknisk lösning. Din lösning är nästan där men tar för många inparametrar för att uppfylla alla kriterier, vilket även är den uppenbara (och stora) svaghet jag ser i systemet. Datan hämtas genom att man godtyckligt injicerar anropsparametrar och en användare kan missbruka tjänsten genom att till exempel skicka en query som hämtar ut all användardata.

Med betoning på att jag är helt en nybörjare inom området, jag hittar endast guider liknande dessa när jag googlar REST:
http://coenraets.org/blog/2011/12/restful-services-with-jquer...
http://www.recessframework.org/page/routing-in-recess-screenc...

Oftast används något framework för RESTful, som helt enkelt gör om det skickade URL till en SQL-query precis som jag, fast inte lika uppenbar och framför allt inte godtycklig, utan snarare förutbestämd (motverka sql-injection?).

Kan någon förklara hur jag i praktiken använder mig av RESTful, eller om jag bara ska köra på en framework?

Visa signatur

i5 750 @ 4.0 GHz | GTX 680 | 8 GB Corsair Vengence CL9 | X25-M 80 GB SSD | Gigabyte GA-P55-UD3 | Fractal Design Newton 500W | Fractal Design R2 | BenQ XL 2410T 120hz

Permalänk
Medlem
Skrivet av Umiss:

Med betoning på att jag är helt en nybörjare inom området, jag hittar endast guider liknande dessa när jag googlar REST:
http://coenraets.org/blog/2011/12/restful-services-with-jquer...
http://www.recessframework.org/page/routing-in-recess-screenc...

Oftast används något framework för RESTful, som helt enkelt gör om det skickade URL till en SQL-query precis som jag, fast inte lika uppenbar och framför allt inte godtycklig, utan snarare förutbestämd (motverka sql-injection?).

Kan någon förklara hur jag i praktiken använder mig av RESTful, eller om jag bara ska köra på en framework?

Jag tycker exemplet med Slim-framework ser riktigt trevligt ut, det kanske är något att köra på? I exemplet använder sig killen av parameteriserade SQL-queries vilket är säkrare än att bygga en query-sträng. Precis som du säger är även logiken uppdelad och mindre generisk vilket gör anropet från klientsidan mindre komplicerat.

Kolla in Wikipedias artikel om REST för en begriplig summering: http://en.m.wikipedia.org/wiki/Representational_state_transfe...

Visa signatur

Kom-pa-TI-bilitet