Il y a deux côtés à ce conte, le premier est comment produire des demandes légitimes de REPOS, et la seconde est comment manipuler les réponses correctement.
Quand elle vient à produire de la demande, vous avez trois options principales. D'abord, vous pouvez produire de la demande manuellement, en utilisant l'en-tête de PHP fonctionne. Ceci vous donne la flexibilité complète en produisant de la demande, mais comporte la plupart de codage. En second lieu, vous pouvez employer une de fonctions intégrées de la demande de PHP telles que le file_get_contents() ou file()/fopen(), fread(), et fclose(). Avec cette méthode, beaucoup d'information détaillée est manipulé automatiquement par PHP, et vous recevez la même réponse. En conclusion, vous pouvez employer une classe faite sur commande conçue pour être employé avec l'api en question. Généralement ces classes n'exigent rien davantage que la liste de paramètre, et renverront les résultats sous forme d'objet fait sur commande ou les rendront accessibles par une classe.
Produire des demandes est manuellement seulement rusé la première fois, après ce, code-réutilise et coup-de-pied de modularité dedans. Conceptuellement la fonction qui produira de la demande est assez fondamentale. D'abord, tous les paramètres de demande sont préparés pour assurer la transmission appropriée. Après, le URL pour le point final est produit, puis analysé et cassé vers le haut en ses éléments. En conclusion, la demande elle-même est envoyée à l'aide des douilles :
functioncallapi($endpoint, #,
#, #, #)
{
$action = urlencode($action) ;
$type = urlencode($type) ;
$keyword = urlencode($keyword) ;
|
|
Trois des paramètres passés sont URL codés. C'est nécessaire pour les assurer sont passés correctement au-dessus du URL. Dans l'exemple précédent, une recherche d'"modèle" a été exécutée ; si la recherche avait à la place été "livre de modèle," l'espace aurait exigé le codage, ayant pour résultat style%20book. J'ai négligé coder les variables de devkey, espérant que l'autorité de publication a pris comment elle serait employée dans la considération en les créant.
$url =
$endpoint."?devkey=$devkey&action=$action&type=$type&keyword=$keyword"
;
$url_info = parse_url($url) ;
$host = # '] ;
$path = # ']. "?" question‘de.$url_info[ '] ;
$data = "" ;
Ici le URL lui-même est produit, y compris les paramètres maintenant URL-CODÉS. Le URL doit être deconstructed vers le bas à ses éléments pour l'usage dans le raccordement cru de douille.
#, 80) ;
fputs($fp, "POTEAU". "HTTP/1.1\r\n de $path") ;
fputs($fp, "centre serveur : ". #
") ;
fputs($fp, "acceptent : */* \r\n") ;
fputs($fp, "Accept-Charset:ISO-8859-1, utf-8;q=0.7,
*;q=0.7\r\n") ;
fputs($fp, "Connection:close\r\n") ;
fputs($fp,
"Content-Type:application/x-www-form-urlencoded\r\n") ;
fputs($fp, "Contenu-Longueur : ".strlen($data).
"\r\n\r\n") ;
fputs($fp, "# ") ;
Ici l'information produite par code précédent est finalement envoyée. La première ligne de fputs() envoie le chemin au document demandé, et la deuxième ligne indique le centre serveur désiré.
# = "" ;
while(!feof($fp))
{
#, 128) ;
}
fclose($fp) ;
list($http_headers, $http_content)=explode("\r\n\r\n",
#) ;
retour # ;
}
En conclusion, la réponse est recherchée et la teneur de la réponse est retournée. Vous apprenez comment manipuler des réponses dans les sections traitant ce côté des choses sous peu.
Utilisant les fonctions intégrées du dossier de PHP, le même processus peut être complété beaucoup moins de code (bien que vous avez moins de flexibilité). Conceptuellement cette fonction fonctionne les mêmes que la précédente, à moins que tous les appels de douille de dossier soient remplacés avec un appel au file_get_contents() :
functioncallapiquick($endpoint, #,
#, #, #)
{
$action = urlencode($action) ;
$type = urlencode($type) ;
$keyword = urlencode($keyword) ;
$url =
$endpoint."?devkey=$devkey&action=$action&type=$type&keyword=$keyword"
;
$response = @file_get_contents($url) ;
retour # ;
}
Il n'y a pas vraiment beaucoup à expliquer avec cet exemple. Le codage de URL a été discuté précédemment, et l'appel simple de file_get_contents() manipule toute la magie. L'esperluète devant l'appel de fonction est employée pour supprimer tous les avertissements qui peuvent résulter d'un dossier ou d'un URL inexistant, parce que ceux-ci devraient être manipulés par la fonction appelante (file_get_contents() renverront faux dans ces exemples). Dans les environnements pre-PHP5 vous devrez employer le fopen() au lieu du file_get_contents(). De la flexibilité est perdue avec ce type de demande, parce que vous pouvez plus ne placer les en-têtes faits sur commande ou les en-têtes facultatifs, qui peuvent être exigés ou très souhaitable selon l'api avec lequel vous agissez l'un sur l'autre.
Pendant que la popularité de l'enchaînement entretient les augmentations, ainsi veulent la prédominance des classes de prebuilt pour manipuler le travail sale d'agir l'un sur l'autre réellement avec le serveur. Si le service que vous voulez agir l'un sur l'autre avec a une classe disponible, il est certainement intéressant regarder dans. L'accès de la classe naturellement dépendra de la classe elle-même. Il devrait venir avec la suffisamment de documentation, et l'accès ne différera pas probablement trop des exemples plus tôt — juste avec peu plus de vérification des erreurs (vous espoir). Quelque chose maintenir dans l'esprit est que beaucoup de modules de prebuilt sont développés et maintenus par les tiers, et comme tels vous pourraient devoir attendre un moment après que de nouveaux dispositifs soient libérés sur l'api pour qu'ils deviennent disponibles avec votre classe.
Comment vous traitez la réponse dépend de quelle méthode de vous envoyer à la demande choisissez. Si vous produisiez de la demande ou manuellement ou à l'aide d'une des fonctions intégrées de PHP (comme le file_get_contents()) vous devrez également manipuler manuellement la réponse. Si vous utilisiez un tiers module, il aura sa propre interface pour rechercher des résultats.
La réponse a fourni par le serveur devrait être un document de XML ; heureusement, il a été conçu pour être facile analyser XML. Malheureusement, n'importe comment elle a été conçue, manuellement l'analyse de n'importe quoi n'est pas habituellement beaucoup d'amusement. PHP5 vient avec SimpleXML, qui fait manipuler des documents de XML une brise. Les utilisateurs PHP4 n'ont pas SimpleXML ; cependant, quelques tiers modules comme MiniXML sont disponibles qu'exécutiez les fonctions semblables.
Une fois que vous avez reçu la réponse, le collage d'elle dans un objet de SimpleXML devrait être une brise. En utilisant l'exemple de bibliothèque et la fonction précédents de demande, vous finissez vers le haut avec quelque chose comme ceci :
# =
callAPIQuick('http://library.example.com/api.php ', '123', 'recherche
',
'livre ',‘modèle ') ;
if($response)
{
$xml = simplexml_load_string($response) ;
print_r($xml) ;
}else
{
écho "alimentation de chargement des erreurs" ;
}
Ici, la réponse n'est pas fausse (et par conséquent quelque chose, vraisemblablement le XML que vous espériez pour, avez été retourné). Notez que cette prétention est généralement joli valide. Quand un serveur fournissant un api rencontre une erreur, il devrait fournir l'erreur dans un format gentil de XML. La fonction de simplexml_load_string() prend la réponse et la transforme en objet de XML qui peut être directement consulté, réitéré à travers, et ainsi de suite. En conclusion, la fonction de print_r() a comme conséquence un résultat facile à utiliser montrant le contenu de l'objet, montré ici :
Objet De SimpleXMLElement
(
[ Demande ] = > Objet De SimpleXMLElement
(
[ RequestId ] = > 123a456
[ Paramètres ] = > Objet De SimpleXMLElement
(
[ Argument ] = > Rangée
(
[ 0 ] = > Objet De SimpleXMLElement
(
)
[ 1 ] = > Objet De SimpleXMLElement
(
)
[ 2 ] = > Objet De SimpleXMLElement
(
)
[ 3 ] = > Objet De SimpleXMLElement
(
)
)
)
)
[ Réponse ] = > Objet De SimpleXMLElement
(
[ ResultCount ] = > 2
[ Article ] = > Rangée
(
[ 0 ] = > Objet De SimpleXMLElement
(
[ Titre ] = > Livre Vol. 1 De Modèle
[ Statut ] = > Dehors
[ prises ] = > 3
[ CopiesOnHand ] = > 2
[ Auteur ] = > Daine De Jon
)
[ 1 ] = > Objet De SimpleXMLElement
(
[ Titre ] = > Livre Vol. 2 De Modèle
[ Statut ] = > Dedans
[ prises ] = > 0
[ CopiesOnHand ] = > 1
[ Auteur ] = > Daine De Jon
)
)
)
)
Regardant ce rendement, les choses d'un couple devraient être immédiatement évidentes :
SimpleXML fait beaucoup de choses vraiment utiles pour vous très rapidement.
Les objets résultants ne montrent pas des attributs (voyez la liste d'argument sous des paramètres). Les données sont dedans là, il juste ne sont pas montrées avec un print_r().
Les rangées commencent à compter à 0 (juste comme partout autrement dans PHP, il est juste quelque chose maintenir dans l'esprit).
La rangée d'article est prier juste à manipuler avec une boucle de foreach().
Soutenant toute cette information à l'esprit, un couple des lignes rapides du code est tout ce qui est exigé pour explorer le contenu plus entièrement.
écho "que vous avez recherché : {# request->parameters->argument[3]->value}<br>> ";Ici le compte de question et de résultat de recherche est présenté, et alors les résultats eux-mêmes sont réitérés à travers. La syntaxe obtient peu un étrange quand traiter des rangées (comme démontré quand la question de recherche est imprimée), ainsi lui est souvent sensible pour réitérer par elles pour la clarté.
Le REPOS est une méthode efficace de questionner APIs à distance quand il est permis que la partie de demande de votre transaction ait lieu dans l'espace libre. Créer des questions de REPOS est aussi facile qu'URL-CODANT les paramètres exigés et indiquer un point final pour l'appel. Traiter des réponses de REPOS peut être plus rusé ; cependant, en accroissant les outils aiment SimpleXML, il aussi peuvent être accomplis rapidement.
Online: 546 users browsing the articles directory
|
|