2012-04-06 5 views
21

Ich begann mit dem Erstellen einer API für eine neue Website, an der ich arbeite.Thrift als öffentlicher API-Ersatz für REST?

Ursprünglich wollte ich es eine normale REST API machen, aber ich denke darüber nach, wie cool Sparsamkeit wäre mit der Fähigkeit, mehrere Client-Bibliotheken in einem Batch zu kompilieren.

Ist Thrift eine praktikable Option für eine öffentliche API, Sockets und alle, oder sollte ich mit REST bleiben?

Und wenn REST, was wäre der beste Ansatz für die Erstellung mehrerer Client-Bibliotheken oder würde ich nur gehen und schmutzig und tatsächlich schreiben sie?

Sonst, wenn Thrift, würde ich die Bibliotheken kompilieren und nur Download-Links anbieten oder einfach den Entwicklern die .Thrift-Datei geben, um ihre eigene Bibliothek zu erzeugen?

Hinweis: Es ist immer noch eine kleine Site, also würde ich die Thrift Specification-Datei nur für die API erstellen.

+0

Es kommt darauf an: * Wer * verbindet und * wie *? (Ich persönlich habe festgestellt, dass ProtocolBuffers netter und besser gestaltet sind, auch wenn es keinen "normalen" * RPC * -Server gibt. Für anspruchsvollere RPC gibt es Dinge wie ICE, aber wieder * wer * verbindet und * wie * ?) –

+0

Also in Google Buffers wäre ich noch in der Lage, die Objekttypen zu definieren, zu serialisieren und über HTTP zu senden. Ähnlich wie ein Ersatz für JSON, aber mit einem definierten Typ, den ein Client erwartet? Hast du Erfahrung damit in PHP? –

+2

Protocol Buffers ist ein binäres Serialisierungsprotokoll, ähnlich wie Thrift. (Thrift ist nur ein "All-in-One" -Paket, da es auch die Service-Endpunkt-Implementierungen enthält.) Es gibt Unterstützung für RPC-Endpunkte in ProtocolBuffers, da [RPC-Unterstützung in] entworfen wurde (https://developers.google.com/protocol-buffers/docs/proto#services), aber es gibt keinen "Standard" -Server Implementierung. Es gibt jedoch Projekte, die die entsprechenden RPC-Endpunkte bereitstellen. –

Antwort

12

Zuerst REST und Thrift sind Äpfel zu Orangen - ehemalige ist ein allgemeiner Stil, letztere spezifische binäre RPC-System.

Aber für öffentliche Schnittstellen denke ich, dass REST mit Standard-Textformaten (JSON oder XML, in der Regel) mehr Sinn macht; weil es einfacher ist, von jeder Sprache oder Plattform aus darauf zuzugreifen; und obwohl es Thrift-Kunden auf vielen Plattformen gibt, ist es immer noch mehr Arbeit. Es erzwingt auch spezifische Zugriffsart auf Clients, so ziemlich die spezifische Thrift-Client-Bibliothek zu verwenden.

Also Frage wäre eher was genau willst du gewinnen? Was genau hältst du dort für "cool"? Wenn Sie nur mit neuer Technologie spielen wollen, ist nichts falsch daran, aber Sie sollten zuerst damit spielen und dann sehen, ob es Sinn macht.

+0

Nur verschiedene Arten von Dingen zu betrachten. Ich habe die Rest-API und die Java-Bibliothek erstellt und mich gefragt, ob das nicht für mich erledigt werden kann. Aber ich stimme zu, dass REST für jeden der Clients, die auf die API zugreifen, am brauchbarsten ist. Aber diese ganze Arbeit pro Bibliothek scheint Ärger zu sein. Was passiert, wenn ich einen anderen Parameter zu einem Objekt in der Ausgabe der API hinzufüge, dann muss ich alle Client-Bibliotheken für den Wert aktualisieren, und Fehler werden zwangsläufig passieren. Irgendein Rat ? –

+2

Dasselbe gilt für Trhift, n'est pas? Sie müssen das Schema ändern, jeder muss dies zu neuen Klassen neu kompilieren ... Mit Java, REST, verwende ich POJOs, die geteilt werden können. Datenbindungs-Pakete (Jackson für JSON, JAXB für XML) können mit der Serialisierung/Deserialisierung gut umgehen. Und dann grundlegenden HTTP-Client (Apache oder async-http-Client); oder noch besser, Jersey-Client, kann den Zugang einfach machen. – StaxMan

+0

Macht Sinn dank. Es endete damit, eine normale Pause-API zu schreiben und benutzerdefinierte Bibliotheken zu erstellen. –

10

Wenn Ihre API einfach genug ist, dass Sie sie mit REST und mit akzeptabler Leistung ausdrücken können, dann wäre es wahrscheinlich besser, REST zu halten, da normalerweise eine niedrigere Barriere zum Schreiben von Client-Code für REST-basierte API besteht.

Wenn auf der anderen Seite REST Komplexität oder Leistungsprobleme hat, gehen Sie mit Sparsamkeit oder etwas anderes passender.

0

Sie befinden sich im selben Boot, wenn Sie selbst verschiedene Bibliotheken entwickeln. Ich denke, REST wäre für Menschen einfacher zu verwenden, auch ohne die Bibliothek (oder wenn sie ihre eigenen implementieren). Auf der anderen Seite, wenn Sie über Thrift ist, dass es binär ist, kann Json in ähnlicher Weise verwendet werden, überprüfen Sie hier für weitere Informationen http://bsonspec.org/

0

Einer der großen Vorteil von REST ist, dass Sie nicht müssen Erstellen Sie die Clientbibliotheken. Sie können Entwickler nur auf Ihre Liste von Endpunkten verweisen, und sie sollten in der Lage sein, es von dort herauszufinden. Einige große, schlecht entworfene REST-Dienste bieten Client-Bibliotheken, um ihre Hässlichkeit zu maskieren, aber wenn die API einfach und gut gestaltet ist, sollte sie nicht notwendig sein.