Beste Kommunikationsmethode zwischen Ihrer App und Ihrer Website? PHP, Webdienst usw.

8

Ich erstelle eine Anwendung, die ich gerne mit meiner Website kommunizieren möchte. Die App muss Daten für einen bestimmten App-Benutzer aus der Datenbank der Website abrufen. Ich bin mir nicht sicher, wie ich das am besten machen kann.

Ich habe gesehen, dass eine Möglichkeit, dies zu tun, darin besteht, eine Anmeldeseite in der App zu erstellen, die dann auf eine login.php-Logik auf meiner Website trifft. Dies ist praktisch, da ich eine Codebasis verwenden kann, um die Anmeldung sowohl für die Website als auch für die App zu verwalten.

Eine andere Lösung, die ich gesehen habe, ist die Verwendung von JSON-Anforderungen für die Kommunikation zwischen App und Website. Dies ist praktisch, da JSON-Objekte einfach erstellt und analysiert werden können.

Grundsätzlich würde ich gerne wissen, wie diese Kommunikation am besten / allgemeinsten abläuft, welche Vor- und Nachteile es hat, wenn man übereinander steht, und welche anderen Sicherheitsprobleme zu berücksichtigen sind.

Besteht beispielsweise das Risiko, dass vertrauliche Benutzerdaten offengelegt werden, wenn eine Methode über der anderen verwendet wird? Wenn ja, wie kann dies verhindert werden? Wie und wo kommen hier Verschlüsselung und Benutzervalidierungen ins Spiel?

edc598
quelle
Am häufigsten wird eine API erstellt. Sehen Sie sich die Beispiele für APIs von Google oder einem anderen großen Unternehmen an, um eine Vorstellung davon zu erhalten, wie sie ausgeführt werden.
Arseni Mourzenko
Es gibt keine einzige "beste", "Einheitsmethode". Anstatt uns die Optionen mitzuteilen, die Sie gesehen haben, definieren Sie für uns besser die spezifischen Anforderungen für Ihre App. Ich vermute, wenn Sie sich darauf konzentrieren, fällt es Ihnen viel leichter, Ihre Entscheidung zu treffen.
Großmeister
Auf der einfachsten Ebene benötige ich eine Möglichkeit für die mobile App, Informationen aus meiner Website-Datenbank abzurufen. Der Benutzer verfügt über verschiedene Datenbits, wie z. B. verschiedene Arten von Transaktionen. Ich möchte meinem Benutzer in der App alle Transaktionen anzeigen können, die er im letzten Monat durchgeführt hat. Dafür muss ich eine Abfrage in meiner Datenbank durchführen. Ich neige bereits mehr zu PHP, weil ich eine Codebasis für diese grundlegende Funktionalität beibehalten kann. Aber gibt es dafür eine bessere und sicherere Methode? Gibt es offensichtliche Fallstricke / Gefahren, die ich übersehen habe?
edc598
2
@ edc598: Bitte füge deiner Frage keine Kommentare hinzu. Um eine Frage zu klären, ist es am besten, die Frage so zu aktualisieren , dass sie vollständig und konsistent ist.
S.Lott

Antworten:

6

Ich würde empfehlen, eine REST-API für Ihre Anwendung und Ihre Website zu erstellen.

Das Erstellen eines Webdienstes ist mehr Arbeit, aber ich denke, es ist viel sauberer. Wenn Sie dies auf diese Weise tun, müssen sich weder Ihre Website noch Ihre Anwendung Gedanken darüber machen, wie eine Verbindung zur Datenbank hergestellt und diese abgefragt werden soll, da all diese Details von der API abstrahiert werden. Ein weiterer Vorteil ist die Sicherheit: Wenn Ihre Website jemals gehackt wird, haben sie nicht unbedingt Zugriff auf Ihre Datenbank, da die Website nur API-Aufrufe (und keine Datenbankaufrufe) ausführt. Natürlich gibt es eine Menge zu beachten Sicherheit, aber das ist eine Sache weniger, über die Sie sich Sorgen machen müssen.

Hier ist eine großartige Anleitung zum Erstellen einer REST-API in PHP:

http://www.gen-x-design.com/archives/create-a-rest-api-with-php/

ChezMix
quelle
Diese Antwort hat mir am besten gefallen, da sie einen hilfreichen Link enthielt. Obwohl die Antwort aller viel Einblick in das Thema gegeben hat. Vielen Dank!
edc598
Link ist tot ...
cosyconemotel
1

Abhängig von der Komplexität Ihrer Anforderungen entweder REST / JSON- oder SOAP-Webdienste.

