sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan kan jeg sikkert (indirekte) forespørge i en postgresql-database i Android?

Hurtig version:

Brug et webservice-mellemlag, der kører på en offentlig vært, du kontrollerer (muligvis, men ikke nødvendigvis databaseværten). Udvis offentlige webservicemetoder for at udføre det begrænsede arbejde, du vil tillade, og intet andet.

Relaterede spørgsmål:

Implementeringsmuligheder

Personligt ville jeg bruge en Java-applikationsserver som Apache Tomcat eller JBoss AS 7 og jeg ville skrive mine webservicemetoder ved hjælp af JAX-RS at producere en fin REST-stil API, som min app kan bruge. Det er, hvad jeg er bekendt med, og det fungerer godt, men du har masser af muligheder, herunder implementeringer af:

  • REST-lignende API'er (Javas JAX-RS impliserer Jersey og RESTEasy, forskellige andre langs-værktøjer), der bruger HTTP-anmodninger og producerer JSON- eller XML-svar.

  • SOAP med WSDL, det klassiske "webservice"-lag. I Java udført med JAX-WS blandt andre muligheder. De fleste sprog har værktøjer til SOAP+WSDL, men det er noget lorte at arbejde med, især på periodisk tilsluttede enheder som mobiler.

  • XML-RPC hvis du kan lide smerte

Der er nogle JAX-RS quickstartsJBoss AS 7 quickstarts liste; bare søg efter "JAX-RS". " /a> " quickstart er nyttigt, selvom det måske ikke er ideelt, hvis du ikke er bekendt med det grundlæggende i JBoss AS 7 og Jave EE 6. Ud fra JAX-RS-specifikationerne er du bedre stillet med en Jersey eller RESTEasy tutorial som dette eller dette .

Vigtige overvejelser

Brug HTTP'er, hvis det er muligt, og hvis adgangen ikke skal være offentlig, brug en passende HTTP-godkendelsesordning som HTTP Basic-godkendelse over HTTP'er. Enhver anstændig implementering af webtjenester vil tilbyde godkendelsesmuligheder eller understøtte dem på den platform, den kører på. Undgå fristelsen til at implementere din egen autentificering og brugeradministration på webservicelaget, du vil skrue det op; brug godkendelsen på HTTP-laget, der allerede er skrevet og testet. Dette kan kræve brug af noget som Apaches mod_auth_pgsql , JBoss AS 7's JDBC-sikkerhedsområder osv. Det eneste tilfælde, jeg ville overveje ikke at udføre korrekt HTTP-godkendelse pr. bruger, er, hvor jeg ikke behøver at adskille mine brugere af sikkerhedsmæssige årsager, jeg bekymrer mig kun om, at det er min app, der får adgang til serveren , altså hvis mine sikkerhedskrav er ret svage. I dette tilfælde ville jeg bruge et fast brugernavn/adgangskode til hele appen og muligvis et X.509-klientcertifikat, hvis Android understøtter dem.

Husk, at uanset hvordan du sikrer tingene, er alle legitimationsoplysninger enten kendt af brugeren eller kan udtrækkes trivielt fra en .apk, så du stadig må antage, at alle kunne få adgang til dine webservicemetoder, ikke kun din app. Skriv dem i overensstemmelse hermed.

Gør ikke bare send SQL fra din app over et webservicekald til serveren og returner resultaterne som JSON. Dette er forfærdeligt usikkert, såvel som grimt og klodset. Skriv en webservicemetode for hver enkelt opgave, du ønsker, at appen skal kunne udføre og beholde SQL'en i serveren. Husk at bruge parametriserede forespørgsler og vær forsigtig med andre SQL-injektionsrisici. Disse webservicemetoder kan bruge en eller flere forespørgsler til at producere et enkelt svar - for eksempel kan du indsamle en "Kunde"-post og alle tilknyttede "Adresse"- og "Kontakt"-poster og derefter returnere resultatet i et pænt JSON-objekt Android-enheden kan forbruge, hvilket sparer adskillige langsomme og upålidelige netværksrejser.

Uanset hvad du bruger, skal du sørge for at foretage dine webservicekald i en arbejdstråd i baggrunden og ikke at blokere brugergrænsefladen. Vær forberedt på timeouts og fejl og på behovet for genforsøg. Test din app ved at simulere intermitterende forbindelsestab, høj latenstid og høje rater af pakketab, og sørg for, at den forbliver brugbar.



  1. Vælg / Indsæt version af en Upsert:er der et designmønster for høj samtidighed?

  2. Trin for trin opgraderingsproces til R12.2 Upgrade part -3

  3. Oprettelse af ny database i DataGrip JetBrains

  4. Sådan eksporteres forespørgselsresultat til Excel i Oracle SQL Developer?