Wie schreibe ich eine REST-API?

82

Ich schreibe eine iPhone-App als Hobbyprojekt und sie benötigt einen Webdienst, um sie mit Daten zu versorgen. Es unterscheidet sich nicht sehr von dem, was ich bei der Arbeit mache, aber bei der Arbeit schreibe ich nur Ansichten und Controller. Jemand anderes ist für das Schreiben des Modells verantwortlich, und normalerweise stellen die Kunden den Webdienst bereit.

Ich habe schon früher einige Web-Programmierungen durchgeführt, als alle MySQL und PHP verwendeten, daher sind meine Fähigkeiten etwas veraltet, aber ich bin zuversichtlich, dass ich die Techniken, die ich bereits kenne, nutzen kann. Ich möchte jedoch meine Zeit nicht mit veralteten Tools verschwenden. Ich habe herausgefunden, dass der Stand der Technik darin besteht, eine REST-API zu schreiben. Ich dachte, dass es einige ziemlich gute Frameworks geben sollte, die Ihnen so ziemlich nur eine REST-API mit CRUD-Funktionalität bieten, sobald Sie ein Modell definiert haben.

Ich denke meine Frage ist: Was wäre der schnellste Weg, um eine REST-API zum Laufen zu bringen? Ich möchte mich wirklich nur auf das Schreiben der iPhone-App konzentrieren und nicht zu viel Zeit mit dieser API verbringen. Es wäre großartig, wenn ich auch Webadministration und Revisionsverlauf erhalten könnte. Ich sollte auch hinzufügen, dass die API nicht öffentlich sein soll, daher wäre die Unterstützung für die Authentifizierung ebenfalls großartig.

Nur um das klar zu stellen. Ich hätte nichts gegen ein PHP-Framework. In der Tat könnte es möglicherweise besser sein, da ich weiß, dass mein aktuelles Hosting es unterstützt.

Erik B.
quelle
1
REST ist wahrscheinlich nicht das, was Sie wirklich wollen: medium.com/@trevorhreed/…
Trevor
2
Sie könnten dieses 66-zeilige PHP-Skript verwenden, das ich geschrieben habe.
Mevdschee
Beantwortet 5 Jahre später 8-)
JustOnUnderMillions

Antworten:

42

BEARBEITEN:

Die Links, die anscheinend 3 Jahre lang gut waren, funktionieren nicht mehr, also habe ich ein paar neue Tutorials gefunden, von denen ich denke, dass sie noch eine Weile bleiben werden. Diese befinden sich auf der Ray Wenderlich-Website, einer sehr angesehenen ios dev-Tutorial-Website. Der erste Artikel verweist tatsächlich auf die defekten Links unten, ist aber in sich selbst vollständig:

So schreiben Sie einen einfachen PHP / MySQL-Webdienst für eine iOS-App

und der zweite hat eine kleine Wendung. Es verwendete parse.com im Backend und AFNetworking. Beide sind sehr gut.

So synchronisieren Sie Kerndaten mit einem Webdienst - Teil 1


Ich habe die defekten Links unten behoben, indem ich die Artikel auf dem Rückweg gefunden habe. Die Leute scheinen die Links zu mögen, also werde ich sie behalten. Die obigen Links sollten mehr Denkanstöße geben.


Ich mache genau das gleiche mit meiner iPhone App. Ich habe diesen Artikel zum Erstellen einer RESTful-API in PHP gefunden:

https://web.archive.org/web/20130910164802/http://www.gen-x-design.com/archives/create-a-rest-api-with-php/

und hier gibt es auch einen Folgeartikel:

https://web.archive.org/web/20130323001500/http://www.gen-x-design.com/archives/making-restful-requests-in-php/

mit einem Link zum Quellcode am Ende des Artikels.

Nickfox
quelle
2
Diese Links scheinen jetzt eine Zeitüberschreitung zu haben. Wenn das für jemand anderen passiert, bin ich mir nicht sicher. : /
Augie Gardner
8

Ich habe eine REST-API in ZEND Framework mit dem Zend_Rest_Controller programmiert, auf dem iPhone habe ich ASIHTTPRequest verwendet . Meine Erfahrung mit beiden war gut. Am Anfang hatte ich einige Probleme, ZEND einzurichten und mit mySQL zu verbinden, aber als ich herausgefunden hatte, wie es geht, konnte ich die API sehr schnell schreiben. Ich kann weitere Informationen mit Ihnen teilen, wenn Sie weitere Fragen haben.

