REST-konforme API-Laufzeit-Erkennung / HATEOAS-Client-Design

Für ein SaaS-startup in denen ich involviert bin, Baue ich beide ein RESTful-web-API und ein paar client-apps auf verschiedenen Plattformen, die es verzehren. Ich glaube, ich habe die API herausgefunden, aber jetzt hab ich den Dreh für die Kunden. Wie ich gelesen habe über REST, ich sehe, dass ein wesentlicher Teil der REST ist Entdeckungaber es scheint eine Menge Diskussion zwischen zwei verschiedenen Interpretationen von, was die Entdeckung wirklich bedeutet:

  1. Entwickler Entdeckung: Die Entwickler-Festplatte-codes reichliche Mengen von API-Informationen in den client, wie z.B. resource-URI ' s, query-Parameter, unterstützten HTTP-Methoden, und andere details, die Sie entdeckt haben, durch durchsuchen des docs und des Experimentierens mit den API-Antworten. Diese Art der Entdeckung IMHO bedingt cool Verknüpfung und die API-Versionierung Frage, und führt zu harten Kopplung der client-code auf die API. Nicht viel besser ist als bei der Verwendung eine gut dokumentierte Sammlung von RPC ' s, so scheint es.

  2. Laufzeit Entdeckung - Die client-app selbst ist in der Lage, um herauszufinden, alles, was er braucht, mit wenig oder gar keine out-of-band-Informationen (vermutlich nur die Kenntnis der Medien-Typen die API behandelt.) Links können heiß sein. Aber um die API sehr effiziente, eine Menge von link-Template für query-Parameter gebraucht zu sein scheint, die macht out-of-band-info zurück kriechen. Es gibt möglicherweise andere Schwierigkeiten, die ich noch nicht gedacht haben, da habe ich nicht bekommen, zu diesem Punkt in der Entwicklung. Aber ich mag die Idee der losen Kopplung.

Laufzeit Entdeckung zu sein scheint, den Heiligen Gral der REST, aber ich sehe herzlich wenig Diskussion darüber, wie die Implementierung einer solchen client. Fast alle ÜBRIGEN Quellen, die ich gefunden habe scheinen anzunehmen Entwickler Entdeckung. Wer kennt einige Runtime discovery-Ressourcen? Best practices? Beispiele oder Bibliotheken mit echtem code? Ich arbeite in PHP (Zend-Framework) für einen client. Objective-C (iOS) für die anderen.

Ist Laufzeit Entdeckung ein realistisches Ziel, angesichts der gegenwärtigen Satz der Werkzeuge und Kenntnisse der Entwickler-community? Ich kann schreiben, meine Kunden zu behandeln, alle URI ' s in eine undurchsichtige Art und Weise, aber, wie dies zu tun, effizient, ist eine Frage, die vor allem über verbindungen mit niedriger Bandbreite. Trotzdem, URI ' s sind nur ein Teil der Gleichung. Was ist mit link-Template in den Laufzeit-Kontext? Wie über die Kommunikation, welche Methoden unterstützt werden, abgesehen davon macht eine Menge von OPTIONEN Anfragen?

InformationsquelleAutor der Frage curtisdf | 2012-02-09

Schreibe einen Kommentar