Gibt es eine Möglichkeit, alle Endpunkte einer REST-API zu erkennen?

Lesezeit: 4 Minuten

Benutzer-Avatar
4m1r

Ich frage mich, ob es möglich ist, alle Endpunkte einer bestimmten API programmgesteuert zu erkennen.

Also zum Beispiel, wenn ich diese URL mit einem Browser oder Curl ERHALTE:
https://api.twitter.com/1.1/

Ich könnte so etwas als JSON-Antwort erhalten:

"TwitterAPI":{
    "version" : 1.1,
    "GET" : {
        "search/" : ["users", "trending"],
        "users/" : ["id", "handle"]
    }
}

Natürlich könnte Twitter dieses Format veröffentlichen oder nicht veröffentlichen. Also als Randfrage, gibt es Bibliotheken für Java oder JavaScript, die automatisch die API-Routen abbilden und veröffentlichen, die Sie in Ihren Controllern erstellt haben?

  • Es hängt davon ab, ob der Hersteller so etwas wie einen Suchdienst durchgeführt hat oder nicht. Wenn nicht, dann befürchte ich, dass Sie es nicht können.

    – Aninda Bhattacharyya

    11. März 2015 um 17:54 Uhr

Es gibt keine Möglichkeit, REST-Dienste programmgesteuert zu erkennen, da sie keinen Standardregistrierungsdienst haben.

Abgesehen von einer verrückten Brute-Force-Suche gibt es keine Möglichkeit, die richtigen URLs zu finden (ganz zu schweigen von den richtigen Parametern). Die einzige Möglichkeit besteht also darin, Ihre API zu dokumentieren. Dafür ist die beste Wahl, die ich bisher gesehen habe:

  • Tolle Antwort danke für den Hinweis! Die WADL-Antwort unten ist auch großartig, aber ich denke, diese Vorschläge sind etwas nützlicher.

    – 4m1r

    11. März 2015 um 18:14 Uhr

  • Eigentlich werde ich das für ein paar unbeantwortet lassen und sehen, ob wir nicht ein paar nützlichere Antworten bekommen können.

    – 4m1r

    11. März 2015 um 18:15 Uhr

  • Ist nicht eine der Einschränkungen einer REST-API “Code on Demand”. Wenn Sie Endpunkte nicht dynamisch erkennen können, ist es dann wirklich RESTful?

    – Dustin K

    8. Januar um 17:47 Uhr

  • Sie können die API mit FastAPI erstellen, die automatisch für Sie dokumentiert

    – farhan jatt

    12. Juli um 12:27 Uhr

Benutzer-Avatar
David

Einige RESTful-APIs veröffentlichen eine Web Application Description Language-Ressource (WADL – ausgesprochen wie the walk that ducks do – kurz). JAX-RS oder zumindest Jersy-Webapps tun dies standardmäßig unter der Anwendungsstamm-URL /application.wadl. Es scheint nicht, dass die API von Twitter eine davon ist. Viele REST-Puristen würden argumentieren, dass die API selbstbeschreibend und selbstentdeckbar sein sollte, indem sie einfach mit ihr interagieren und sehen, welche anderen Endpunkte sie Ihnen geben wird.

Mehr über WADL von Wikipedia…

Sie sollten in der Lage sein, alles zu entdecken, was Sie über eine REST-API wissen müssen, indem Sie nur den anfänglichen Einstiegspunkt kennen. Dies ist einer der grundlegenden Punkte von REST; dass es hypermedia-gesteuert und selbstbeschreibend sein sollte. Es ist auch eines der am wenigsten verstandenen Prinzipien. Die Entdeckung von Ressourcen erfolgt über Hypermedia-Links in den Antworten des Servers.

Zurück so lange her wie 2008 begann sich Roy Fielding darüber zu ärgern, dass Leute HTTP-basierte APIs schreiben und sie REST nennen nur weil es das heiße neue Ding war. Hier sind ein paar Punkte, die er macht;

Eine REST-API dürfen keine festen Ressourcennamen oder Hierarchien definieren (eine offensichtliche Kopplung von Client und Server). Server müssen die Freiheit haben, ihren eigenen Namensraum zu kontrollieren. Erlauben Sie stattdessen Servern, Clients anzuweisen, wie geeignete URIs zu erstellen sind, wie dies in HTML-Formularen und URI-Vorlagen der Fall ist, indem Sie diese Anweisungen innerhalb von Medientypen und Linkbeziehungen definieren. [Failure here implies that clients are
assuming a resource structure due to out-of band information, such as
a domain-specific standard, which is the data-oriented equivalent to
RPC’s functional coupling].

und

Eine REST-API sollten ohne Vorkenntnisse über die anfängliche URI (Lesezeichen) und eine Reihe von standardisierten Medientypen, die für die beabsichtigte Zielgruppe geeignet sind, eingegeben werden (dh es wird erwartet, dass es von jedem Client verstanden wird, der die API verwenden könnte). Von diesem Punkt an müssen alle Anwendungszustandsübergänge durch die Client-Auswahl von vom Server bereitgestellten Auswahlmöglichkeiten gesteuert werden, die in den empfangenen Darstellungen vorhanden sind oder durch die Manipulation dieser Darstellungen durch den Benutzer impliziert werden. Die Übergänge können durch das Wissen des Clients über Medientypen und Ressourcenkommunikationsmechanismen bestimmt (oder begrenzt) werden, die beide spontan verbessert werden können (z. B. Code-on-Demand). [Failure here implies that out-of-band information is
driving interaction instead of hypertext.]

In der Praxis bedeutet dies, dass der Einstiegspunkt (der normalerweise den Stamm-URI von „https://stackoverflow.com/“ verwendet) Links zu anderen REST-APIs enthält. Diese APIs enthalten Links zu anderen APIs und so weiter. Es sollte keine API geben, die keinen Link darauf hat. Das würde bedeuten, dass es nicht auffindbar ist.

Die anderen Antworten hier sind grundlegend falsch, da sie das grundlegendste Prinzip von REST nicht anerkennen.

  • Sie verletzen einen Konflikt zwischen Praxis und Theorie, der wahre Anwender wird immer gewinnen. Ruhe ist eher das, was Sie Richtlinien nennen, als tatsächliche Regeln.

    – Sternengatter

    24. Juli 2019 um 19:43 Uhr

  • Wie würde man vorgehen, um diese Links tatsächlich zu sehen?

    – MoltasDev

    7. Februar 2020 um 13:51 Uhr

  • Der selbstbeschreibende Aspekt wird in der Praxis im Allgemeinen nicht verwendet, aber hier ist mehr Lektüre zur Definition – de.wikipedia.org/wiki/HATEOAS (kurz für „Hypermedia as the Engine of Application State“)

    – Brichins

    5. Januar um 21:54 Uhr

Benutzer-Avatar
ATEF SHAHRIER EVAN

Es gibt eine Möglichkeit, die meisten versteckten REst-Apis von innerhalb der Website zu erhalten. Folgen Sie dieser Dokumentation.

1105570cookie-checkGibt es eine Möglichkeit, alle Endpunkte einer REST-API zu erkennen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy