PHP WebServices
Clase 1
Mauro Chojrin - mauro.chojrin@leewayweb.com
Qué es un WebService
Mauro Chojrin - mauro.chojrin@leewayweb.com
Para qué sirve
Mauro Chojrin - mauro.chojrin@leewayweb.com
Ventajas y desventajas
Mauro Chojrin - mauro.chojrin@leewayweb.com
XML-RPC
Mauro Chojrin - mauro.chojrin@leewayweb.com
SOAP
Mauro Chojrin - mauro.chojrin@leewayweb.com
REST
Mauro Chojrin - mauro.chojrin@leewayweb.com
Elementos principales
Mauro Chojrin - mauro.chojrin@leewayweb.com
XML
Mauro Chojrin - mauro.chojrin@leewayweb.com
Tipos de WebService
Mauro Chojrin - mauro.chojrin@leewayweb.com
XML y PHP
Mauro Chojrin - mauro.chojrin@leewayweb.com
SimpleXML
Mauro Chojrin - mauro.chojrin@leewayweb.com
Navegación
<?php
//cargar un archivo XML
$lib = new simpleXMLElement( “libreria.xml”, NULL, true );
foreach ( $lib->libro as $libro){
echo $libro['isbn'] . "<br>\n";
echo $libro->titulo . "<br>\n";
echo $libro->autor . "<br>\n";
echo $libro->editorial . "<br>\n";
echo "<hr>";
}
Mauro Chojrin - mauro.chojrin@leewayweb.com
Navegación
Mauro Chojrin - mauro.chojrin@leewayweb.com
XPath
<?php
$lib = new simpleXMLElement( "libreria.xml", NULL, true );
$resultado = $lib->xpath( "/librería/libro/titulo" );
foreach( $resultado as $titulo ) {
echo $titulo . "<br>\n";
}
$resultado = $lib->libro[0]->xpath( "titulo" );
foreach( $resultado as $titulo ) {
echo $titulo . "<br>\n";
}
Mauro Chojrin - mauro.chojrin@leewayweb.com
Modificación
<?php
$lib = new simpleXMLElement( "libreria.xml", NULL, true );
$libro = $lib->addChild('libro');
$libro->addAttribute('isbn', '08128439284');
$libro-> addChild ('titulo', 'La guerra y la paz');
$libro-> addChild ('autor', 'Tolstoi');
$libro-> addChild ('editorial', 'La Flor');
Mauro Chojrin - mauro.chojrin@leewayweb.com
Salida
Mauro Chojrin - mauro.chojrin@leewayweb.com
DOM
Mauro Chojrin - mauro.chojrin@leewayweb.com
Herramientas
Mauro Chojrin - mauro.chojrin@leewayweb.com
Aplicaciones SOA
Mauro Chojrin - mauro.chojrin@leewayweb.com
WebServices en PHP
Mauro Chojrin - mauro.chojrin@leewayweb.com
Ejemplos de APIs
Mauro Chojrin - mauro.chojrin@leewayweb.com
PHP WebServices
Clase 2
Mauro Chojrin - mauro.chojrin@leewayweb.com
RSS
Mauro Chojrin - mauro.chojrin@leewayweb.com
Para qué sirve
Mauro Chojrin - mauro.chojrin@leewayweb.com
Ejemplo: noticias de Clarín (SimpleXML)
<?php
$doc = simplexml_load_file( "http://www.clarin.com/rss/lo-ultimo/" );
$channel = $doc->channel;
foreach($channel as $chnl)
{
//busco el elemento item
$item = $chnl->item;
foreach($item as $itemgotten) {
echo $itemgotten->description;
}
}
Mauro Chojrin - mauro.chojrin@leewayweb.com
Ejemplo: noticias de Clarín (DOM)
<?php
$doc = new DOMDocument();
$doc->load("http://www.clarin.com/rss/lo-ultimo/");
$channel = $doc->getElementsByTagName("channel");
foreach($channel as $chnl)
{
$item = $chnl->getElementsByTagName("item");
foreach($item as $itemgotten)
{
$describe = $itemgotten->getElementsByTagName("description");
$description = $describe->item(0)->nodeValue;
echo $description;
}
}
Mauro Chojrin - mauro.chojrin@leewayweb.com
ATOM
Mauro Chojrin - mauro.chojrin@leewayweb.com
Ejemplo de ATOM:
Mauro Chojrin - mauro.chojrin@leewayweb.com
Creación de un feed
<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="2.0">
<channel>
<title>El nombre de nuestro feed RSS</title>
<link>Dirección web en la que se encuentre nuestro RSS</link>
<description>Contenido que vas a ofrecer a los usuarios que lean el RSS</description>
<item>
<title>Título del artículo del RSS</title>
<link>Dirección Web a la que podemos ir para ampliar esta información</link>
<description>Contenido de esta información</description>
</item>
</channel>
</rss>
Mauro Chojrin - mauro.chojrin@leewayweb.com
Recursos RSS con PHP
Mauro Chojrin - mauro.chojrin@leewayweb.com
PHP WebServices
Clase 3
Mauro Chojrin - mauro.chojrin@leewayweb.com
SOAP
Mauro Chojrin - mauro.chojrin@leewayweb.com
WSDL
Mauro Chojrin - mauro.chojrin@leewayweb.com
WSDL - Elementos
Mauro Chojrin - mauro.chojrin@leewayweb.com
SOAP con PHP
Mauro Chojrin - mauro.chojrin@leewayweb.com
SOAP con PHP - SOAPServer
Mauro Chojrin - mauro.chojrin@leewayweb.com
SOAP con PHP - SOAPServer
<?php
class MySoapServer
{
function sumar($a, $b) {
return ($a + $b);
}
}
$server = new SoapServer("sumar.wsdl");
$server->setClass('MySoapServer');
$server->handle();
Mauro Chojrin - mauro.chojrin@leewayweb.com
SOAP con PHP - SOAPClient
Mauro Chojrin - mauro.chojrin@leewayweb.com
SOAP con PHP - SOAPClient
<?php
try
{
$client = new SoapClient(“http://localhost/ws/server.php?wsdl”);
$result = $client->sumar(5, 3);
}
catch( SoapFault $e )
{
echo $e->getMessage();
}
Mauro Chojrin - mauro.chojrin@leewayweb.com
SOAP con PHP - Modo no-WSDL
Mauro Chojrin - mauro.chojrin@leewayweb.com
SOAP con PHP - Modo no-WSDL
<?php
$options = array(
'location' => http://localhost/ws/server.php' ,
'uri' => ' http://localhost/ws/'
);
$client = new SoapClient(NULL, $options);
echo $client->imprimir();
echo "<hr>";
echo $client->suma(5,6);
Mauro Chojrin - mauro.chojrin@leewayweb.com
JSON
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"ID": "SGML",
"GlossSeeAlso": ["GML", "XML"]
},
}
}
}
}
Mauro Chojrin - mauro.chojrin@leewayweb.com
JSON con PHP
Mauro Chojrin - mauro.chojrin@leewayweb.com
PHP WebServices
Clase 4
Mauro Chojrin - mauro.chojrin@leewayweb.com
REST
Mauro Chojrin - mauro.chojrin@leewayweb.com
REST vs. SOAP
Mauro Chojrin - mauro.chojrin@leewayweb.com
Para qué sirve
Mauro Chojrin - mauro.chojrin@leewayweb.com
Verbos HTTP
Mauro Chojrin - mauro.chojrin@leewayweb.com
REST con PHP
Mauro Chojrin - mauro.chojrin@leewayweb.com
Ejemplo - Servidor PHP
<?php
$method = $_SERVER['REQUEST_METHOD'];
$resource = $_SERVER['REQUEST_URI'];
switch ($method) {
case 'GET':
// código para método GET
break;
case 'POST':
$arguments = $_POST;
// código para método POST
break;
case 'PUT':
parse_str(file_get_contents('php://input'), $arguments);
// código para método PUT
break;
case 'DELETE':
// código para método DELETE
break;
}
echo json_encode($response,true);
Mauro Chojrin - mauro.chojrin@leewayweb.com
Ejemplo - Cliente AJAX
$.ajax({
url: 'http://servidor.com/recurso', // url del recurso
type: "get", // podría ser get, post, put o delete.
data: {}, // datos a pasar al servidor, en caso de necesitarlo
success: function (r) {
// aquí trataríamos la respuesta del servidor
}
failure: function (r) {
// aquí trataríamos la respuesta del servidor
}
});
Mauro Chojrin - mauro.chojrin@leewayweb.com
JSON
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"ID": "SGML",
"GlossSeeAlso": ["GML", "XML"]
},
}
}
}
}
Mauro Chojrin - mauro.chojrin@leewayweb.com