Datenabfrage einer MySQL Datenbank durch xCode Swift?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Deine iOS-App sollte keine direkte Verbindung zur Datenbank aufbauen, denn dann bestände die Notwendigkeit, dass der Client auch irgendwie die Verbindungsdaten erhalten muss, was nicht sonderlich sicher ist.

Erstelle dir stattdessen eine Web-API, zu der deine iOS-App dann Anfragen schickt. Du könntest dir bspw. einen Webspace holen, der dir Zugriff auf eine, über dem Hoster laufende MySQL-Datenbank ermöglicht, sowie Platz für eine eigene Webanwendung bietet. Viele Webhoster stellen einen Apache Webserver zur Verfügung, weshalb eine in PHP geschriebene Webanwendung eine naheliegende Lösung wäre. Aber es gibt auch noch andere Alternativen (Java, Python, JavaScript, etc.).

Eine Web-API läuft im Grunde folgendermaßen: Ein Client verschickt HTTP Requests an die Webanwendung. Diese liest die geschickten Daten aus, validiert sie und berechnet dann ein Ergebnis. Dafür baut sie unter Umständen selbst eine Verbindung zur Datenbank auf. Das Ergebnis wird dann in einem gut umgänglichen Format (z.B. in JSON oder XML) zurückgeschickt.

Ein sehr einfaches Beispiel zur Veranschaulichung:

Request URL:

https://web-api-domain.com/getpersons.php?name=Olaf

PHP-Skript (getpersons.php):

<?php
  header("Content-Type: application/json");
  
  if (empty($_GET["name"])) {
    print json_encode(array("persons" => array()));
  }

  $name = $_GET["name"];
  
  // filter $name ...
  // connect to database and read persons with name = Olaf ...
  print json_encode(array("persons" => $result));    

Hier wird kurz gesagt der Querystring der URL ausgelesen (bzw. der Parameter name) und auf seinen Inhalt geprüft. Wenn er bspw. nicht vorhanden ist oder einen leeren Wert hat, kann man sich gleich alles Weitere sparen und ein JSON-String zurückgeben, der andeutet, dass kein Ergebnis gefunden werden konnte:

{"persons":[]}

Andernfalls wird die Datenbank befragt (da der Code hierfür zu lang ist, habe ich ihn nur mit Kommentaren angedeutet) und am Ende ein Ergebnisstring (wieder in JSON) zusammengebaut.

Vorteilhaft an der Web API ist also, dass die Verbindungsdaten bei der Serveranwendung bleiben und zudem lässt sich der Datenbankzugriff besser steuern. Für eine bessere Optimierung der API kannst du Anfragen (für einen gewissen Zeitraum) cachen. Wenn eine neue Anfrage kommt, speicherst du dir Request und Ergebnis ab. Bei folgenden Anfragen kannst du schauen: Wurde das Ergebnis schon einmal ermittelt? Je nachdem, wird entweder das Ergebnis aus dem Zwischenspeicher zurückgegeben oder die Datenbank bemüht.

Ausführlichere Beispiele für Web-APIs in Kombination mit Swift findest du in den etlichen Tutorials, die es zu dem Thema gibt:

Mit dem Begriff RESTful API kannst du dich in der Angelegenheit auch einmal beschäftigen.