EDIT: Es scheint keine offizielle Dokumentation zu geben Zend_Rest_Controller. Dieser Link beschreibt, wie Sie damit Ihre API erstellen. Sie müssen lediglich das Rendern in init()Ihrer Unterklasse deaktivieren und die Methoden für jeden REST-Aufruf implementieren.

Philipp Flenker
quelle
Ich sehe keinen ZEND_Rest_Controller auf der Zend-Site. Ich sehe ZEND_Rest_Server. Ist das derjenige, von dem du sprichst?
Dmitri
2
Schauen Sie sich hier einen guten Einstieg in die Verwendung von zend_rest_controller an: techchorus.net/create-restful-applications-using-zend-framework. Das Erstellen einer Rest-API ist mit dieser Klasse mühelos
Philipp Flenker
Dies scheint mehr oder weniger genau das zu sein, was ich brauche. Ich werde es ausprobieren und wenn ich erfolgreich bin, werde ich dies als meine Antwort akzeptieren. Vielen Dank.
Erik B
4
Ich denke, er war nicht erfolgreich ...: D
user151841
8

Nur um Sie wissen zu lassen:

Am Ende habe ich Ruby on Rails verwendet.

BEARBEITEN: Da diese Antwort abgelehnt wurde, weil sie nicht den Grund für die Wahl von Ruby on Rails und auch keine Anweisungen zum Schreiben einer REST-API enthält, dachte ich, ich würde Ihnen meine Motivation und einige einfache Anweisungen geben.

Ich begann ein Buch über Ruby on Rails zu lesen und stellte fest, dass ich nur Gerüste verwenden musste, und bekam eine kostenlose JSON REST-API.

Hier ist eine gute Anleitung, um Ihnen den Einstieg zu erleichtern: http://guides.rubyonrails.org/getting_started.html

Wenn Sie Ihre Ruby on Rails-Umgebung eingerichtet haben, ist das Erstellen Ihrer REST-API nicht schwieriger als das Ausführen:

$ rails generate scaffold Post name:string title:string content:text

(Beispiel aus dem obigen Link.) Ich fand auch, dass Rails sehr einfach und kostenlos für Heroku bereitzustellen ist , was bedeutete, dass ich nicht für das Hosting für meine sehr einfache REST-API mit geringem Datenverkehr bezahlen musste. Es gibt viele andere Gründe, warum ich sehr glücklich bin, mit Ruby on Rails zu arbeiten, aber das geht über den Kontext dieser Frage hinaus.

Erik B.
quelle
10
Geben Sie sich eine Antwort und geben Sie ihm ein Häkchen schlechte Form Mann sehr schlechte Form.
thenetimp
29
@thenetimp Es ist nichts Schlechtes, deine eigene Frage zu beantworten. Tatsächlich ist es ermutigt, solange es eine richtige Antwort ist und von niemand anderem gegeben wurde. Sie erhalten keine Wiederholung, wenn Sie Ihre eigene Antwort akzeptieren, also sehe ich wirklich nicht, was Sie möglicherweise dagegen haben könnten.
Erik B
3
Es wäre besser, wenn Sie Ihre
Gründe
4
@Nate Ich würde Ruby on Rails jedem empfehlen, der eine REST-API schreiben möchte, damit ich meine Antwort nicht lösche. Ich habe jedoch Ihr Feedback gelesen und meine Antwort aktualisiert. Ich hoffe es gefällt dir.
Erik B
2
@ DennisKrøger wenn die Frage lautet "Wie schreibe ich eine REST-API?" dann "Ich habe RoR verwendet. Hier ist eine Anleitung, um mit dem Gerüst zu beginnen" ist eine absolut richtige Antwort.
Mattygabe
8

Ich folgte einem recht einfachen Tutorial zum Erstellen von RESTful-APIs mit PHP:

Corey Maynard - Erstellen einer RESTful-API mit PHP

Das Hauptkonzept umfasst:

  • eine abstrakte Klasse, die das Parsen des URI und das Zurückgeben der Antwort übernimmt, und
  • Eine konkrete Klasse, die nur aus den Endpunkten für die API besteht.
