Hallihallöchen,
ich habe zur Zeit wieder einmal die Ehre ein PHP Web-API zu erstellen, bei der iOS/OS X die Clientsoftware darstellen.
Da ich eine 'vorzeigbare' und 'professionelle' API bauen will und nicht so wirklich weiß wie, frage ich Euch. Ich hatte da schon mal einen ähnlichen Beitrag hier erstellt zu.
Und es lässt mich nunmal nicht locker, ich weiß auch nicht an wen ich mich wenden soll außer an Euch.
Das API soll halt nur eine Schnittstelle für die Datenbank auf dem Server darstellen, bei dem iOS/OS X darauf zugreifen und die Daten aus den Tables ordentlich anzeigen.
Da ich diesmal das Ganze ordentlich angehen will, mache ich mir ziemlich Gedanken, die ich hier niederschreiben möchte. Vielleicht kann man das Thema ja noch mal ein wenig diskutieren und dadurch das beste aus der Sache rausholen.
Grob sollen natürlich diese Sachen beachtet werden:
- JSON
- Detaillierte Status-Rückmeldungen
- PHP, PDO
- Authentifizierung (wie am besten? API-Tokens waren bisher immer mein Mittel der Wahl. OAuth bietet sich für den Anwendungsfall nicht an) (API-Tokens mit Hierarchie sind stark erwünscht) (Gibt es da ein Framework, was einem das Leben erleichtert?)
- Unterscheidung der Geräte, die das API ansprechen
- ordentlich dokumentierbar
Aber wenn ich mir schon Gedanken mache, was das API alles machen können soll, komme ich schon zu der folgenden Frage:
Mehr Code in der Clientsoftware oder mehr Code in die Serversoftware? Was ich damit meine: Soll das API schon quasi ein fertiges SQL-Statement vom Client bekommen oder übergibt der Client nur Parameter an das API und dort wird erst ein SQL Statement erzeugt?
Dann stellt sich wiederum die Frage:
Allgemeine Parameter (also einfach ein Array mit Parametern) oder für jede API-Funktion sprechende Parameter?
Des Weiteren wäre es ja auch mal wichtig zu wissen, wie Cocoa am besten mit solchen Daten arbeiten kann. Ich habe bisher immer JSON->NSDictionary genommen, in meine Objekte umgewandelt, dargestellt.
Gibt es bessere Alternativen? Oder sollte man ein REST-Framework unter Cocoa nutzen?
Was mir weiterhin zu schaffen macht, ist die Möglichkeit das API zu updaten. Also neue Klassen hinterlegen, ein Installscript ausführen und so weiter… Wie macht man sowas? Also entferntes Updaten der API-Version möglichst einfach und trotzdem sicher? Also ums kurz klarer zu machen: Das API soll nicht nur einmal auf der Welt irgendwo existieren, sondern ist Bestandteil eines Produkts, das eben Teil der Apps ist. Man sollte also per App das API updaten können (die Dateien würden dann in der Client-App via Update hinterlegt, beim nächsten Starten mit dem neuen Update würden diese Dateien dann auf dem Server installiert). Ich hab sowas schon mal gemacht, weiß nur gerade nicht mehr wirklich, wie und ob's sicher war. Mir kommt es aber sicherer vor, das über die Client-Apps zu machen, als dass das API eine Anfrage von einem Server bekommt und das automatisch von dort holt.
Wie ihr ja seht… Ziemlich viele Fragen. Vielleicht könnt ihr mal Statements abgeben, wie ich's angehen sollte.
ich habe zur Zeit wieder einmal die Ehre ein PHP Web-API zu erstellen, bei der iOS/OS X die Clientsoftware darstellen.
Da ich eine 'vorzeigbare' und 'professionelle' API bauen will und nicht so wirklich weiß wie, frage ich Euch. Ich hatte da schon mal einen ähnlichen Beitrag hier erstellt zu.
Und es lässt mich nunmal nicht locker, ich weiß auch nicht an wen ich mich wenden soll außer an Euch.
Das API soll halt nur eine Schnittstelle für die Datenbank auf dem Server darstellen, bei dem iOS/OS X darauf zugreifen und die Daten aus den Tables ordentlich anzeigen.
Da ich diesmal das Ganze ordentlich angehen will, mache ich mir ziemlich Gedanken, die ich hier niederschreiben möchte. Vielleicht kann man das Thema ja noch mal ein wenig diskutieren und dadurch das beste aus der Sache rausholen.
Grob sollen natürlich diese Sachen beachtet werden:
- JSON
- Detaillierte Status-Rückmeldungen
- PHP, PDO
- Authentifizierung (wie am besten? API-Tokens waren bisher immer mein Mittel der Wahl. OAuth bietet sich für den Anwendungsfall nicht an) (API-Tokens mit Hierarchie sind stark erwünscht) (Gibt es da ein Framework, was einem das Leben erleichtert?)
- Unterscheidung der Geräte, die das API ansprechen
- ordentlich dokumentierbar
Aber wenn ich mir schon Gedanken mache, was das API alles machen können soll, komme ich schon zu der folgenden Frage:
Mehr Code in der Clientsoftware oder mehr Code in die Serversoftware? Was ich damit meine: Soll das API schon quasi ein fertiges SQL-Statement vom Client bekommen oder übergibt der Client nur Parameter an das API und dort wird erst ein SQL Statement erzeugt?
Dann stellt sich wiederum die Frage:
Allgemeine Parameter (also einfach ein Array mit Parametern) oder für jede API-Funktion sprechende Parameter?
Des Weiteren wäre es ja auch mal wichtig zu wissen, wie Cocoa am besten mit solchen Daten arbeiten kann. Ich habe bisher immer JSON->NSDictionary genommen, in meine Objekte umgewandelt, dargestellt.
Gibt es bessere Alternativen? Oder sollte man ein REST-Framework unter Cocoa nutzen?
Was mir weiterhin zu schaffen macht, ist die Möglichkeit das API zu updaten. Also neue Klassen hinterlegen, ein Installscript ausführen und so weiter… Wie macht man sowas? Also entferntes Updaten der API-Version möglichst einfach und trotzdem sicher? Also ums kurz klarer zu machen: Das API soll nicht nur einmal auf der Welt irgendwo existieren, sondern ist Bestandteil eines Produkts, das eben Teil der Apps ist. Man sollte also per App das API updaten können (die Dateien würden dann in der Client-App via Update hinterlegt, beim nächsten Starten mit dem neuen Update würden diese Dateien dann auf dem Server installiert). Ich hab sowas schon mal gemacht, weiß nur gerade nicht mehr wirklich, wie und ob's sicher war. Mir kommt es aber sicherer vor, das über die Client-Apps zu machen, als dass das API eine Anfrage von einem Server bekommt und das automatisch von dort holt.
Wie ihr ja seht… Ziemlich viele Fragen. Vielleicht könnt ihr mal Statements abgeben, wie ich's angehen sollte.