Hay dos lados a este cuento, el primer es cómo generar peticiones legítimas del RESTO, y el segundo es cómo manejar las respuestas correctamente.
Cuando viene a generar la petición, usted tiene tres opciones principales. Primero, usted puede generar la petición manualmente, usando el jefe de PHP funciona. Esto le da flexibilidad completa en la generación de la petición, pero implica la mayoría de la codificación. En segundo lugar, usted puede utilizar una de las funciones incorporadas de la petición de PHP tales como file_get_contents() o file()/fopen(), fread(), y fclose(). Con este método, los muchos de la información detallada son manejados automáticamente por PHP, y usted recibe la misma respuesta. Finalmente, usted puede utilizar una clase de encargo diseñada para ser utilizado con el API en la pregunta. Estas clases no requieren generalmente nada más que la lista del parámetro, y volverán los resultados en la forma de un objeto de encargo o los harán accesibles a través de una clase.
La generación de peticiones es manualmente solamente difícil la primera vez, después de ese, co'digo-reutiliza y de retroceso de la modularidad adentro. La función que generará la petición es conceptual bastante básica. Primero, todos los parámetros de la petición están preparados para asegurar la transmisión apropiada. Después, el URL para la punto final se genera, después se analiza y está roto para arriba en sus piezas. Finalmente, se envía la petición sí mismo usando los zócalos:
functioncallapi($endpoint, #,
#, #, #)
{
$action = urlencode($action);
$type = urlencode($type);
$keyword = urlencode($keyword);
|
|
Tres de los parámetros pasados son URL codificados. Esto es necesario asegurarlos se pasa correctamente sobre el URL. En el ejemplo anterior, una búsqueda para el "estilo" fue realizada; si la búsqueda en lugar de otro hubiera sido "libro del estilo," el espacio habría requerido la codificación, dando por resultado style%20book. He descuidado la codificación de las variables del devkey, confiando en que la autoridad que publicaba tomó cómo sería utilizada en la consideración al crearlas.
$url =
$endpoint."?devkey=$devkey&action=$action&type=$type&keyword=$keyword";
$url_info = parse_url($url);
$host = # ' ];
$path = # ' ]. "?" pregunta‘de.$url_info[ ' ];
$data = "";
Aquí el URL sí mismo se genera, incluyendo los parámetros ahora URL-CODIFICADOS. El URL necesita ser deconstructed abajo a sus piezas para el uso en la conexión cruda del zócalo.
#, 80);
fputs($fp, "POSTE". "HTTP/1.1\r\n de $path");
fputs($fp, "anfitrión: ". #
");
fputs($fp, "aceptan: */* \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, "Contenido-Longitud: ".strlen($data).
"\r\n\r\n");
fputs($fp, "# ");
Aquí la información generada por código anterior finalmente se envía. La primera línea del fputs() envía la trayectoria al documento solicitado, y la segunda línea especifica el anfitrión deseado.
# = "";
while(!feof($fp))
{
#, 128);
}
fclose($fp);
list($http_headers, $http_content)=explode("\r\n\r\n",
#);
vuelta #;
}
Finalmente, se recupera la respuesta y el contenido de la respuesta se vuelve. Usted aprende cómo manejar respuestas en las secciones que se ocupan de ese lado de cosas pronto.
Utilizando las funciones incorporadas del archivo de PHP, el mismo proceso se puede terminar con mucho menos código (aunque usted tiene menos flexibilidad). Esta función trabaja conceptual igual que la anterior, a menos que todas las llamadas del zócalo del archivo se substituyan por una llamada al 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);
vuelta #;
}
Realmente no hay mucho a explicar con este ejemplo. La codificación del URL fue discutida previamente, y la sola llamada del file_get_contents() maneja toda la magia. El signo "&" delante de la llamada de función se utiliza para suprimir cualquier advertencia que pueda presentarse de un archivo o de un URL no existente, porque éstos se deben dirigir por la función que llama (file_get_contents() volverán falso en estos casos). En los ambientes pre-PHP5 usted necesitará utilizar el fopen() en vez de file_get_contents(). Una cierta flexibilidad se pierde con este tipo de la petición, porque usted puede fijar no más de largo los jefes de encargo o los jefes opcionales, que se pueden requerir o muy deseable dependiendo del API con el cual usted está obrando recíprocamente.
Mientras que el renombre de la tela mantiene los aumentos, así que quieren el predominio de las clases del prebuilt para manejar el trabajo sucio realmente de obrar recíprocamente con el servidor. Si el servicio que usted desea obrar recíprocamente con tiene una clase disponible, él está definitivamente digno de mirar en. Tener acceso a la clase por supuesto será dependiente en la clase sí mismo. Debe venir con la suficiente documentación, y el acceso no diferenciará probablemente demasiado de los ejemplos anteriores — apenas con un poco más repaso de las faltas (usted esperanza). Algo tener presente es que muchos módulos del prebuilt son desarrollados y mantenidos por los terceros, y como tales usted pudieron tener que esperar un rato después de que las nuevas características se lancen en el API para que lleguen a estar disponibles con su clase.
Cómo usted se ocupa de la respuesta depende de qué método de enviarle la petición elija. Si usted generó la petición o manualmente o con la ayuda de una de las funciones incorporadas de PHP (como file_get_contents()) usted también necesitará manejar manualmente la respuesta. Si usted utilizó un módulo de tercera persona, tendrá su propio interfaz para recuperar resultados.
La respuesta proporcionada por el servidor debe ser un documento de XML; afortunadamente, XML fue diseñado para ser fácil de analizar. Desafortunadamente, no importa cómo fue diseñado, manualmente el análisis cualquier cosa no es generalmente muchos de diversión. PHP5 viene con SimpleXML, que hace la manipulación de documentos de XML una brisa. Los usuarios PHP4 no tienen SimpleXML; sin embargo, algunos módulos de tercera persona como MiniXML están disponibles que realice las funciones similares.
Una vez que usted haya recibido la respuesta, pegarla en un objeto de SimpleXML debe ser una brisa. Usando el ejemplo de la biblioteca y la función anteriores de la petición, usted termina para arriba con algo como esto:
# =
callAPIQuick('http://library.example.com/api.php ', ' 123', '
búsqueda ',
' libro ',‘estilo ');
if($response)
{
$xml = simplexml_load_string($response);
print_r($xml);
}else
{
eco "alimentación del cargamento del error";
}
Aquí, la respuesta no es falsa (y por lo tanto algo, probablemente el XML que usted esperaba, fue vuelto). Observe que esta asunción es generalmente válida bonito. Cuando un servidor que proporciona un API encuentra un error, debe proporcionar el error en un formato agradable de XML. La función del simplexml_load_string() toma la respuesta y le da vuelta en un objeto de XML que se pueda alcanzar directamente, iterado a través, etcétera. Finalmente, la función del print_r() da lugar a una salida de uso fácil que demuestra el contenido del objeto, demostrado aquí:
Objeto De SimpleXMLElement
(
[ Petición ] = > Objeto De SimpleXMLElement
(
[ RequestId ] = > 123a456
[ Parámetros ] = > Objeto De SimpleXMLElement
(
[ Discusión ] = > Arsenal
(
[ 0 ] = > Objeto De SimpleXMLElement
(
)
[ 1 ] = > Objeto De SimpleXMLElement
(
)
[ 2 ] = > Objeto De SimpleXMLElement
(
)
[ 3 ] = > Objeto De SimpleXMLElement
(
)
)
)
)
[ Respuesta ] = > Objeto De SimpleXMLElement
(
[ ResultCount ] = > 2
[ Artículo ] = > Arsenal
(
[ 0 ] = > Objeto De SimpleXMLElement
(
[ Título ] = > Libro Vol. 1 Del Estilo
[ Estado ] = > Hacia fuera
[ asimientos ] = > 3
[ CopiesOnHand ] = > 2
[ Autor ] = > Gama De Jon
)
[ 1 ] = > Objeto De SimpleXMLElement
(
[ Título ] = > Libro Vol. 2 Del Estilo
[ Estado ] = > Adentro
[ asimientos ] = > 0
[ CopiesOnHand ] = > 1
[ Autor ] = > Gama De Jon
)
)
)
)
Mirando esa salida, las cosas de un par deben ser inmediatamente obvias:
SimpleXML hace muchos de las cosas realmente útiles para usted muy rápidamente.
Los objetos resultantes no exhiben cualidades (véase la lista de la discusión bajo parámetros). Los datos están adentro allí, él apenas no se demuestran con un print_r().
Los órdenes comienzan a contar en 0 (apenas como por todas partes en PHP, es justo algo tener presente).
El arsenal del artículo es petición justo que se dirigirá con un lazo del foreach().
Llevando toda esa información en mente, un par de líneas rápidas del código es todo que se requiere para explorar el contenido más completamente.
eco "que usted buscó para: {# request->parameters->argument[3]->value}<br>> ";Aquí se presenta la cuenta de la pregunta y del resultado de la búsqueda, y entonces los resultados ellos mismos se iteran a través. El sintaxis consigue un poco extraño cuando el tratar de órdenes (según lo demostrado cuando se imprime la pregunta de la búsqueda), así que de él es a menudo sensible iterar con él para la claridad.
El RESTO es un método eficaz de preguntar APIs alejado cuando es permitido que la porción de la petición de su transacción ocurra en el claro. Crear preguntas del RESTO es tan fácil como URL-CODIFICANDO los parámetros requeridos y especificar una punto final para la llamada. El ocuparse de respuestas del RESTO puede ser un poco más difícil; sin embargo, por las herramientas leveraging tenga gusto de SimpleXML, él puede ser terminado también rápidamente.
Online: 541 users browsing the articles directory
|
|