php - ejemplo - guzzlehttp client example
Clientes PHP REST (8)
ejemplo simple en php para el cliente en reposo - la actualización se da a continuación:
<?php
$url ="http://example.com";
$data = "The updated text message";
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); //for updating we have to use PUT method.
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
?>
ejemplo simple en php para el cliente de reposo - la eliminación de categoryid = xx se da a continuación:
<?php
$url ="http://example.com/categoryid=xx";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
?>
Estoy intentando conectarme a un servicio web RESTful, pero estoy teniendo algunos problemas, especialmente cuando envío datos a través de PUT y DELETE. Con cURL, PUT requiere un archivo para enviar, y DELETE es simplemente extraño. Soy perfectamente capaz de escribir un cliente utilizando el soporte de socket de PHP y escribiendo los encabezados HTTP, pero quería saber si alguna vez han usado o visto un cliente REST para PHP.
Al resucitar el tema, encontré que esta biblioteca https://github.com/Respect/Rest/ es muy fácil de usar, pero hay pocos ejemplos en la web:
require_once ''bootstrap.php'';
require_once ''Respect/Rest/Router.php'';
require_once ''Respect/Rest/Request.php'';
use Respect/Rest/Router;
$router->post(''/myApp/'', function() {
$data_back = json_decode(file_get_contents(''php://input''));
// var_dump($data_back);
return json_encode($data_back);
});
$router->get(''/myApp/*'', function($id = null) {
$json = json_encode(MyService::getInstance()->list());
return utf8_encode($json);
});
$router->put(''/myApp/*'', function($id = null) {
return ''Update: '' . $id;
});
$router->delete(''/myApp/*'', function($id = null) {
return ''Delete: '' . $id;
});
Como resultado, Zend_Rest_Client no es un cliente REST en absoluto, no admite los métodos PUT y DELETE, por ejemplo. Después de intentar convertirlo en un trabajo con un servicio RESTful real, me cansé y escribí un cliente REST apropiado para PHP:
http://github.com/educoder/pest
Aún faltan algunas cosas, pero si se detecta, pondré más trabajo en ello.
Aquí hay un ejemplo de uso con el servicio REST de OpenStreetMap:
<?php
/**
* This PestXML usage example pulls data from the OpenStreetMap API.
* (see http://wiki.openstreetmap.org/wiki/API_v0.6)
**/
require_once ''PestXML.php'';
$pest = new PestXML(''http://api.openstreetmap.org/api/0.6'');
// Retrieve map data for the University of Toronto campus
$map = $pest->get(''/map?bbox=-79.39997,43.65827,-79.39344,43.66903'');
// Print all of the street names in the map
$streets = $map->xpath(''//way/tag[@k="name"]'');
foreach ($streets as $s) {
echo $s[''v''] . "/n";
}
?>
Actualmente utiliza curl pero puedo cambiarlo a HTTP_Request o HTTP_Request2 en la línea.
Actualización: Parece que algunas personas han saltado en esto. Pest ahora tiene soporte para autenticación HTTP y un montón de otras características gracias a los colaboradores de GitHub.
Escribí un cliente PHP PHP llamado Guzzle. Guzzle es un cliente y marco HTTP para construir clientes de servicios web REST. Puede encontrar más información sobre Guzzle en su website o ir directamente a la fuente en github: https://github.com/guzzle/guzzle
Guzzle proporciona golosinas que proporcionan la mayoría de los clientes HTTP (una interfaz más simple, todos los métodos HTTP y ver la solicitud / respuesta), pero también ofrece otras características avanzadas:
- transmisión de cuerpos de entidad
- retroceso exponencial
- un proxy de caché incorporado incorporado
- galletas
- explotación florestal
- conexiones persistentes administradas
- solicitudes paralelas
- OAuth
- una arquitectura de complemento que le permite implementar esquemas de autenticación arbitrarios
- Autogeneración de una API de cliente a partir de un archivo de descripción de servicio JSON
El único inconveniente: Requiere PHP 5.3.3
He tenido un buen éxito con Zend Rest Client
No pude encontrar una solución elegante durante mucho tiempo, no me gustaron las implementaciones de cURL, se me ocurrió la mía. Es compatible con autenticación HTTP, redirecciones, PUT, etc. porque depende del módulo http de pecl.
La implementación es agradable y simple, fácil de extender.
Más información se puede encontrar aquí:
Tiendo a usar el soporte de cURL incorporado de PHP. La opción CURLOPT_CUSTOMREQUEST
permite hacer PUT
/ DELETE
etc.
Una reciente llegada es Zend/Http/Client , parte de Zend Framework 2.
Instalable a través de compositor (aunque, a partir de este escrito, no a través de Packagist, todavía necesita usar el repositorio de paquetes personalizado de Zend http://packages.zendframework.com/ ).