81 votes

Détectabilité de runtime API rESTful / client HATEOAS design

Pour un SaaS de démarrage, je suis impliqué dans, je fais construire à la fois une web RESTful API et un couple de client applications sur différentes plates-formes qui la consomment. Je pense que j'ai l'API compris, mais maintenant je suis en se tournant vers les clients. Comme je l'ai lu à propos de RESTE, je vois qu'une partie essentielle de REPOS est découverte, mais il semble y avoir beaucoup de débat entre deux interprétations différentes de ce que la découverte signifie vraiment:

  1. Développeur découverte: Le développeur dur-codes et abondamment à l'API de détails dans le client, tels que les ressources d'URI, des paramètres de requête pris en charge les méthodes HTTP, et d'autres détails qu'ils ont découvert par le biais de la navigation sur les docs et d'expérimenter avec l'API de réponses. Ce genre de découverte, à mon humble avis nécessite cool de liaison et de l'API de gestion des versions de la question, et entraîne dur de couplage de code client de l'API. Pas beaucoup mieux que si vous utilisez un bien documentée de la collection de la RPC, il me semble.

  2. Exécution de la découverte - Le client de l'application elle-même est en mesure de comprendre tout ce qu'il faut avec peu ou pas de out-of-band de l'information (sans doute, qu'une connaissance des types de médias de l'API.) Des liens peuvent être chaudes. Mais pour faire de l'API très efficace, beaucoup de lien de template pour les paramètres de la requête semble être nécessaire, ce qui rend out-of-band info insinuer dans. Il y a peut-être d'autres difficultés, je n'ai pas encore pensé, puisque je n'ai pas eu à ce point dans le développement. Mais j'aime l'idée du couplage lâche.

Exécution de la découverte semble être le saint graal de REPOS, mais je vois peu de discussion sur la façon de mettre en œuvre un tel client. Presque tout le RESTE des sources que j'ai trouvé semble supposer Développeur de découverte. Quelqu'un sait de certains d'Exécution de découverte de ressources? Les meilleures pratiques? Des exemples ou des bibliothèques de code réel? Je travaille en PHP (Zend Framework) pour un client. Objective-C (iOS) pour les autres.

Est Runtime découverte d'un objectif réaliste, compte tenu de l'ensemble d'outils et de connaissances dans la communauté des développeurs? Je peux écrire mon client à traiter l'ensemble des URI de manière opaque, mais comment faire plus efficacement est une question, en particulier sur les connexions à bas débit. De toute façon, d'URI ne sont qu'une partie de l'équation. Ce lien à propos de template dans le contexte d'Exécution? Comment communiquer quelles sont les méthodes de prise en charge, en plus de faire beaucoup d'OPTIONS de demande?

34voto

Ferenc Mihaly Points 539

Dans cette vidéo, Jon Moore s’appuie un client générique à l’aide de runtime HATEOAS auto découverte. C’est assez impressionnant et bien utile de regarder :

http://oredev.org/2010/sessions/Hypermedia-APIs

19voto

jonathanberi Points 766

C'est certainement l'une noix dure à casser. Chez Google, nous avons mis en œuvre notre Service de Découverte que toutes nos nouvelles Api sont construits contre. Le TL;DR version est de générer un Schéma JSON-comme spec que nos clients peuvent analyser - beaucoup d'entre eux de manière dynamique.

Que des résultats moyens plus facile SDK mises à niveau pour le développeur et facile/mieux maintenance pour nous.

En aucun cas la solution parfaite, mais la plupart de nos devs semblent aimer.

Voir le lien pour plus de détails (et assurez-vous de regarder la vid.)

12voto

Sam Points 101

Fascinant. Ce que vous décrivez est fondamentalement le principe HATEOAS. Ce qui est HATEOAS vous demandez ? Lisez ceci : http://en.wikipedia.org/wiki/HATEOAS

En d’autres termes, HATEOAS veut dire le lien qui suit. Cette approche découple votre client à partir de l’URL spécifique et vous donne la possibilité de changer votre API sans casser tout le monde.

6voto

Yuriy Zubarev Points 1888

Vous avez fait votre travail à domicile et tu dois le cœur de celui-ci : découverte du runtime est le Saint Graal. Ne courir après elle.

UDDI raconte l’histoire poignante de la découverte de duree : http://en.wikipedia.org/wiki/Universal_Description_Discovery_and_Integration

1voto

Falkayn Points 451

Je pense que le point important à propos de HATEOAS n’est pas que c’est quelques clientes Saint-Graal, mais qu’il isole le client des changements URI - on suppose que vous utilisez connu (ou developr découvert personnalisé) Relations de liaison qui permettra au système de savoir qui le lien d’un o objet est la forme modifiable. Le point important est d’utiliser un type emdia hypermédia au courant (par exemple, HTML, XHTML, etc.).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X