Pas de différence réelle à première vue:
En supposant que votre variable « noeud » est juste un identifiant de nœud, il n'y a pas beaucoup de différence entre les deux. Sémantiquement, les deux semblent effectuer une opération 'get' (même si elles sont techniquement des demandes de post), car ils récupèrent simplement des données sans changer d'état sur le serveur (ok, c'est une autre hypothèse). En ce qui concerne la sécurité, il n'y a pas non plus de différence significative - les deux peuvent être facilement forgés et la différence se résume à celle du débat GET vs. POST «standard», c'est-à-dire, aucune différence si ce n'est la première. expose les paramètres un peu plus «accessible» à l'observateur occasionnel, car ils sont visibles dans l'URL.
Mais une différence de « commodité » dans Drupal:
Dans Drupal, la première version est souvent rencontrée car il peut utiliser la fonctionnalité Wildcard Loader Arguments (introduite dans Drupal 6). Disons que votre URL de rappel est définie dans hook_menu comme ceci:
$items['module/get/%node'] = array(
'title' => 'Foo',
'type' => MENU_CALLBACK,
'page callback' => 'yourModule_callback',
'page arguments' => array(2),
);
Avec cela, yourModule_callback()
sera appelée avec son premier paramètre étant déjà le noeud complètement chargé obect pour le passé dans JNV, comme %node
dit Drupal pour exécuter une node_load()
sur le paramètre avant de le remettre à la fonction de rappel. En utilisant la deuxième version de votre exemple, la fonction de rappel devrait charger l'objet nœud lui-même, après l'avoir extrait des données POST.
Donc, une chose de commodité ici. En outre, un modèle courant dans Drupal consiste à utiliser la même URL de rappel pour une requête AJAX que pour son alternative de remplacement non javascript. Ainsi, lorsque yourModule_callback()
est invoqué, il peut tout d'abord faire ce qu'il a l'intention de faire avec le noeud passé, en assemblant son résultat.Après cela est fait, il vérifie seulement $ajax == TRUE
dans les données POST. Si c'est le cas, il sait que le résultat est destiné à une requête AJAX, il peut donc afficher le résultat sous forme de JSON. Si ce n'est pas le cas, il sait qu'un cycle de pleine page est en cours, et peut ajuster sa sortie en conséquence (par exemple reconstruire un formulaire, régénérer une page entière, peu importe ...). De cette façon, vous n'avez pas besoin d'enregistrer des URL séparées pour vos rappels non AJAX/AJAX.
Pouvez-vous expliquer pourquoi vous pensez que la deuxième méthode serait toujours meilleure? – marcvangend
Je pensais que ce serait un "petit" meilleur car il n'expose pas les paramètres dans l'URL. Maintenant, je vois comment les deux façons sont utiles. – Wade