DesarrolloLibre

Desarrollo Web, Android, juegos y mucho más

Categorias
20-06-2016

CodeIgniter es un framework muy versátil empleado generalmente para proyectos de pequeña o mediana envergadura; CodeIgniter tiene algunas carencias como no contar con alguna integración de manera nativa con alguna plataformas de pago, manejo de autenticación, listas ACL etc; sin embargo todas estas características pueden ser fácilmente implementadas empleando librerías de terceros que por lo general, tenemos bastante para escoger.

¿Qué es una API REST?

Una API REST no es más que una librería de funciones que se accede mediante HTTP que en otras palabras significa acceder mediante URLs para obtener distintos recursos mediante consultas o proveer información.

Los datos devueltos pueden ser en XML, JSON, HTML entre otros formatos lo que lo hace de los más versatil para que distintas aplicaciones se conecten a la misma y de esta forma crear aplicaciones más complejas o con un mayor número de módulo con distintas tecnologías de una manera sencilla.

Integrando la API REST en CodeIgniter

Como indicamos en un comienzo, emplearemos una librería PHP

de un tercero para realizar esta labor; específicamente emplearemos la librería provista desde GitHub llamada: CodeIgniter Rest Server la cual es sencilla de implementar, emplear y hace su proposito; cuenta con algunas características extras como el manejo de API Keys y autenticación que en esta entrada no abordaremos pero puedes consultarlo en el enlace anterior.

Instalando la librería

Tal como indica la documentación oficial, para instalar la librería PHP anterior simplemente debemos copiar los siguientes archivos en nuestro proyecto CodeIgniter alojado en nuestro servidor Apache:

Con poco más des esto podemos, tenemos integrada esta librería PHP en nuestro proyecto CodeIgniter y empezar a crear nuestra API REST.

Recuerda colocar el require APPPATH . '/libraries/REST_Controller.php'.

Una vez hecho esto, creamos un controlador en CodeIgniter y en vez de extender de MY_Controller hacemos que extienda de REST_Controller quedando de la siguiente manera:

defined('BASEPATH') OR exit('No direct script access allowed');
require APPPATH . '/libraries/REST_Controller.php';

class Restserver extends REST_Controller {

    public function __construct() {
        parent::__construct();
		
        $this->load->database();
        $this->load->helper('url');
    }
}
También podemos agregar la clase REST_Controller en el autoload del proyecto en vez del require.

Manejando las peticiones de la API REST

Una vez tengamos nuestro ambiente configurado, pasamos a crear los métodos que conforman nuestra API REST.

En este pequeño ejemplo presentado, emplearemos un modelo supuesto de usuarios (users) el cual nos servirá para dar los primeros pasos con la API REST en CodeIgniter.

API REST para obtener todos los usuarios

Con el siguiente método podemos obtener todos los usuarios:

    // se accede con http://miservidor/restserver/users?format=json
    public function users_get() {
        $this->load->model('Users');
        $this->response($this->Users>findAll());
    }

Para acceder al método anterior y que este nos devuelva un JSON empleamos la siguiente URL:

http://miservidor/restserver/users?format=json

Obtenemos:

[{"user_id":"274176531","username":"acy293","email":"desarrollolibre2.net@gmail.com","auth_level":"1" ...}]

Si en vez de un JSON deseamos un XML empleamos la siguiente URL:

http://miservidor/restserver/users?format=xml

Obtenemos:

<xml>
    <item>
        <user_id>274176531</user_id>
        <username>acy293</username>
        <email>desarrollolibre2.net@gmail.com</email>
        <auth_level>1</auth_level>
        <banned>0</banned>
        <passwd>
            $2y$11$f4ViF8bla.UWenXVywvDN.0DTLWPLexvn35zuLP1V.XlConvFKyLi
        </passwd>
        <passwd_recovery_code/>
        <passwd_recovery_date/>
        <passwd_modified_at>2016-06-12 12:46:09</passwd_modified_at>
        <last_login>2016-06-16 22:39:12</last_login>
        <created_at>2016-06-10 01:35:03</created_at>
        <modified_at>2016-06-16 16:39:12</modified_at>
    </item>
</xml>

Bastante sencillo; el nombre de nuestro método REST o recurso tiene dos partes:

  • El nombre de nuestro método: users.
  • Y la petición empleada para obtener el recurso mediante los métodos HTTP clásicos.

Aunque esto es por convención que en otras palabras podemos nombrarlo como queramos ya que somos nosotros los que decidimos que hace el método REST o recurso pero la cosa es que tenga cierta lógica; existen otros métodos provistos por el protocolo HTTP los cuales están estructurado de la siguiente manera:

  • get: Para obtener datos.
  • post: Para actualizar un recurso.
  • delete: Para borrar un recurso.
  • put: Para crear un recurso.

Siguiendo nuestro ejemplo nuestros recursos quedarían de la siguiente forma:

   function users_get()
    {
        // Para obtener datos
    }
 
    function users_put()
    {
        // Para crear un recurso
    }
 
    function users_post()
    {
        // Para actualizar un recurso
    }
 
    function users_delete()
    {
        // Para borrar un recurso
    }

Esta sería la forma más común de crear nuestra REST API no es obligatorio emplear esta estructura; es más, generalmente nunca se emplean los métodos put y delete ya que son pocos soportados por los navegadores.

Pase de parámetros a los recursos de la API REST

También puedes agregar parámetros a la URL, por ejemplo si queremos obtener el detalle de un elemento específico o borrar uno con delete:

public function index_delete($id) {
    $this->response([
        'returned from delete:' => $id,
    ]);
}  	

Puedes aplicar la misma lógica para los demás métodos HTTP mencionados anteriormente.

Conclusiones

En general las APIs REST son muy útiles cuando queremos interconectar aplicaciones de distintas tecnologías como CodeIgniter con Android, IOS... en un supuesto caso de tener una aplicación administradora centralizada con CodeIgniter y la aplicación Android realiza consultas mediante la API REST, este sería uno de los escenarios más comunes debido al gran alcance que tienen las aplicaciones móviles hoy en días.


Publicidad

Give me for a beer!

Algunos recursos que te pueden interesar

TCPDF: clase Oper Source para generar PDF con PHP

TCPDF: clase Oper Source para generar PDF con PHP

API REST en CodeIgniter

API REST en CodeIgniter

Algunos artículos que te pueden interesar

Creando una plataforma de pago con PayPal y CodeIgniter (parte 1)

Creando una plataforma de pago con PayPal y CodeIgniter (parte 1)

Se explica cómo crear una plataforma de pago empleando PayPal con CodeIgniter, crear las cuentas y la librería de desarrollo para CodeIgniter.

Andrés Cruz 10-05-2016

Elementos fundamentales para trabajar con CodeIgniter

Elementos fundamentales para trabajar con CodeIgniter

Hablaremos de las funciones show_404 para mostrar errores 404 personalizados,url_title para crear URIs limpias,html_escape para evitar la inyección de HTML, organizar los controladores en subcarpeta, como cargar múltiples librerías y/o helpers en una sola

Andrés Cruz 12-10-2017

Tipos de variables en PHP

Tipos de variables en PHP

En este artículo veremos como crear una variable en PHP, particularidades de las mismas y tipos de datos en PHP.

Andrés Cruz 27-07-2013