J'ai essentiellement commencé à faire ce qui suit lors de la création d'un service REST:
- HTML est demandé
- le service renvoie la page Web souhaitée mais sans la "ressource" demandée, par exemple. Les données
- la page Web contient du JavaScript qui émet une demande AJAX vers le même service (type de contenu différent)
- le service renvoie ensuite les données réelles (JSON) et la page les affiche
D'un côté, cela semble inefficace (2 demandes), mais lorsque j'ai été utilisé, "les performances ne sont pas préoccupantes", ce qui signifie que l'application interne à faible trafic et les sites Web sont simples et se chargent rapidement.
La raison pour laquelle je me suis retrouvé avec cela est que la page Web peut alors être presque pure Html + JavaScript et presque aucun truc côté serveur n'est requis, en particulier pas de boucles, pour créer des tableaux et des trucs comme ça (ce qui je pense est très moche par rapport à des choses comme slickgrid), par exemple la séparation des données et de la vue.
Maintenant, avant de commencer à l'utiliser, est-ce une bonne idée ou dois-je simplement arrêter de le faire?
la source
Réponses:
Si vous demandez une ressource et qu'elle ne contient pas les données, ce n'est pas un service REST. Le service fournissant les données réelles dans json peut l'être, mais la partie HTML ne l'est pas. Pour une application Web, cela n'a pas d'importance.
La technique fonctionne, mais vous devez être conscient de ses limites:
Je voudrais également noter que le code générant le HTML est fondamentalement le même, qu'il s'exécute côté serveur ou côté client. Vous disposez d'un choix beaucoup plus large de langages et de frameworks côté serveur et je suis sûr qu'il existe également plusieurs équivalents de slickgrid.
Vous pouvez et devez toujours maintenir la séparation des données et l'affichage côté serveur. Le système de modèles peut et doit simplement prendre les données en tant que structure de données ou même json (en particulier si le service réel est dans une langue différente de celle du système de modèles) et simplement développer un modèle avec ces données.
Et non, je ne pense pas à PHP; c'est le système de modèles le moins performant (bien qu'il y en ait de meilleurs construits dessus). Je pense à Genshi ou XSLT ou à quelque chose d'encore plus avancé qui fournit des widgets Web.
la source
Il n'y a rien de mal à faire cela, tant que vous vous assurez de bien structurer votre code. Vous pouvez même servir le contenu statique, par exemple à partir d'un Apache plutôt que de votre service Web.
la source
C'est une bonne pratique. Et c'est fait tout le temps, même si le souligne @JanHudec, l'appeler un service REST est faux. Mais de nombreux sites Web font exactement cela pour les raisons que vous mentionnez.
la source
Je ne dirais pas que c'est un anti-modèle, ce que vous décrivez est plus ou moins un gros client , pas totalement différent des services tels que Trello. La responsabilité initiale du serveur est d'envoyer le DOM et toutes les ressources nécessaires pour faire fonctionner le client. J'ai travaillé sur des projets similaires dans l'automatisation des centres de données et la surveillance des réseaux.
Le client démarre comme un DOM clairsemé, récupère certaines données via XHR (parfois via JSONP) et se connecte finalement à un serveur de socket. Un exemple encore plus basique serait une application de chat.
La seule raison de ne pas le faire est qu'il peut être extrêmement difficile de bien faire les choses. Si vous êtes à l'aise avec la programmation fonctionnelle asynchrone et toutes les courses et autres défis qu'elle peut présenter, vous n'aurez aucun problème à la maintenir. Plus important encore, vous n'aurez aucun problème à l'écrire afin que d' autres personnes puissent éventuellement le maintenir.
Si l'idée d'ajouter plus de fonctionnalités commence à vous faire peur, ou si vous commencez à découvrir que le débogage est un cauchemar, alors vous voudrez peut-être envisager d'autres méthodes de production pendant que vous continuez à expérimenter et à apprendre.
C'est une conception valide tant que vous ne creusez pas un trou pour vous-même. Si vous avez des gobs et des gobs de JS aléatoires partout au lieu d'une interface propre, vous voudrez probablement re-factoriser ou aborder le projet différemment. La plupart de vos fonctions définies pour s'exécuter une fois toutes les ressources chargées doivent être anonymes et saisies à partir d'une interface propre. S'ils ne le sont pas, vous pourriez vous diriger vers des ennuis.
la source
comme l'a dit @Jan Hudec, votre approche ne peut certainement pas être appelée REST. Bien que la partie où le client demande une ressource puisse être. Il vaut mieux que le client gère la partie présentation, comme le
backbone
fait. Il communique avec le serveur REST pour les ressources et les affiche à l'aideviews
.la source
C'est peut-être un anti-pattern, mais je pense que c'est aussi l'avenir des applications web. Plutôt que de vous occuper de JavaScript, vous devriez au moins utiliser une bibliothèque de modèles. Une meilleure solution est un framework MVC côté client comme AngularJS (que j'utilise actuellement).
Pour d'autres références, voici un article de blog populaire comparant plusieurs cadres, et voici un site qui implémente le même programme en utilisant plusieurs cadres.
Aussi: les commentaires de Jan Hudec sur l'interaction avec les moteurs de recherche et les lecteurs d'écran sont valables. Si vous travaillez sur un site de commerce électronique (où le pagerank est important), vous ne voudrez probablement pas utiliser des cadres côté client. Mais pour les applications internes, ce ne sont généralement pas des problèmes.
la source
Ce que vous faites sonne bien! Cependant, si vos réponses json contiennent du HTML, vous perdez votre temps.
Un autre point est que votre client stupide devrait probablement obtenir ses données json d'un projet différent. Vous devez viser une séparation appropriée entre le client et le service, vous aurez alors un service RESTful approprié
la source