Qu'est-ce qui ne va vraiment pas avec un noeud final renvoyant du HTML plutôt que des données JSON?

77

Quand j'ai commencé à apprendre PHP (il y a 5 ou 6 ans), j'ai découvert Ajax et j'ai traversé "les phases":

  1. Votre serveur renvoie les données HTML et vous les insérez dans un code innerHTML du DOM.
  2. Vous en apprendrez plus sur les formats de transfert de données tels que XML (et dites «oooh, c’est pour cela qu’il est utilisé), puis JSON.
  3. Vous renvoyez JSON et construisez votre interface utilisateur à l'aide de code JavaScript vanilla
  4. Vous passez à jQuery
  5. Vous en apprendrez plus sur les API, les en-têtes, les codes d’état HTTP, REST , CORS et Bootstrap
  6. Vous apprendrez les structures SPA et frontend ( React , Vue.js et AngularJS ) et le standard JSON API.
  7. Vous recevez un code d'entreprise hérité et constatez, lors de l'inspection, qu'il fait ce qui est décrit à l'étape 1.

Comme je travaillais avec cet ancien code, je ne pensais même pas qu'il pouvait renvoyer du HTML (je veux dire, nous sommes des professionnels maintenant, n'est-ce pas?), J'ai donc eu de la difficulté à rechercher le point de terminaison JSON qui renvoyait les données les appels Ajax peuplent. Ce n'est que lorsque j'ai demandé au "programmeur" qu'il m'a dit qu'il retournait du HTML et qu'il était ajouté directement au DOM avec innerHTML.

Bien sûr, c'était difficile à accepter. J'ai commencé à réfléchir à des moyens de reformuler cela dans les points de terminaison JSON, en pensant à l'unité qui testait les points de terminaison, etc. Cependant, cette base de code n'a aucun test. Pas un seul. Et c'est plus de 200 000 lignes. Bien sûr, l’une de mes tâches consiste à proposer des approches pour tester l’ensemble, mais pour le moment, nous ne sommes pas encore en train de nous y attaquer.

