Espacio Daycry - Espacio de programación

  • Inicio
  • Categorias
    • - Codeigniter
    • - Symfony
    • - HTML5
    • - Linux / Ubuntu
    • - PHP
    • - Jquery
  • PortFolio - Proyectos Codeiniter
    • - Encuestas Online
    • - Estadísticas - GLPI
    • - Gestión de colas
    • - Web Service - REST

domingo, 1 de febrero de 2015

Codeigniter Web Service - REST

Posted by daycry at 21:09 Labels: Codeigniter , PHP , REST Api , Web Service

Escribo esta página porque quiero aportar un poquito de los conocimientos que he obtenido, leyendo foros sobre Web Services.

Para que sirve

Un web service se utiliza para la comunicación de diferentes aplicaciones(que pueden estar hechas con diferentes lenguajes de programación), mediante el protocolo HTTP puerto 80 (o el que se configure).

La comunicación de estas aplicaciones se realizan mediante estructuras de datos como puede ser un xml, json, o simplemente cadenas de carácteres (strings).

Integrando con Codeigniter

Todo el mundo ha oído hablar de Phil Sturgeon y su Rest Server para Codeigniter.
Pero en muy pocos foros o blogs se habla de como configurar dicho web service para que funcione con sus REST-API-KEY, claves de acceso que van asociadas a permisos personalizables, donde se puede decidir dar paso a una petición o denegarla.

Configuración

Voy a explicar de la forma mas clara posible como realizar dicho configuración para nuestro web service.

Lo primero que debemos hacer es modificar el fichero de configuración de Rest, situado dentro de la carpeta config.

/*
|--------------------------------------------------------------------------
| REST API Keys Table Name
|--------------------------------------------------------------------------
|
| The table name in your database that stores API Keys.
|
| 'keys'
|
*/
$config['rest_keys_table'] = 'ws_keys';

/*
|--------------------------------------------------------------------------
| REST Enable Keys
|--------------------------------------------------------------------------
|
| When set to true REST_Controller will look for a key and match it to the DB.
| If no key is provided, the request will return an error.
|
| FALSE

 CREATE TABLE `ws_keys` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `keyAccess` varchar(40) NOT NULL,
   `level` int(2) NOT NULL,
   `ignore_limits` tinyint(1) NOT NULL DEFAULT '0',
   `is_private_key` tinyint(1)  NOT NULL DEFAULT '0',
   `ip_addresses` TEXT NULL DEFAULT NULL,
   `date_created` int(11) NOT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
*/
$config['rest_enable_keys'] = TRUE;

/*
|--------------------------------------------------------------------------
| REST Table Key Column Name
|--------------------------------------------------------------------------
|
| If you are not using the default table schema as shown above, what is the
| name of the db column that holds the api key value?
|
*/
$config['rest_key_column'] = 'keyAccess';

/*
|--------------------------------------------------------------------------
| REST Key Length
|--------------------------------------------------------------------------
|
| How long should created keys be? Double check this in your db schema.
|
| Default: 32
| Max: 40
|
*/
$config['rest_key_length'] = 40;

/*
|--------------------------------------------------------------------------
| REST API Key Variable
|--------------------------------------------------------------------------
|
| Which variable will provide us the API Key
|
| Default: X-API-KEY
|
*/
$config['rest_key_name'] = 'X-API-KEY';

Con el ejemplo anterior estamos indicando que la tabla que contendrá las keys se llamará "ws_keys" y el campo que contiene la key se llama "keyAccess"

Esto implica que cualquier petición al web service se tendrá que enviar la clave de acceso sino devolverá un error de "Invalid Key"
Para evitar este problema, tendremos que insertar una clave en la base de datos que nos servirá para poder realizar peticiones y poder generar claves aleatorias para otros usuarios.

Otro de los campos importantes es el campo "is_private_key".
Este campo tiene el valor de "1" o "0", dependiendo de la privacidad de la clave.
Si es una clave privada, por lo tanto, está en "1", el campo "ip_addresses" debe estar informado con la IP que realiza la petición, sino dicha petición se denegará con un error de "Invalid Key".

El campo "ignore_limits" va asociado con la cantidad de peticiones que puedes realizar durante un momento determinado.
Este campo va asociado con la tabla limits, que controla la cantidad de peticiones que realiza una petición con una Key determinada hacia una url del web service.
Si supera el límite configurado devolverá una denegación de petición.

Un ejemplo de petición de un cliente hacia el web service que intente utilizar el método "PUT", para crear una key nueva sería de la siguiente forma:

$config = array('server'  => 'http://192.168.1.36/usuarios/index.php/key',
                'http_user'       => 'admin',
                'http_pass'       => '1234',
                'http_auth'       => 'digest'
                //'ssl_verify_peer' => TRUE,
                //'ssl_cainfo'      => '/certs/cert.pem'
                );

  // Run some setup
  $this->rest->initialize($config);

  
  $this->rest->api_key('20a75c12ef970bd2602416294c4f8b667c7b32bd','X-API-KEY');
  $tweets = $this->rest->put('index');

Donde la clave 20a75c12ef970bd2602416294c4f8b667c7b32bd es una clave introducida en la base de datos de forma manual.
Si utilizamos el método:

$this->rest->debug();

Devolverá un resultado parecido al siguiente:






































Se puede personalizar la configuración de permisos y claves, utilizando configuraciones que por defecto se encuentran deshabilitadas en el web Service de serie. Todas estas configuraciones se encuentran en el fichero "Rest.php" dentro de la carpeta config.

Tweet

Related Posts

  • PHP - Image Resize
    PHP - Image Resize
  • Running PHP Script From Cron
    Running PHP Script From Cron
  • PHP- Operaciones con fechas - Sumar Horas, minutos y segundos
    PHP- Operaciones con fechas - Sumar Horas, minutos y segundos
  • Beanstalkd, Pheanstalk and Daemontools on Ubuntu
    Beanstalkd, Pheanstalk and Daemontools on Ubuntu

No hay comentarios :

Publicar un comentario

Entrada más reciente Entrada antigua Inicio
Suscribirse a: Enviar comentarios ( Atom )

Sígueme en las Redes Sociales



Follow @daycry9



Donaciones

Suscribirse a

Entradas
Atom
Entradas
Comentarios
Atom
Comentarios

Datos personales

daycry
Ver todo mi perfil

Entradas populares

  • Crear archivos PHP ejecutables por terminal UBUNTU
    En este apartado vamos a explicar como ejercutar archivos PHP a través del terminal de Ubuntu. Lo primero que tendríamos que hacer es inst...
  • Pâginación PHP con Librería Zebra Pagination
    En este blog voy a comentar un tema que se utilizan en casi todas las páginas web que existen, y es el tema de la paginación. La paginaci...
  • PHPExcel - Codeigniter
    Este post trata de la integración de la librería PHPExcel en Codeigniter, aunque se podría aplicar a cualquier librería, como por ejemplo mP...
  • PHP- Operaciones con fechas - Sumar Horas, minutos y segundos
    Ejemplo para añadir o sumar un número determinado de hora/s, minuto/s, segundo/s a una fecha en php. Con la función strtotime se puede ...
  • Codeigniter - Múltiples conexiones a base de datos
    Este tema es uno de los temas primordiales sobre el framework Codeigniter, ya que en alguna ocación nos hemos visto obligados a recoger dato...

© Espacio Daycry - Espacio de programación 2013 . Powered by Bootstrap , Blogger templates and RWD Testing Tool