2011-01-28 4 views
0

Je construis une API, et je suis à la croisée des chemins pour la mettre en œuvre. Je prévois d'utiliser json, car ils peuvent représenter des objets/tableaux si facilement en php et javascript.

J'ai deux façons de la mettre en œuvre à peu près:

1) comprennent l'appel de méthode dans le JSON

$input = $_REQUEST['i']; 
$i_obj = json_decode($input); 
api_handle($i_obj); 

2) Appuyez sur l'appel de méthode (et peut-être d'autres variables, telles que la session) en parallèle, et tirez simplement les données via $ _REQUEST.

$method = $_REQUEST['m']; 
$argv = json_decode($_REQUEST['argv']); 
api_handle($method,$argv); 

Je vois que dans le second cas, il peut y avoir moins pour le json_decode de débogage, mais d'un utilisateur le point convivial de vue, un codeur ajax/js pourrait simplement construire l'objet et l'envoyer json_encoded via entrée "i".

Ma question à la fin est, sont soit de ces bons moyens de mettre en œuvre ceci, ou y a-t-il peut-être un moyen encore meilleur? S'il vous plaît garder à l'esprit, c'est un exemple simple, et ne représente pas le reste de la portée du projet pour cette API.

+1

À moins que votre API ne soit indéterminée d'où provient sa contribution (ce qu'elle devrait être), n'utilisez pas $ _REQUEST'. Les valeurs de '$ _COOKIE' sont également stockées ici. –

+0

Je comprends que l'utilisation de $ _COOKIE pourrait entraîner des problèmes étranges lors de l'utilisation de plusieurs sites sur le même domaine, mais il est importiant de le mentionner, merci. A part ça, quel est l'inconvénient de ne pas savoir d'où proviennent les données? Ou pensez-vous à des clés/hachages/cryptages spécifiques pour représenter différentes sources? Il est trop facile d'usurper ce genre si les choses. – josefnpat

+0

(Par ces choses, je veux dire s'appuyer sur des referers ou autres) – josefnpat

Répondre

1

Dans ce cas particulier, il est préférable de coupler toutes les données d'appel de méthode dans un objet plutôt que de l'obtenir de $_REQUEST par clé car $_REQUEST contient également d'autres données non liées au même niveau.
Le nom de la méthode et ses arguments sont liés et doivent être transférés en tant que paquet unique. Peut-être qu'un jour vous déciderez d'ajouter la capacité d'appeler des méthodes statiques de classe. Il sera beaucoup plus difficile d'ajouter une clé supplémentaire à $_REQUEST et son traitement ajoutera alors un champ de plus à l'objet car l'objet est beaucoup plus encapsulé et cela rétrécira la zone affectée par les changements de votre code.
Et bien sûr vous pouvez nommer les champs d'objet par un caprice sans penser que cette clé est déjà prise en $_REQUEST par un autre script.

Questions connexes