Datenabfrage einer MySQL Datenbank durch xCode Swift?
Hallo,
ich möchte gerne eine IOS App entwickeln, wo sich Symbole ändern, sobald in einer entfernten MySQL Datenbank ein bestimmter Wert geändert wird.
Ich kenne mich gut mit verschiedensten Programmiersprachen aus, aber bei Swift mit der Kombination MySQL komme ich leider nicht weiter.
Vielleicht kann mir jemand mit einem Beispiel Code helfen.
Danke!
1 Antwort
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:
- Connecting iOS-App to MySQL-Database with Swift 5
- How To Write A Simple PHP/MySQL Web Service for an iOS App
- Swift PHP MySQL Tutorial – Connecting iOS App to MySQL Database
- iPhone-App: Connect to MySQL database
- usw. ...
Mit dem Begriff RESTful API kannst du dich in der Angelegenheit auch einmal beschäftigen.