Je ne me demande donc pas, dans un coin, si nous n’avons aucun test, nous n’avons donc aucune raison particulière de créer ce point de terminaison JSON (car il n’est pas "réutilisable": il renvoie littéralement des données qui ne tiennent que sur cette partie de la application, mais je pense que cela était déjà implicite puisqu'il renvoie ... des données HTML).

Qu'est- ce qui ne va pas avec ça?

Christopher Francisco
la source
3
Également lié: stackoverflow.com/questions/1284381/… <- Une très bonne réponse à SO.
Machado
73
Un serveur utilisant HyperText Transfer Protocol renvoyant HyperText?! L'horreur!
Andy
3
@Andy Pour être tout à fait honnête, il s’agit en fait de Generic Message Transfer Protocol: rien n’est spécifique au transfert d’hypertexte, par opposition au FTP, qui parle beaucoup de choses spécifiques aux fichiers et aux répertoires.
Joker_vD
4
@Joker_vD Je n'ai jamais entendu parler d'un protocole appelé GMTP. Bien que les choses aient évolué et que vous puissiez envoyer d'autres types de contenu via HTTP, ce n'était pas l'intention originale. Ce que je veux dire, c'est que, parce que vous pouvez envoyer du contenu autre que HyperText via HTTP, il semble ridicule de suggérer que ce n'est plus valide de l'utiliser à ses fins originales.
Andy

Réponses:

114

Qu'est-ce qui ne va vraiment pas avec un noeud final renvoyant du HTML plutôt que des données JSON?

Rien, vraiment. Chaque application a des exigences différentes et il se peut que votre application n'ait pas été conçue pour être un SPA.

Il se peut que ces superbes frameworks que vous avez cités (Angular, Vue, React, etc.) ne soient pas disponibles au moment du développement, ou n’étaient pas "approuvés" par votre entreprise.

Je vais vous dire ceci: un noeud final renvoyant du HTML réduit votre dépendance aux bibliothèques JavaScript et la charge du navigateur de l'utilisateur, car il n'a pas besoin d'interpréter / d'exécuter du code JS pour créer des objets DOM - le code HTML est déjà présent. il suffit d'analyser les éléments et de les rendre. Bien sûr, cela signifie que nous parlons d’une quantité raisonnable de données. 10 Mo de données HTML n'est pas raisonnable.

Toutefois, comme il n’ya rien de mal à renvoyer du code HTML, le fait de ne pas utiliser JSON / XML vous fait perdre la possibilité d’utiliser votre point de terminaison en tant qu’API. Et voici la plus grande question: faut-il vraiment une API?

Connexe: Est-il possible de renvoyer du HTML à partir d'une API JSON?

Machado
la source
4
Je ferais un pas en arrière avant de dire que c'est simplement "tout simplement une préférence". Vous devez prendre certaines décisions importantes: s’agit-il d’une API ou non, ai-je les bibliothèques appropriées pour travailler avec cela comme des données JSON sur le client, quel type de client puis-je prendre en charge (navigateurs sans Javascript, par exemple)? exemple), quel volume par rapport au temps de calcul dont je dispose, quelle stratégie mes programmeurs utiliseront mieux, etc., etc., etc.
Machado
7
"Il n'aura pas besoin d'interpréter le code JS pour créer des objets DOM - les objets DOM sont déjà là, c'est juste une question de rendu", eh bien, le HTML est déjà là (une fois qu'il est arrivé par le fil). Le navigateur doit analyser le code HTML et en faire les objets DOM.
Paul D. Waite
7
Il n'y a aucune raison pour que HTML ne puisse pas agir en tant qu'API. Zéro. Aucun. En fait, HAL + JSON et HAL + XML ressemblent beaucoup à HTML. Voici une excellente discussion sur REST. La partie pertinente sur le retour du code HTML à partir d'un noeud final est presque terminée. youtu.be/pspy1H6A3FM Personnellement, je renvoie tous les noeuds finaux à la fois en json et en HTML. Si vous écrivez des services pouvant être découverts, il est vraiment facile de les parcourir ... dans un souffle ... dans un navigateur.
RubberDuck
4
Parce que c'est une chienne complète pour extraire les données qui vous intéressent pour essayer de les utiliser d'une nouvelle manière?
DeadMG
4
Servir du HTML sur HTTP? Qu'est-ce que c'est? Un site Web?
Ant P
50

JSON et HTML remplissent deux objectifs sémantiques différents.

Si vous remplissez une page Web avec des données, utilisez JSON. Si vous construisez une page Web à partir de parties de pages Web, utilisez HTML.

Ils peuvent sembler être la même chose, mais ils ne le sont pas du tout. D'une part, lorsque vous créez une partie d'une page Web à l'aide du code HTML renvoyé par le serveur, vous travaillez côté serveur. Lorsque vous liez des données à une page Web, vous travaillez côté client.

En outre, vous devez faire attention avec HTML pour ne pas lier étroitement à une page spécifique. L'intérêt de rendre les pages partielles de cette manière est que les partiels soient réutilisables. Si vous rendez le partiel trop spécifique, il ne se composera pas d'autres pages. JSON n'a pas ce problème, car il ne s'agit que de données, pas de structure de page Web.

Robert Harvey
la source
1
"D'une part, lorsque vous créez une partie d'une page Web à l'aide de HTML, vous travaillez côté serveur." Pourquoi? Je ne vois aucune raison pour que cela soit le cas. Ce n'est évidemment vrai que pour le chargement initial de la page et on peut même dire que ce n'est même pas le cas, car le client peut demander les données dont il a besoin.
DeadMG
3
@DeadMG Il devrait indiquer "lors de la création d'une partie d'une page Web à l'aide du code HTML renvoyé par le serveur" (par opposition à l'utilisation du code JSON renvoyé par le serveur)
utilisateur253751
En effet, mais comme il y a peu de motivation pour que cela se produise, je ne vois pas le but.
DeadMG
6
@DeadMG Peu de motivation pour quoi que ce soit jamais? Pour que le serveur retourne HTML? C’est littéralement le sujet de toute cette question de la SE.
user253751
La question est de savoir si vous devez ou non renvoyer HTML. Il est clair que la réponse initiale doit être HTML, mais il n'y a aucune raison évidente pour laquelle d'autres API devraient renvoyer du HTML.
DeadMG
22

Le problème principal est qu’il couple étroitement le serveur au client, qui doit connaître la structure HTML. Cela rend également les points finaux plus difficiles à réutiliser de nouvelles manières ou de nouvelles applications.

Renvoyer des données en clair et laisser le client restituer le couplage réduit le couplage et augmente la flexibilité et la testabilité. Vous pouvez exécuter des tests unitaires sur le client pour des données fictives et des tests unitaires sur le serveur pour tester les données souhaitées.

DeadMG
la source
11
HTML peut être raisonnablement générique. Vous pouvez, par exemple, renvoyer une liste à puces et la fourrer dans une div où elle sera sujette au style défini par le CSS en vigueur.
Robert Harvey
10
Ce n'est pas très utile si j'ai besoin de le ranger dans un espace cette fois. Ou le rendre dans une autre application qui n'est pas rendue en HTML.
DeadMG
2
Je reformulerais comme je le ferai toujours avec HTML, et la forme de ce HTML doit toujours être parfaitement cohérente dans toutes les utilisations, ce qui n’est pas une garantie très utile. Par exemple, dans notre application , nous avons des listes, mais nous avons en fait ne pas utiliser ulet limais plutôt changé pour faire de chacun un div(ne me souviens pas pourquoi). Cela aurait été délicat si le serveur avait renvoyé un paquet de HTML avec uls et lis dedans.
DeadMG
2
Cela semble inutile de recevoir la garantie en premier lieu lorsque vous pouvez simplement renvoyer les données et laisser le client le restituer comme bon lui semble (si cela va même le rendre)
DeadMG
1
Le seul scénario que je vois où il serait préférable de renvoyer du code HTML est que le client ne dispose pas de suffisamment de ressources pour effectuer lui-même le rendu.
DeadMG
14

Je pense que vous l'avez un peu en arrière. Vous dites:

nous n'avons aucun test, nous n'avons donc aucune raison particulière de créer ce noeud final JSON

Une raison d'utiliser un point de terminaison approprié serait pour que vous puissiez le tester. Je dirais que ne pas avoir de test est une très bonne raison pour commencer à en écrire. Autrement dit, s’il existe une logique à tester.

200 000 lignes de code représentent beaucoup de choses à refactoriser et sont probablement difficiles à maintenir. Décrire certains points de terminaison et les tester peut être un bon point de départ.

Une autre raison pourrait être de séparer le serveur du client. Si, dans un avenir lointain, la conception ou la présentation de l'application change, il est plus facile de travailler avec un format de données approprié que la sortie HTML. Dans un monde idéal, il vous suffirait de changer de client et de ne pas toucher le serveur du tout.

Victor Sand
la source
Le point concernant les modifications de la présentation ressemble davantage à la nécessité de séparer les modèles des données sous-jacentes, mais rien n’explique pourquoi ces modèles doivent figurer sur le client. En effet, il existe de nombreuses raisons pour lesquelles ils ne le sont pas , par exemple, vous ne pouvez pas décider de cacher des données au client si votre rendu est sur le client. Les éléments partiels HTML peuvent être redéfinis si ils sont générés par le même système de modèles que les pages HTML complètes.
IMSoP
6

Il existe 3 façons (au moins?) De créer une page Web:

  • Générez tout le côté serveur de pages.
  • Renvoie une page nue du serveur plus du code (JavaScript), et demande à la page d'extraire ses données et de la restituer dans le côté client HTML.
  • Renvoie une page partielle plus du code et demande au code d'extraire des blocs HTML préalablement rendus qu'il peut insérer dans la page.

Le premier va bien. Le deuxième est aussi bien. C'est le dernier problème qui pose problème.

La raison est simple: vous avez maintenant divisé la construction de la page HTML en parties totalement déconnectées. Le problème est celui de la maintenance. Vous avez maintenant deux entités distinctes chargées de gérer les détails de l'interface utilisateur. Il faut donc que le CSS et les autres détails similaires soient synchronisés entre les deux éléments distincts. Vous avez changé la largeur de la barre latérale? Génial. Maintenant, le fragment HTML qui revient provoque le défilement horizontal car ses hypothèses sur la largeur de la barre latérale ne tiennent plus. Vous avez changé la couleur de fond pour ce bloc? Parfait, la couleur de police de votre fragment HTML entre maintenant en conflit, car elle supposait une couleur d'arrière-plan différente et quelqu'un avait oublié de tester ce noeud final.

Le fait est que vous avez maintenant divisé les connaissances qui devraient être centralisées en un seul endroit (à savoir la logique de présentation), ce qui rend plus difficile de s'assurer que toutes les pièces s'emboîtent correctement. En utilisant une API JSON, vous pouvez conserver toute cette logique uniquement dans l'interface frontale ou dans vos modèles côté serveur si vous convertissez vos données au format HTML pour commencer. Il s'agit de conserver la connaissance / la logique de présentation dans un endroit unique, de sorte qu'elle puisse être gérée de manière cohérente et dans le cadre d'un processus unique. HTML / CSS / JS est assez difficile à maintenir sans diviser en minuscules morceaux.

Les API JSON présentent également l’avantage supplémentaire de rendre les données disponibles de manière totalement indépendante de la logique de présentation. Cela permet à plusieurs présentateurs différents , tels qu'une application mobile et une page Web, de consommer les mêmes données. Cela permet notamment de consommer les données sans navigateur (telles que les applications mobiles ou les tâches cron nocturnes); ces consommateurs peuvent même ne pas être capables d'analyser le HTML. (Bien entendu, cela suppose nécessairement que les données soient identiques entre les différents consommateurs, ou que l'on peut utiliser un sous-ensemble de l'autre.) Que vous ayez besoin de cette possibilité dépend des exigences de votre application, cependant, tout en gérant votre présentation. la logique est nécessaire malgré tout. Je dirai que si vous le mettez en œuvre dès le départ, vous serez mieux préparé à la croissance future.

jpmc26
la source
2
Je pense en fait que l’évitement de la logique d’affichage en double peut être une bonne raison de restituer des fragments de page HTML: si vous restituez une partie de la page sur le serveur (par exemple, l’en-tête et la présentation de base), générez ensuite d’autres pièces basées sur des données JSON sur le client. avoir deux ensembles différents de modèles. Rendu sur le serveur partials déplace cette logique de retour à votre couche de présentation centrale, qui peut utiliser le même modèle pour rendre un composant individuel comme il le ferait si elle assemblait toute la page statiquement.
IMSoP
1
tu es le seul qui parle de mobile, je veux te donner mille votes en plus pour ça
Lovis
1
@IMSoP Si vous avez besoin d'une page dynamique , vous devez disposer d'une logique frontale. Si vous restez toujours à rendre des fragments côté serveur, vous devez maintenant vous assurer que les hypothèses du serveur frontal correspondent aux conditions préalables du serveur qui construit les fragments. Vous ne pouvez pas briser cette dépendance. Il est plus difficile de synchroniser ces connaissances si elles sont divisées en systèmes complètement divisés. Si vous ne rendez que le début, ces hypothèses sont centralisées. Je pense que j'éviterais également de mélanger un frontal dynamique avec un état initial dans un modèle côté serveur; un "bootstrap" pour démarrer le front-end est plus simple.
jpmc26
4

Je dirais qu'il n'y a rien de mal à ce que le serveur renvoie un fragment HTML et que l'interface utilisateur l'affecte à .innerHTML d'un élément. À mon avis, c'est le moyen le plus simple de développer du code JavaScript asynchrone. L'avantage est que JavaScript est utilisé le moins possible et le plus possible dans un environnement back-end contrôlé. N'oubliez pas que la prise en charge de JavaScript dans les navigateurs varie, mais que votre back-end a toujours la même version des composants du back-end, ce qui signifie que faire autant que possible dans le back-end signifiera le moins d'incompatibilités possibles.

Maintenant, parfois, vous voulez plus qu'un simple fragment HTML. Par exemple, un code d'état et un fragment HTML. Vous pouvez ensuite utiliser un objet JSON ayant deux membres, statusCode et HTML, le deuxième pouvant être affecté à .innerHTML de certains éléments après avoir vérifié le statusCode. Ainsi, l'utilisation de JSON et de innerHTML ne sont en aucun cas des approches exclusives alternatives; ils peuvent être utilisés ensemble.

En utilisant JSON, vous pouvez même avoir plusieurs fragments HTML dans la même réponse, qui sont affectés au .innerHTML de plusieurs éléments.

En résumé: utilisez .innerHTML. Cela rend votre code compatible avec autant de versions de navigateur que possible. Si vous avez besoin de plus, utilisez JSON et .innerHTML ensemble. Évitez XML.

juhist
la source
4

Il n'y a rien de mal en principe . La question est: Que voulez-vous réaliser?

JSON est parfait pour la transmission de données. Si vous envoyez plutôt du code HTML et que vous attendez du client qu'il extrait les données du code HTML, c'est nul.

D'autre part, si vous souhaitez transmettre un fichier HMTL qui sera rendu au format HTML, envoyez-le au format HTML - au lieu de compresser le code HTML en chaîne, convertissez la chaîne en JSON, transmettez le code JSON et décodez-le de l'autre côté. , obtenir une chaîne et extraire le code HTML de la chaîne.

Et hier encore, j’ai rencontré un code mettant deux éléments dans un tableau, convertissant le tableau en JSON, plaçant le JSON dans une chaîne, plaçant la chaîne dans un tableau, convertissant l’ensemble du tableau en JSON, l’envoyant au client, qui le décodait. le JSON, a obtenu un tableau contenant une chaîne, a pris la chaîne, a extrait le JSON de la chaîne, a décodé le JSON et a obtenu un tableau avec deux éléments. Ne fais pas ça.

gnasher729
la source
+1 exactement. La première question est: que devez-vous recevoir? Un point de terminaison renvoyant des annonces dans la barre latérale sous forme de code HTML, ou peut-être de pied de page, ou d'éléments similaires serait un peu erroné.
SQB
3

Tout dépend de l'objectif de l'API, mais en général, ce que vous décrivez est une violation assez grave de la séparation des préoccupations :

Dans une application moderne, le code API devrait être responsable des données et le code client, de la présentation.

Lorsque votre API renvoie le code HTML, vous combinez étroitement vos données et votre présentation. Lorsque l'API renvoie du code HTML, la seule chose que vous pouvez faire (facilement) avec ce code HTML est de l'afficher dans une partie d'une page plus grande. Sous un angle différent, la seule chose pour laquelle l’API est bonne est de fournir du code HTML à votre page. De plus, vous avez réparti votre code HTML sur le code client et le code serveur. Cela peut rendre la maintenance un mal de tête.

Si votre API renvoie JSON ou une autre forme de données pures, cela devient beaucoup plus utile. L'application existante peut toujours utiliser ces données et les présenter de manière appropriée. Maintenant, cependant, l'API peut utiliser d'autres éléments pour accéder aux mêmes données. Là encore, la maintenance est plus simple: tout le code HTML réside en un seul endroit. Si vous souhaitez modifier le style de l'ensemble du site, vous n'avez pas besoin de modifier votre API.

SouthShoreAK
la source
5
"Dans une application moderne, le code API devrait être responsable des données et le code client, de la présentation." Pourquoi cela devrait-il toujours être le cas? Je conviens qu’il s’agit d’un modèle courant qui facilite certaines choses, mais je ne vois aucune raison de l’élever au niveau de "devrait" ... c’est une décision qui doit être prise au cas par cas, et il y a certainement des raisons pour lesquelles, dans certaines situations, vous voudrez peut-être prendre une décision différente.
Jules
@Jules parce que si vous avez une API et un client, le fait de rendre le rendu à la fois est une violation de la séparation des préoccupations. (Maintenant, vous n'avez pas nécessairement d'API et de client. Vous ne pouvez avoir qu'un seul composant et lui faire faire toute la présentation. Mais alors vous n'avez pas d'API.)
njzk2
@ njzk2 Le fait qu'une API fournisse des données HTML ne signifie pas qu'elle les a restituées. Il peut s'agir de traiter le HTML comme un blob et de le stocker dans une base de données, par exemple. De plus, certains rendus peuvent être requis sur le serveur plutôt que sur le client (par exemple, en fournissant des pages statiques pour les moteurs de recherche), de sorte que la réutilisation de cette fonctionnalité pourrait être considérée comme une élimination de la duplication.
Jules
1
En outre, il est tout à fait possible de produire un couple client / API dans lequel tout le rendu a lieu sur le serveur et le client ne fait que brancher le code HTML livré dans des emplacements prédéfinis de son DOM. Jquery a un module entier dédié à ce type de client, ce qui me suggère qu’ils doivent être relativement communs.
Jules
1
@Jules Beaucoup de choses sont raisonnablement courantes, ce n'est pas une raison pour laquelle elles sont raisonnables.
njzk2
2

HTML est lié à une conception et à une utilisation spécifiques.

Avec HTML, si vous souhaitez modifier la mise en page, vous devez modifier la façon dont le code HTML est généré par l'appel du serveur. Habituellement, cela nécessite un programmeur back-end. Maintenant, vous avez des programmeurs back-end, qui par définition ne sont pas vos meilleurs rédacteurs HTML, qui gèrent ces mises à jour.

Avec JSON, si la présentation de la page change, l'appel du serveur JSON existant ne doit pas nécessairement changer du tout. Au lieu de cela, votre développeur front-end, ou même le concepteur, met à jour le modèle pour générer le code HTML différent à partir des mêmes données de base.

De plus, le JSON peut devenir la base d'autres services. Vous pouvez avoir différents rôles nécessitant d'afficher les mêmes données de base de différentes manières. Par exemple, vous pouvez avoir un site Web client contenant des données sur un produit dans une page de commande et une page de vente interne pour les représentants affichant les mêmes données dans une présentation très différente, peut-être à côté d’autres informations non disponibles pour les clients généraux. Avec JSON, le même appel de serveur peut être utilisé dans les deux vues.

Enfin, JSON peut mieux évoluer. Ces dernières années, nous avons en quelque sorte dépassé les limites avec les frameworks javascript côté client. Je pense qu'il est temps de prendre du recul et de commencer à réfléchir à ce que nous utilisons javascript et à son incidence sur les performances du navigateur ... en particulier sur les appareils mobiles. Cela dit, si vous exécutez un site suffisamment grand pour nécessiter une batterie de serveurs ou un cluster, au lieu d'un seul serveur, JSON peut évoluer plus efficacement. Les utilisateurs vous donneront gratuitement le temps de traitement dans leur navigateur. Si vous en profitez, vous pouvez réduire la charge du serveur lors d'un déploiement de grande envergure. JSON utilise également moins de bande passante, donc encore une fois, si vous êtes assez grandet utilisez-le à bon escient, JSON est nettement moins cher. Bien sûr, cela peut aussi empirer si vous finissez par alimenter des bibliothèques de 40 Ko pour analyser 2 Ko de données dans 7 Ko de code HTML, donc encore une fois: il est bon de savoir ce que vous faites. Mais JSON a le potentiel d’améliorer ses performances et ses coûts.

Joel Coehoorn
la source
1

Un tel point final n'a rien d'anormal s'il répond à ses exigences. S'il est nécessaire de cracher du code HTML qu'un consommateur connu peut analyser efficacement, bien sûr, pourquoi pas?

Le problème est que, dans le cas général, vous voulez que vos points de terminaison crachent une charge utile bien formée et analysable efficacement par un analyseur syntaxique standard. Et par effectivement analysable, je veux dire, analysable de manière déclarative.

Si votre client est obligé de lire la charge utile et d'en extraire des éléments d'information ouverts avec des boucles et des instructions if, alors l'analyse n'est pas analysable. Et HTML, étant la manière dont il est, il est très pardonné de ne pas se faire bien former.

Maintenant, si vous vous assurez que votre code HTML est compatible XML, alors vous êtes en or.

Cela dit, j'ai un problème important avec ceci:

Je vais vous dire ceci: un noeud final renvoyant du HTML réduit votre dépendance aux bibliothèques JavaScript et la charge sur le navigateur de l'utilisateur, car il n'a pas besoin d'interpréter / d'exécuter du code JS pour créer des objets DOM - le code HTML est déjà présent. il suffit d'analyser les éléments et de les rendre. Bien sûr, cela signifie que nous parlons d’une quantité raisonnable de données. 10 Mo de données HTML n'est pas raisonnable.

C'est une mauvaise idée, peu importe comment vous le coupez. Des décennies d'expérience industrielle collective nous ont montré qu'en général, il est judicieux de séparer les données (ou le modèle) de leur affichage (ou de leur vue).

Ici, vous fusionnez les deux pour une exécution rapide du code JS. Et c'est une micro optimisation.

Je n'ai jamais vu cela comme une bonne idée, sauf dans des systèmes très triviaux.

Mon conseil? Ne le fais pas. DR SVON HC SVNT , YMMV, etc.

luis.espinal
la source
0

JSON est juste une présentation textuelle de données structurées. Un client a naturellement besoin d'un analyseur pour traiter les données, mais pratiquement toutes les langues disposent de fonctions d'analyse JSON. Il est beaucoup plus efficace d'utiliser un analyseur JSON que d'utiliser un analyseur HTML. Cela prend peu d'empreinte. Ce n'est pas le cas avec un analyseur HTML.

En PHP, vous utilisez simplement json_encode($data)et c'est au client de l'autre côté de l'analyser. Et lorsque vous récupérez des données JSON à partir d'un service Web, vous utilisez simplement $data=json_decode($response)et vous pouvez décider comment utiliser les données comme vous le feriez avec des variables.

Supposons que vous développiez une application pour un appareil mobile. Pourquoi avez-vous besoin du format HTML alors que les applications mobiles utilisent rarement le navigateur Web pour analyser des données? De nombreuses applications mobiles utilisent JSON (format le plus courant) pour échanger des données.

Étant donné que les mobiles utilisent souvent des forfaits avec compteur, pourquoi voulez-vous utiliser du HTML qui nécessite beaucoup plus de bande passante que JSON?

Pourquoi utiliser HMTL lorsque le vocabulaire HTML est limité et que JSON peut définir des données? {"person_name":"Jeff Doe"}est plus informatif que ce que HTML peut fournir sur ses données car il définit uniquement la structure des analyseurs HTML, pas les données.

JSON n'a rien à voir avec HTTP. Vous pouvez mettre JSON dans un fichier. Vous pouvez l'utiliser pour des configurations. Le compositeur utilise JSON. Vous pouvez également l'utiliser pour enregistrer des variables simples dans des fichiers.

netrox
la source
0

Il est difficile de classer un bien ou un mal. OMI, les questions que je poserai sont: " devrait-il ", ou " peut-il faire avec moins? ".

Chaque terminal doit s'efforcer de communiquer avec le moins de contenu possible. Le rapport signal sur bruit est généralement constitué de codes HTTP <JSON <XHTML. Dans la plupart des situations, il est bon de choisir le protocole le moins bruyant.

Je suis différent sur le point concernant la charge du navigateur client par @machado, car avec les navigateurs modernes, cela n’est pas un problème. La plupart d'entre eux sont assez bien équipés pour gérer les codes HTTP et les réponses JSON. Et bien que vous ne disposiez pas de tests pour le moment, la maintenance à long terme d'un protocole moins bruyant serait moins coûteuse que celle qui le précède.

hasardeux
la source