jim_kastrin
quelle
1

Überprüfen Sie die folgende PHP-Klasse, die auf MVC folgt. http://www.phpclasses.org/package/5080-PHP-Implement-REST-Web-services-servers.html

Hoffe das hilft.

shauvik
quelle
7
Ich rate dringend davon ab, irgendetwas von phpclasses.org zu verwenden. Viele Klassen auf dieser Site sind ungetestet, unsicher und werden von Skriptkindern geschrieben. Schauen Sie an einem seriöseren Ort wie PEAR oder Zend
Dmitri
13
Über 3000 PHP-Entwickler haben Pakete an die PHPClasses-Site gesendet. Einige sind viel fähiger als andere. Viele tragen sogar zu PEAR und Zend bei. Es ist ein reines Vorurteil, den Leuten zu sagen, dass sie ein auf dieser Site verteiltes Paket nicht verwenden sollen, nur weil Sie einige Pakete gefunden haben, von denen Sie sagen, dass sie ungetestet und unsicher sind. Das von @src empfohlene Paket ist zufällig ein am besten bewertetes Paket. Es wäre klüger gewesen, wenn Sie sich den Paketcode oder zumindest die Benutzerbewertungen angesehen hätten, bevor Sie sich entschieden hätten, gegen alles zu verallgemeinern, nur weil es auf der Site verteilt ist.
mlemos
0

Wenn Sie PHP bereits kennen, ist an einem PHP / MySQL-Backend nichts auszusetzen. Sie können alle Antworten im iPhone-kompatiblen plist xml-Format senden und die Antwort sofort in eine NSDictionary / NSArray / NSNumber-Datenstruktur mit diesem kurzen Codeausschnitt umwandeln:

NSString *response = [request responseString];
NSData* plistData = [response dataUsingEncoding:NSUTF8StringEncoding];
NSPropertyListFormat format;
NSString *errorStr;
NSDictionary* plist = [NSPropertyListSerialization propertyListFromData:plistData 
                                                       mutabilityOption:NSPropertyListImmutable 
                                                                 format:&format 
                                                       errorDescription:&errorStr];

Ich verwende das ASIHTTP-Paket auch zum Bilden von URLs, zum Senden asynchroner Anforderungen und zum Empfangen von Antworten. Ich kann es nur empfehlen:

http://allseeing-i.com/ASIHTTPRequest/

Bogatyr
quelle
0

Sie sollten für den Webdienst alle Sprachen verwenden, mit denen Sie vertraut sind. Jede Sprache, die REST-Antworten auf Anforderungen formulieren kann, ist in Ordnung.

Wenn Sie jedoch schnell etwas zum Laufen bringen möchten, empfehle ich die Verwendung von Python in Google App Engine. Es ist kostenlos und Sie können Java anstelle von Python verwenden, wenn Sie dies wünschen. App Engine unterstützt die Authentifizierung mithilfe von OpenID und / oder Google-Konten (nicht sicher, ob sie sich gegenseitig ausschließen), damit die Codierung einfacher wird.

Für die Anforderung auf dem iOS-Gerät empfehle ich die Verwendung von ASIHTTPRequest .

Moshe
quelle
0

Eine weitere Option ist restSQL, ein ultraleichtes Persistenz-Framework. Siehe http://restsql.org . Es unterstützt MySQL und PostgreSQL und läuft in einem Standard-Java EE-Container, z. B. Apache Tomcat.

restSQL ist eine sehr unkonventionelle Datenzugriffsschicht. restSQL ist keine objektorientierte Ansicht der Datenbank. Es zeigt flache oder hierarchische "Ansichten" relationaler Datenbanktabellen. Diese Ansichten können über eine einfache REST-basierte HTTP- oder Java-API abgefragt und aktualisiert werden. Die HTTP-Schnittstelle basiert auf REST-Prinzipien, die die integrierten Funktionen von HTTP verwenden, anstatt von diesen zu abstrahieren.

Sie möchten eine 'REST-API mit CRUD-Funktionalität' und genau das ist der Sweet Spot von restSQL. Sie könnten dies ohne Code tun. Definieren Sie einfach Ihre SQL-Ressourcen über XML-Dateien und starten Sie HTTP-Aufrufe mit voller CRUD-Fähigkeit.

Mark Sawers
quelle