Für einfache Anforderungen ist REST einfacher zu verstehen und zu implementieren, insbesondere wenn Sie JSON gegenüber XML bevorzugen.

Wenn Ihre Anforderungen jedoch Authentifizierung, Nachrichtenüberprüfung, Ermittlung, Nicht-Zurückweisung oder ein komplexes Nachrichtenschema umfassen, sollten Sie sich besser mit der Komplexität von SOAP befassen, da nahezu jedes Problem behandelt wird. Obwohl SOAP komplexer und schwerer zu verstehen ist, behandelt es nahezu jede in einem Messaging-System mögliche Permutation und Variation der Architektur. Außerdem verfügt es über eine sehr ausgereifte und umfassende Reihe von Tools, die Sie durch das Labyrinth der APIs führen. Wenn Sie dieses Niveau nicht benötigen, bleiben Sie bei REST.

James Anderson
quelle
0

Der größte Nachteil einer API besteht darin, dass Sie die Verantwortung dafür übernehmen, JSON-Anforderungen zu stellen, die Antworten zu konvertieren und sie auf der Seite anzuzeigen, für die der Browser verantwortlich ist. Möglicherweise sind nicht alle Browser dazu in der Lage, entweder von sich aus oder weil Benutzer das Java-Skript deaktiviert haben.

Diese Bedenken haben jedoch im Laufe der Zeit abgenommen und betreffen jetzt relativ wenige Kunden. Es kann sich jedoch lohnen, zusätzliche Arbeit zu leisten, um alle Kunden zu unterstützen.

Die Vorteile einer API bestehen darin, dass es viel einfacher ist, die API-Logik von den Details der Anzeige zu trennen und mit anderen Mitteln als einem Browser (z. B. von einer anderen Anwendung) direkt auf die API zuzugreifen. Dadurch wird das Testen der API automatisch vom Testen des Clients getrennt, was gut ist.

Es ist auch etwas sicherer gegen Seiteninjektionsangriffe (wie z. B. Cross-Site-Scripting-Angriffe), da es einfacher ist, JSON richtig zu analysieren und zu entkommen als für ein HTML-Dokument (das Skript-Tags enthalten kann, die Java-Skript enthalten). Dies setzt voraus, dass Sie auf dem Client JSON mit einem JSON-Parser analysieren und nicht nur eine Form von eval () verwenden, die überhaupt nicht sicher ist.

Ein weiterer möglicher Vorteil besteht darin, dass Sie die Ebene "Web Framework" so gut wie eliminieren können. Anstelle von ASP, JSP, Django, Zend oder was auch immer benötigen Sie wirklich nur eine dünne Schicht, um JSON von Ihrem Client auf Ihren Server zu übertragen. Zumindest könnten Sie dieses Teil auf trivial einfache Weise zwischen Frameworks portieren, wenn Sie möchten. Dadurch kann ein großes bewegliches Teil aus Ihrer Anwendung entfernt werden.

Ich denke, Verschlüsselung und Validierung funktionieren in beiden Fällen grundsätzlich genauso. Ich denke, wenn Sie eine API haben, werden Sie sich eher daran erinnern, dem Client nicht zu vertrauen, als wenn Sie eine Webseite haben, da Sie möglicherweise vergessen, dass Angreifer keinen Browser als Client verwenden müssen, sondern Ihnen Header senden können , Parameter abfragen und Daten veröffentlichen, die sie möchten. Dies ist jedoch eher ein psychologisches als ein technisches Problem und trifft möglicherweise nicht auf Sie zu.

psr
quelle
1
Vielen Dank für Ihre Antwort, es ist sehr gut durchdacht. Ich möchte nur meine eigene App unterstützen. Ich dachte, dass es eine gute Idee ist, verschiedene Methoden in PHP zu erstellen, die unterschiedliche Abfragen für Benutzerdaten ausführen. Was denkst du über diese Idee? Wie kann ich die Kommunikation zwischen meinen PHP-Skripten und meiner App sichern? Kann ich https verwenden? Gibt es etwas, das ich übersehen habe? Eine einfachere Methode zum Abfragen dieser Daten?
edc598
Alles, was ich gesagt habe, außer einer Sache, gilt nur für die Unterstützung Ihrer eigenen App. HTTPS ist eine separate Frage, die jedoch zur Sicherung der Kommunikation beiträgt, jedoch nicht das Cross-Site-Scripting oder Angriffe Ihres Clients selbst verhindert. Ich weiß nicht wirklich, was die letzten 2 Fragen hier sind.
PSR