Für ein SaaS-Startup, an dem ich beteiligt bin, erstelle ich sowohl eine RESTful-Web-API als auch einige Client-Apps auf verschiedenen Plattformen, die diese verwenden. Ich glaube, ich habe die API herausgefunden, aber jetzt wende ich mich an die Kunden. Während ich über REST gelesen habe, sehe ich, dass ein wesentlicher Teil von REST die Entdeckung ist , aber es scheint eine große Debatte zwischen zwei verschiedenen Interpretationen dessen zu geben, was Entdeckung wirklich bedeutet:
Entwicklererkennung : Der Entwickler codiert zahlreiche API-Details fest in den Client, z. B. Ressourcen-URIs, Abfrageparameter, unterstützte HTTP-Methoden und andere Details, die er durch Durchsuchen der Dokumente und Experimentieren mit den Antworten der API ermittelt hat. Diese Art der Erkennung erfordert meiner Meinung nach eine coole Verknüpfung und die Frage nach der API-Versionierung und führt zu einer harten Kopplung des Client-Codes an die API. Nicht viel besser, als wenn man eine gut dokumentierte Sammlung von RPCs verwendet.
Laufzeiterkennung - Die Client-App selbst kann mit wenigen oder keinen Out-of-Band-Informationen alles herausfinden, was sie benötigt (vermutlich nur Kenntnisse über die Medientypen, mit denen sich die API befasst). Links können heiß sein. Um die API jedoch sehr effizient zu gestalten, scheint eine Menge Link-Template für Abfrageparameter erforderlich zu sein, wodurch sich Out-of-Band-Informationen wieder einschleichen. Es gibt möglicherweise andere Schwierigkeiten, an die ich noch nicht gedacht habe, da ich es nicht getan habe zu diesem Punkt in der Entwicklung gekommen. Aber ich mag die Idee der losen Kopplung.
Die Entdeckung der Laufzeit scheint der heilige Gral von REST zu sein, aber ich sehe kaum eine Diskussion darüber, wie ein solcher Client implementiert werden kann. Fast alle REST-Quellen, die ich gefunden habe, scheinen von einer Entwicklerentdeckung auszugehen. Kennt jemand einige Runtime Discovery-Ressourcen? Empfohlene Vorgehensweise? Beispiele oder Bibliotheken mit echtem Code? Ich arbeite in PHP (Zend Framework) für einen Client. Objective-C (iOS) für den anderen.
Ist die Runtime-Entdeckung angesichts der derzeitigen Tools und Kenntnisse in der Entwicklergemeinde ein realistisches Ziel? Ich kann meinem Client schreiben, dass er alle URIs undurchsichtig behandelt, aber wie dies am effizientesten funktioniert, ist eine Frage, insbesondere bei Verbindungen mit geringer Bandbreite. Wie auch immer, URIs sind nur ein Teil der Gleichung. Was ist mit Link-Templating im Runtime-Kontext? Wie wäre es mit der Kommunikation, welche Methoden unterstützt werden, abgesehen von vielen OPTIONS-Anfragen?