API Rest con Slim

Vamos a ver como crear un API Rest con Slim. REST, REpresentational State Transfer, es una arquitectura de desarrollo web basada en el estándar HTTP.
REST nos permite crear servicios y aplicaciones que pueden ser usadas por cualquier dispositivo o cliente que entienda HTTP, por lo que es muy simple y flexible de usar.

REST cuenta con muchos métodos para utilizar, en concreto los métodos disponibles en el protocolo http. Los mas utilizados son:

  • GET: Para consultar y conseguir registros
  • POST: Para crear registros
  • PUT: Para editar registros
  • DELETE: Para eliminar registros

Veamos un ejemplo de un API REST con Slim Framework. Para ir comprobando el funcionamiento utilizaremos Postman que podemos instalar en nuestro navegador Chrome.

<?php

//Cargamos el framework
require_once 'vendor/autoload.php';

$app = new \Slim\Slim();

//Creamos la conexión a la base de datos con MySQLi
$db = new mysqli('localhost', 'root', '', 'pruebas');

/*
 * Ruta/Controlador Get, le decimos que use las variables $db, $app
 * GET para CONSEGUIR
 */
$app->get('/users', function () use($db, $app) {

            $select = $db->query("select * from users;");
            $users=array();
            while($fila=$select->fetch_assoc()){
                $users[]=$fila;
            }

            echo json_encode($select->fetch_assoc());
        });

//POST para INSERTAR
$app->post('/users', function () use($db, $app) {
            //Request recoge variables de las peticiones http
            $request = $app->request;

            $insert = $db->query("INSERT INTO users VALUES(NULL,
                                                   '{$request->post("email")}',
                                                   '{$request->post("password")}',
                                                   '{$request->post("nombre")}',
                                                   '{$request->post("apellido")}'
                                                   )");
            if ($insert) {
                $result = array("status" => "true", "message" => "Usuario creado correctamente");
            } else {
                $result = array("status" => "false", "message" => "Usuario NO creado");
            }
            echo json_encode($result);
        });

//PUT para ACTUALIZAR
$app->put('/users/:id', function ($id) use($db, $app) {

            $request = $app->request;

            $sql = "UPDATE users SET
                                    email = '{$request->params("email")}',
                                    password = '{$request->params("password")}',
                                    nombre = '{$request->params("nombre")}',
                                    apellido = '{$request->params("apellido")}'
                                 WHERE id=$id";

            $update = $db->query($sql);

            if ($update) {
                $result = array("status" => "true", "message" => "Usuario modificado correctamente");
            } else {
                $result = array("status" => "false", "message" => "Usuario NO modificado");
            }
            echo json_encode($result);
        });

//DELETE para BORRAR
$app->delete('/users/:id', function ($id) use($db, $app) {

            $request = $app->request;

            $sql = "DELETE FROM users WHERE id=$id";

            $delete = $db->query($sql);

            if ($delete) {
                $result = array("status" => "true", "message" => "Usuario eliminado correctamente");
            } else {
                $result = array("status" => "false", "message" => "Usuario NO eliminado");
            }
            echo json_encode($result);
        });

$app->run();
?>

Si hacemos una petición GET nos devolverá un objeto json con el resultset.

Por ejemplo si en postman elegimos POST, rellenamos el “formulario” y enviamos, nos devuelve que ha creado el usuario.

api rest con slim post

Si hacemos una petición PUT, tendremos que elegir x-www-formurlencoded para enviar los datos, nos modificará el usuario correctamente.

api rest con slim put

Y lo mismo con DELETE.

Ya tendremos el API REST disponible para usar desde cualquier aplicación externa. Esto habría que darle seguridad de alguna forma, pero como ejemplo de momento nos vale.

Slim es muy similar a Silex, otro microframework Restful para PHP basado en Symfony. Si queremos construir APIs REST más complejas podemos utilizar frameworks como Laravel o Symfony2.

Más información:
Conceptos sobre APIs REST
http://www.slimframework.com/
Introducción a API REST y Framework Slim

Víctor Robles WEB

Autor: Victor

Desarrollador web - Formador online - Blogger

Compartir este post