Du tänker det är enklare och snabbare att göra det med JDBC eftersom du inte tänker på den verkliga operativa miljön för telefoner och bärbara enheter. De har ofta fläckiga anslutningar genom buggy trafik omskrivningsproxies och galna brandväggar. De använder vanligtvis ett nätverkstransportlager som har höga och varierande paketförlusthastigheter och latenser som varierar över många storleksordningar under korta tidsperioder. TCP är verkligen inte bra i den här miljön och kämpar särskilt med långlivade anslutningar.
Den viktigaste fördelen med en webbtjänst är att den:
-
Har kortlivade anslutningar med minimalt tillstånd, så det är lätt att komma tillbaka till var du var när enheten växlar WiFi-nätverk, till/från mobil, förlorar anslutningen kort, etc; och
-
Kan passera genom alla utom de mest hemska och drakoniska webbproxies
Du kommer rutinmässigt stöter på problem med en direkt JDBC-anslutning. En utmaning är att på ett tillförlitligt sätt ta ut döda anslutningar, återupprätta sessioner och släppa lås som innehas av den gamla sessionen (eftersom servern kanske inte bestämmer sig för att den är död samtidigt som klienten gör det). En annan är paketförlust som orsakar mycket långsamma operationer, långvariga databastransaktioner och därav följande problem med låstider och transaktionsrensningsuppgifter. Du kommer också att möta alla slags galna och trasiga proxy- och brandväggar under solen - proxyservrar som stöder CONNECT
men sedan visa sig anta att all trafik är HTTPs och mangla den om den inte är det; brandväggar med buggy stateful anslutningsspårning som gör att anslutningar misslyckas eller går till ett halvöppet zombietillstånd; alla NAT-problem du kan föreställa dig; bärare som "hjälpsamt" genererar TCP ACK:er för att minska latensen, strunt i problemen som orsakar med upptäckt av paketförluster och fönsterstorlek; galen portblockering; etc.
Eftersom alla använder HTTP kan du förvänta dig att det fungerar - åtminstone mycket oftare än något annat gör. Detta gäller särskilt nu när vanliga webbplatser använder REST+JSON kommunikationsstil även i mobila webbappar.
Du kan också skriva dina webbtjänstsamtal för att vara idempotenta använda unika förfrågningstokens. Det låter din app skicka ändringsförfrågningar igen utan rädsla för att den ska utföra en åtgärd mot databasen två gånger. Se idempotens och definierar idempotens .
Allvarligt talat, JDBC från en mobil enhet kan se ut som en bra idé nu - men det enda sättet jag ens skulle överväga att det skulle vara om alla mobila enheter var på ett enda högt tillförlitligt WiFi-nätverk under min direkt kontroll. Även då skulle jag undvika det på grund av databasprestandahantering om jag kunde. Du kan använda något som PgBouncer för att slå samman anslutningar mellan många enheter på serversidan så anslutningspooling är inte ett stort problem, men rensning av förlorade och övergivna anslutningar är, liksom tcp Keepalive-trafiken som krävs för att få det att fungera och den länge stannade transaktioner från övergivna anslutningar.