Je travaille sur un système d'entreprise qui utilisera un service Web reposant entre les clients mobiles et un serveur central. Aussi reposante que possible, disons.
Ma question concerne haïssez (HyperMedia comme moteur d'application) et l'utilisation de XML personnalisés dans des organes de réponse HTTP. P>
Ce système ne sera jamais Tous les em> sont utilisés par les clients publics, mais j'aime l'idée haineuse de pouvoir modifier le modèle d'allocation de ressources côté serveur plus tard sans avoir à reconfigurer chacun des clients de manière indépendante. Si nous décidons qu'en raison de problèmes de mise à l'échelle, nous devons diffuser la fonction de serveur sur plusieurs boîtes physiques, aucun problème, cela sera reflété dans les URI qui sont générées lorsqu'un client (ou le serveur sous instruction d'un client) crée une nouvelle ressource. . P> Notre domaine commercial est très spécifique et inhabituel. En tant que tel, j'aimerais utiliser XML personnalisé pour les organes d'entité de réponse HTTP dans tout le service Web, et le client analysera les URI de ressources hors du XML afin de rester informé des emplacements de ressources qu'il peut utiliser lors de la modification de son propre État d'application. Je sais que cela "brise" la partie H de Haeaos. P> E.g. Lorsqu'un client affiche une transaction sur le serveur pour le traitement, le serveur peut inclure le fragment XML suivant dans le groupe de réponse HTTP 201 (dans le cadre d'un document XML plus grand). Le serveur informerait également le client de l'URI de la nouvelle ressource de transaction créée elle-même, mais cela ne serait probablement que dans l'en-tête HTTP de localisation. p> est-ce si em> mauvais? Il y a très peu de chances que les clients utilisant ce service soient déjà basés sur le navigateur. Quels sont les autres avantages de HyperMedia sur la livraison des URI en tant que texte brut au sein de XML? P> Je suppose que je pourrais aller à xhtml, mais l'analyseur sur notre plate-forme mobile est beaucoup plus efficace avec la variété. P> P>
5 Réponses :
Qu'est-ce que vous faites en retournant une URL à Resultur, c'est déjà une hypermédia déjà. Le seul problème est que vous avez besoin d'un type de média qui indique au client comment la réponse est formatée afin qu'elle puisse analyser les URL de manière prévisible et documentée. P>
Option 1: Créez votre propre type de média comme vnd.yourcompany.resource + xml. En faisant cela, vous indiquez que le type de support peut être analysé par un analyseur XML, mais il suit certaines règles spéciales définies par votre entreprise. À ce stade, vous pouvez utiliser n'importe quelle standard que vous souhaitez pour la définition des liens HyperMedia (voir cette question). Un bon avantage est que si vous décidez si vous décidez que vous décidez de faire une nouvelle modification du format de votre XML, vous pouvez créer un vnd.votrecompany.resourcev2 + XML et tant que vous étiez assez intelligent pour utiliser l'acceptation En-tête sur vos anciens clients, vous pouvez introduire le nouveau format côte à côte avec l'ancienne en faisant de nouvelles applications client accepte le nouveau format. P>
Option 2: Je ne suis que moitié sérieux à propos de cette option, mais j'ai envisagé de pousser pour un nouveau médiatype appelé Application / HyperxML + XML. Le document suivrait les mêmes règles que l'application / XML mais utiliserait également XLINK pour hypermédia. Cela permettrait aux personnes qui utilisent JavaScript pour analyser le document XML pour tirer également parti de l'hypermédia de manière standardisée. P>
Option 3: Utiliser xhtml. Je ne comprends pas pourquoi votre analyseur a des problèmes avec XHTML, mais je vais prendre votre mot pour cela. P>
Il y a deux informations importantes que votre serveur reposant devra traiter des demandes, quelle que soit la langue de balisage sous-jacente: un type de support et une URI. En supposant qu'un type de support pour une URI donnée introduirait le couplage client-serveur. Ce serait, par exemple, empêcherait le même URI de servir deux types de type multimédia différents.
XML n'est pas la seule option lors de la conception des formats HyperMedia. Découvrez le API de nuage Sun Cloud , qui définit un Hypertext-Driven API de repos basé sur JSON (bien qu'il ne semble pas utiliser le support tapez avec ses hyperliens). Il n'est pas difficile de passer de cette approche à celui qui combine des types de média avec des hyperliens. P>
Par exemple, vous pouvez définir une structure de données JSON appelée lien qui ressemble à ceci; p>
{ "name":"human-readable label for link", "uri":"http://example.com/resources/123", "media_type":"application/vnd.com.example.Resource+json" }
HyperMedia ne nécessite pas de HTML ni même de URI qualifiée à ce sujet. Si votre type de support définit une règle pour transformer certains éléments de la réponse en ressources dés-référenables, vous avez HyperMedia.
<result>http://myserver.com/foo/1234</result>
Les deux premiers exemples ont nécessité des informations hors bande pour le client ... et ils ne sont donc pas reposants.
C'est ainsi que la balise d'ancrage fonctionne dans HTML - A HREF. Les règles de traitement spécifiques aux médias permettent des URL relatives.
Je suggérerais que, plutôt que de la main, ces hyperliens utilisent un outil qui crée ces hyperliens pour vous. La programmation orientée des interactions est une bonne méthode pour créer ces interactions (hyperliens). Veuillez suivre ce lien cette technologie a fonctionné pour nous http://www.masterkube.com/hateoas_technology.htmlled/a > p>
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses uniquement uniquement peuvent devenir invalides si la page liée change.
Au minimum (même si vous ne faites rien d'autre), vous devez mettre votre URL dans un XLINK Attribut au lieu du contenu de l'élément:
<resulturi xlink:href="http://resultserver/results/1234.xml"/>
> Je sais que cela "brise" la partie h de Haeaos. Est-ce que ça? Je n'étais pas au courant que Hateoas met des contraintes sur le type de type de contenu que vous pouvez utiliser.