web-dev-qa-db-fra.com

Existe-t-il un moyen de découvrir tous les points de terminaison d'une API ReST?

Je me demande s'il est possible de découvrir par programme tous les points de terminaison d'une API particulière.

Ainsi, par exemple, si j'obtiens cette URL avec un navigateur ou une boucle: https://api.Twitter.com/1.1/

Je pourrais obtenir quelque chose comme ça en tant que réponse JSON:

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

Bien sûr, Twitter pourrait choisir de publier ou de ne pas publier ce format. Donc, comme question secondaire, existe-t-il des bibliothèques pour Java ou Javascript qui mapperont et publieront automatiquement les routes d'API que vous avez créées dans vos contrôleurs?

30
4m1r

Il n'y a aucun moyen de découvrir par programme les services REST car ils n'ont pas de service de registre standard.

En dehors de faire quelque chose de fou de recherche par force brute, il n'y a aucun moyen de trouver les bonnes URL (sans parler des bons paramètres). La seule option consiste donc à documenter votre API. Pour cela, le meilleur choix que j'ai vu jusqu'à présent est:

29
Gergely Bacso

Certaines API RESTful publient une ressource de langage de description d'application Web (WADL - prononcé comme la marche que font les canards - pour faire court). JAX-RS, ou au moins les applications Web Jersy le feront par défaut à l'URL racine de l'application /application.wadl. Il ne semble pas que l'API de Twitter en soit un. De nombreux puristes REST soutiendraient que l'API devrait être auto-descriptive et auto-détectable simplement en interagissant avec elle et en voyant quels autres points de terminaison elle vous donnera.

En savoir plus sur WADL de wikipedia ...

10
David

Vous devriez être en mesure de découvrir tout ce que vous devez savoir sur une API REST en ne connaissant que le point d'entrée initial. C'est l'un des points fondamentaux de REST; il doit être piloté par hypermédia et auto C'est aussi l'un des principes les moins bien compris. La découverte des ressources se résume aux liens hypermédia dans les réponses du serveur.

Il y a aussi longtemps que 2008 Roy Fielding a commencé à s'énerver à propos des gens qui écrivent des API basées sur HTTP et les appellent REST juste parce que c'était la nouvelle nouveauté. Voici quelques points qu'il fait valoir;

A REST ne doit pas définir de noms ou de hiérarchies de ressources fixes (un couplage évident entre client et serveur). Les serveurs doivent ont la liberté de contrôler leur propre espace de noms. Au lieu de cela, autorisez les serveurs à expliquer aux clients comment construire des URI appropriés, comme cela se fait dans les formulaires HTML et les modèles d'URI, en définissant ces instructions dans les types de médias et les relations de liens. [L'échec ici implique que les clients supposent une structure de ressources en raison d'informations hors bande, comme une norme spécifique au domaine, qui est l'équivalent orienté données du couplage fonctionnel du RPC].

et

Un REST API doit être entré sans connaissance préalable au-delà de l'URI initial (signet) et un ensemble de types de médias standardisés qui conviennent au public cible (c'est-à-dire censé être compris par tout client qui pourrait utiliser l'API). À partir de ce moment, toutes les transitions d'état d'application doivent être déterminées par la sélection par le client des choix fournis par le serveur qui sont présents dans le reçu. représentations ou sous-entendu par la manipulation de ces représentations par l'utilisateur. Les transitions peuvent être déterminées (ou limitées par) la connaissance du client des types de médias et des mécanismes de communication des ressources, qui peuvent tous deux être améliorés à la volée (par exemple, le code à la volée). [L'échec ici implique que les informations hors bande conduisent à l'interaction plutôt qu'à l'hypertexte.]

En pratique, cela signifie que le point d'entrée (généralement en utilisant l'URI racine de "/") contient des liens vers d'autres API REST. Ces API contiendront des liens vers d'autres API, etc.). il ne devrait pas y avoir d'API sans lien vers celle-ci. Cela signifierait qu'elle n'est pas détectable.

Les autres réponses ici sont fondamentalement erronées en ce qu'elles ne reconnaissent pas le principe le plus fondamental du REST.

2
Qwerky