<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Cronicas de un geek &#187; Php</title>
	<atom:link href="/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>https://cronicasgeek.com</link>
	<description>Programación y tecnología</description>
	<lastBuildDate>Sun, 31 May 2015 23:33:31 +0000</lastBuildDate>
	<language>es-ES</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.2</generator>
	<item>
		<title>Rest ful api con slim php &#8211; rutas y mysql</title>
		<link>https://cronicasgeek.com/rest-ful-api-con-slim-php-rutas-y-mysql/</link>
		<comments>https://cronicasgeek.com/rest-ful-api-con-slim-php-rutas-y-mysql/#comments</comments>
		<pubDate>Wed, 30 Jul 2014 19:14:05 +0000</pubDate>
		<dc:creator><![CDATA[Kelvi S. Padilla]]></dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[restful]]></category>
		<category><![CDATA[slim]]></category>

		<guid isPermaLink="false">https://cronicasgeek.com/?p=44</guid>
		<description><![CDATA[<p>En este segundo artículo veremos mas a detalle cómo consumir servicios web a través de REST con slim php. Ya teniendo la instalación completa es necesario comenzar a crear la estructura de rutas y la conexión a la base de datos en caso de ser requerida, como vimos en el artículo anterior, que puedes consultar de...</p>
<p>La entrada <a rel="nofollow" href="/rest-ful-api-con-slim-php-rutas-y-mysql/">Rest ful api con slim php &#8211; rutas y mysql</a> aparece primero en <a rel="nofollow" href="/">Cronicas de un geek</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>En este segundo artículo veremos mas a detalle cómo consumir servicios web a través de REST con <strong>slim</strong> <strong>php</strong>. Ya teniendo la instalación completa es necesario comenzar a crear la estructura de rutas y la conexión a la base de datos en caso de ser requerida, como vimos en el artículo anterior, que puedes consultar de nuevo dando click <a href="/2014/07/como-crear-un-api-rest-con-slim-php-introduccion/">aqui</a>, no es muy difícil iniciar un proyecto con slim, y como te darás cuenta tener una conexión a base de datos y las rutas para realizar consultas tampoco lo será,<span id="more-44"></span> hoy tomaremos como ejemplo el de administrar usuarios a través de consultas HTTP, con los métodos GET, POST, PUT, DELETE descrito de la siguiente manera:</p>
<ul>
<li><b>GET: </b>Utilizaremos 2 consultas get para obtener información de la base de datos sobre los usuarios registrados, la primera para obtener un arreglo de todos los usuarios, y la segunda con un identificador obtendremos un arreglo de datos de un único usuario.</li>
<li><b>POST: </b>Con este método insertaremos usuarios a nuestro sistema o base de datos.</li>
<li><b>PUT: </b>Si tenemos el identificador de un usuario podemos hacer modificaciones a la base de datos, por lo que usaremos este método para poder hacerlo.</li>
<li><b>DELETE: </b>Por último utilizaremos este método para eliminar un usuario con su identificador.</li>
</ul>
<p>Lo primero que necesitamos hacer es crear la base de datos, en este caso la haremos en SQL, asumiendo que sea desde consola, ingresando el siguiente código:</p><pre class="crayon-plain-tag">CREATE DATABASE restslim;
USE restslim;
CREATE TABLE usuarios (
  id int(11) NOT NULL AUTO_INCREMENT,
  username varchar(100) NOT NULL,
  password varchar(100) NOT NULL,
  description text,
  PRIMARY KEY (id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;</pre><p>Una vez creada la base de datos y la tabla usuarios, el segundo paso es preparar la conexión a mysql, en php existen varios métodos para realizarlo como pueden ser funciones mysql (obsoleto desde la versión 5 de php), <strong>mysqli</strong> que recomienda el sitio oficial de php, y por último con un objeto de clases php PDO, aunque las 3 formas son válidas, utilizare la ultima opcion ya que a mi parecer es más fácil de utilizar y el uso de <a href="http://php.net//manual/es/mysqli.quickstart.prepared-statements.php">consulta preparas</a> es muy simple.</p>
<p>Abrimos nuestro archivo index.php que configuramos anteriormente (<a href="/2014/07/como-crear-un-api-rest-con-slim-php-introduccion/">ver de nuevo</a>), de preferencia borramos el código innecesario y dejamos solo lo siguiente:</p><pre class="crayon-plain-tag">require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();</pre><p>En la siguiente linea agregamos la función para poder realizar la conexión a la base de datos:</p><pre class="crayon-plain-tag">/*
 *conexiónon a base de datos
 */
function PDOconnection()
{
	try{
		$connection = new PDO("mysql:host=localhost;Mibase=prueba_slim", "usuario", "password");
		$connection-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	}
	catch(PDOException $error)
	{
		echo "Error PDOconnection: " . $error-&gt;getMessage();
	}
	return $connection;
}</pre><p>Reemplaza el texto “mibase” por tu nombre de base de datos de igual manera el texto “usuario” y la “contraseña” por tu configuracion, y de esta manera ya tendremos la conexión a la base de datos, el siguiente paso es registrar las rutas en el objeto $app creado inicialmente.</p>
<p>En este punto comenzaremos a utilizar los métodos HTTP para obtener la lista de usuarios y los datos de un usuario en específico utilizando su id, en este caso haremos uso del método GET, para registrar una ruta en slim tipo GET, se utiliza el método con el mismo nombre quedando de la siguiente manera:</p><pre class="crayon-plain-tag">$app-&gt;get("/usuarios/", function() use($app)
{
	try{
		$connection = PDOconnection();
		$consulta = $connection-&gt;prepare("SELECT * FROM usuarios");
                $consulta-&gt;execute();
		$usuarios = $consulta-&gt;fetchAll();
		$connection = null;
		$app-&gt;response-&gt;headers-&gt;set("Content-type", "application/json");
		$app-&gt;response-&gt;status(200);
		$app-&gt;response-&gt;body(json_encode($usuarios));
	}
	catch(PDOException $error)
	{
		echo "Error PDOconnection: " . $error-&gt;getMessage();
	}
});</pre><p>En el método se agrega el primer parámetro “nombre de la ruta” y luego se agrega una función o clase a utilizar en este caso utilizamos una función anónima que puede ser declarada como parámetro, como puedes darte cuenta creamos la conexión a la base de datos, y con la sentencia SQL realizamos la consulta de manera rápida, siempre debes de realizar la consulta dentro de un try/catch para evitar errores en ejecución. Por último recogemos los datos y los mostramos en formato json con la función json_encode().</p>
<p>Para obtener los datos de un usuario en especifico solo necesitamos tener el identificador de la base de datos y podremos realizar la consulta, en este caso pasamos el parámetro id a través de la ruta &#8220;/usuario/:id&#8221;, el texto “:id” slim lo reconoce como variable y lo podremos utilizar dentro de la función como se ve a continuación:</p><pre class="crayon-plain-tag">$app-&gt;get("/usuario/:id", function($id) use($app)
{
	try{
		$connection = PDOconnection();
		$consulta = $connection-&gt;prepare("SELECT * FROM usuarios WHERE id = ?");
                $consulta-&gt;bindParam(1, $id);
                $consulta-&gt;execute();
		$usuarios = $consulta-&gt;fetch();
		$connection = null;
		$app-&gt;response-&gt;headers-&gt;set("Content-type", "application/json");
		$app-&gt;response-&gt;status(200);
		$app-&gt;response-&gt;body(json_encode($usuarios));
	}
	catch(PDOException $error)
	{
		echo "Error PDOconnection: " . $error-&gt;getMessage();
	}
});</pre><p>Para utilizar el parámetro ”:id” declarado en la ruta, debemos incluir dentro de la función el parámetro con el mismo nombre. En la sentencia SQL utilizamos el signo ? para referirnos a un parámetro variable que desconocemos, esto se conoce como sentencias preparadas, puedes utilizar este signo para referirte a los parámetros que desees solo debes respetar el orden al ingresarlos, y con el método “bindParam(1, $id)” reemplazamos el signo por la variable.</p>
<p>Para insertar usuarios hacemos uso del método POST que es utilizado para enviar información de manera más discreta, el código a utilizar seria asi:</p><pre class="crayon-plain-tag">$app-&gt;post("/usuarios/", function() use($app)
{
	$usuario = $app-&gt;request-&gt;post("username");
	$password = $app-&gt;request-&gt;post("password");
	$description = $app-&gt;request-&gt;post("description");

	try{
		$connection = PDOconnection();
		$db = $connection-&gt;prepare("INSERT INTO usuarios VALUES(null, ?, ?, ?)");
		$db-&gt;bindParam(1, $usuario);
		$db-&gt;bindParam(2, $password);
		$db-&gt;bindParam(3, $description);
		$db-&gt;execute();
		$lastid = $connection-&gt;lastInsertId();
		$connection = null;
		$app-&gt;response-&gt;headers-&gt;set("Content-type", "application/json");
		$app-&gt;response-&gt;status(200);
		$app-&gt;response-&gt;body(json_encode($lastid));
	}
	catch(PDOException $error)
	{
		echo "Error PDOconnection: " . $error-&gt;getMessage();
	}
});</pre><p>&nbsp;</p>
<p>Como puedes notar, con el método request-&gt;post(“nombre_de_lparametro”) obtenemos el valor de cada variable, y utilizando sentencias preparadas insertamos cada valor en nuestra base de datos, y como respuesta mostramos un 1 en caso de haberse agregado los datos con éxito.</p>
<p>Para actualizar los datos de un usuario existente en la base de datos, solo es necesarios el id, utilizamos el método PUT realizamos las modificaciones, el código necesarios es el siguiente:</p><pre class="crayon-plain-tag">$app-&gt;put("/usuarios/", function() use($app)
{
	$usuario = $app-&gt;request-&gt;put("username");
	$password = $app-&gt;request-&gt;put("password");
	$description = $app-&gt;request-&gt;put("description");
        $id = $app-&gt;request-&gt;put("id");

	try{
		$connection = PDOconnection();
		$db = $connection-&gt;prepare("UPDATE usuarios SET username = ?, password = ?, description = ? WHERE id = ?");
		$db-&gt;bindParam(1, $usuario);
		$db-&gt;bindParam(2, $password);
		$db-&gt;bindParam(3, $description);
		$db-&gt;bindParam(4, $id);
		$db-&gt;execute();
		$connection = null;
		$app-&gt;response-&gt;headers-&gt;set("Content-type", "application/json");
		$app-&gt;response-&gt;status(200);
		$app-&gt;response-&gt;body(json_encode(array("update" =&gt; 1)));
	}
	catch(PDOException $error)
	{
		echo "Error PDOconnection: " . $error-&gt;getMessage();
	}
});</pre><p>El código es similar al método POST la diferencia es básicamente la consulta SQL que ahora es “update” en lugar de “insert”.</p>
<p>Si necesitamos eliminar un usuarios, utilizamos el método DELETE utilizando el id del usuarios para referirnos a él en la base de datos, de igual forma que en el método GET también pasamos el id a través de la url, el codigo quedaria de esta manera:</p><pre class="crayon-plain-tag">$app-&gt;delete("/usuarios/:id", function($id) use($app)
{
	try{
		$connection = PDOconnection();
		$db = $connection-&gt;prepare("DELETE FROM usuarios WHERE id = ?");
		$db-&gt;bindParam(1, $id);
		$db-&gt;execute();
		$connection = null;
		$app-&gt;response-&gt;headers-&gt;set("Content-type", "application/json");
		$app-&gt;response-&gt;status(200);
		$app-&gt;response-&gt;body(json_encode(array("delete" =&gt; 1)));
	}
	catch(PDOException $error)
	{
		echo "Error PDOconnection: " . $error-&gt;getMessage();
	}
});</pre><p>Si todo salio bien, mostramos un 1 como confirmación, y por último agregamos la linea “$app-&gt;run();” para poner a correr la aplicación.</p>
<p>Una vez finalizado la configuración en slim debemos probar si todo esta funcionado correctamente, lo cual explicaré en la próxima entrada para no hacer muy largo el artículo.</p>
<p>La entrada <a rel="nofollow" href="/rest-ful-api-con-slim-php-rutas-y-mysql/">Rest ful api con slim php &#8211; rutas y mysql</a> aparece primero en <a rel="nofollow" href="/">Cronicas de un geek</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://cronicasgeek.com/rest-ful-api-con-slim-php-rutas-y-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo crear un api RESTful con slim php &#8211; introducción</title>
		<link>https://cronicasgeek.com/como-crear-un-api-rest-con-slim-php-introduccion/</link>
		<comments>https://cronicasgeek.com/como-crear-un-api-rest-con-slim-php-introduccion/#comments</comments>
		<pubDate>Thu, 24 Jul 2014 04:28:53 +0000</pubDate>
		<dc:creator><![CDATA[Kelvi S. Padilla]]></dc:creator>
				<category><![CDATA[Destacados]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[restful]]></category>
		<category><![CDATA[slim]]></category>
		<category><![CDATA[web service]]></category>

		<guid isPermaLink="false">https://cronicasgeek.com/?p=37</guid>
		<description><![CDATA[<p>Últimamente se ha vuelto popular consumir servicios web a través de RESTful, según Wikipedia el término se refiere a “una técnica de arquitectura software para sistemas hipermedia distribuidos como la World Wide Web” pero comúnmente se utiliza para interfaces web a través de xml, json y http.  las ventajas de utilizar un servicio RESTful es que...</p>
<p>La entrada <a rel="nofollow" href="/como-crear-un-api-rest-con-slim-php-introduccion/">Cómo crear un api RESTful con slim php &#8211; introducción</a> aparece primero en <a rel="nofollow" href="/">Cronicas de un geek</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Últimamente se ha vuelto popular consumir servicios web a través de <a href="http://en.wikipedia.org/wiki/Representational_state_transfer">RESTful</a>, según Wikipedia el término se refiere a “<i>una técnica de arquitectura software para sistemas </i><a href="http://es.wikipedia.org/wiki/Hipermedia"><i>hipermedia</i></a><i> distribuidos como la </i><a href="http://es.wikipedia.org/wiki/World_Wide_Web"><i>World Wide Web</i></a>” pero comúnmente se utiliza para interfaces web a través de xml, json y http. <span id="more-37"></span></p>
<p>las ventajas de utilizar un servicio RESTful es que podemos utilizar un formato ligero de objetos Javascript llamado <a href="http://en.wikipedia.org/wiki/JSON">JSON</a>, el cual nos permite tener diferentes aplicaciones en distintos lenguajes que pueden interactuar entre sí, gracias a la flexibilidad del protocolo, y con el aumento de aplicaciones móviles es común que las bases de datos y en algunos casos la capacidad de procesamiento la realiza un servidor en la nube y no el teléfono, un ejemplo podría ser el de crear una aplicación en Android para un blog en WordPress, si queremos mostrar una lista de nuestros últimos artículos de manera personalizada, lo ideal sería recoger los datos del servidor y mostrarlos en una lista o en secciones, incluso el plugin jetpack permite el acceso de tu blog a través de su api json sin crearla nosotros lo que lo hace aún mas fácil, mas adelante haré un tutorial de como hacerlo pero por ahora supongamos que no tenemos la api y tenemos que hacerla de forma manual.</p>
<p>Se puede crear un api RESTful en varios lenguajes, en Ruby, PHP o Java por ejemplo, lo que nos da más opciones para escoger, en este caso por flexibilidad y facilidad de uso utilizaremos php y el micro framework <a href="http://slimframework.com"><b>slim</b></a> el cual nos agiliza el tiempo de desarrollo y entre sus ventajas podemos mencionar:</p>
<ol>
<li>Manejo de métodos HTTP estándar y personalizados</li>
<li>Configuración sencilla</li>
<li>Manejo de rutas</li>
<li>Manejo de plantillas para vistas</li>
<li>Es software libre.</li>
</ol>
<h2><i>Métodos HTTP utilizados en RESTful</i></h2>
<p><a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol">HTTP</a> es un protocolo de transferencias usado en Internet, la mayoría de navegadores sólo utilizan los métodos GET y POST para realizar transferencias dejando de lado los otros métodos (para ver todos lo métodos y su explicación da click <a href="http://trevinca.ei.uvigo.es/~txapi/espanol/proyecto/superior/memoria/node46.html">aqui</a> ). CRUD es el acrónimo utilizado para referirse a las funciones de Crear, Obtener, Actualizar y Borrar (<b>C</b>reate, <b>R</b>ead, <b>U</b>pdate, <b>D</b>elete en inglés), es lo que básicamente haremos con <b>slim</b> utilizando los métodos http para hacerlo, la función de cada método es la siguiente:</p>
<ul>
<li>GET: utilizado para obtener información (visibles en la url en el navegador).</li>
<li>POST: utilizado para insertar información.</li>
<li>PUT: utilizado para para actualizar datos.</li>
<li>DELETE: utilizado para eliminar datos.</li>
</ul>
<p>Existen otros métodos en el protocolo http que no usaremos aquí y cabe mencionar que esta es la utilización conocida como RESTful.</p>
<h2><i>Instalación de slim</i></h2>
<p>Primero debes descargar el código, existen dos formas y la más recomendada es por medio de <a href="https://getcomposer.org/">composer</a> lo único que necesitas para hacerlo es agregar en el archivo composer.json.</p><pre class="crayon-plain-tag">{
"require": {
"slim/slim": "2.*"
}
}</pre><p>y ejecutamos <i>php composer.phar install </i>desde la consola (también agregare a la lista un tutorial de composer), y la segunda opción es de manera manual que simplemente bajas la última versión del código que puedes descargar <a href="https://github.com/codeguy/Slim/zipball/master">aquí</a>, una vez descargado el código, dentro de la carpeta creas un archivo llamado index.php en el caso de haber hecho la descarga a través de composer agrega el siguiente código:</p><pre class="crayon-plain-tag">require 'vendor/autoload.php';</pre><p>si lo descargaste manual solo necesitas incluir la carpeta slim y en el archivo index.php agregamos el siguiente código:</p><pre class="crayon-plain-tag">require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();</pre><p>Para iniciar la clase utilizamos lo siguiente:</p><pre class="crayon-plain-tag">$app = new \Slim\Slim();</pre><p>y de esta manera ya tenemos todo listo para comenzar a agregar nuestras funciones, como prueba de que todo esta funcionando podemos agregar el siguiente ejemplo:</p><pre class="crayon-plain-tag">require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();
// GET route
$app-&gt;get(
    '/',
    function () {
        $template = &lt;&lt;&lt;EOT
&lt;!DOCTYPE html&gt;
    &lt;html&gt;
        &lt;head&gt;
            &lt;meta charset="utf-8"/&gt;
            &lt;title&gt;Test de funcionamiento&lt;/title&gt;
        &lt;/head&gt;
        &lt;body&gt;
            &lt;h1&gt;Slim funciona perfectamente&lt;/h1&gt;
        &lt;/body&gt;
    &lt;/html&gt;
EOT;
        echo $template;
    }
);
$app-&gt;run();</pre><p>Si vemos en pantalla el mensaje “<i>Slim funciona perfectamente”</i> es porque todo esta funcionado bien. Para no hacer mas largo el tutorial dejaré hasta aquí este primer artículo, en la próxima entrada hablaré sobre las rutas y conexión a mysql, lo cual nos será de utilidad en muchas formas, si te gusto el articulo no olvides en comentar.</p>
<p>La entrada <a rel="nofollow" href="/como-crear-un-api-rest-con-slim-php-introduccion/">Cómo crear un api RESTful con slim php &#8211; introducción</a> aparece primero en <a rel="nofollow" href="/">Cronicas de un geek</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://cronicasgeek.com/como-crear-un-api-rest-con-slim-php-introduccion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
