Pages - Menu

Pages - Menu

viernes, 11 de noviembre de 2016

Crear Web Service RESTFul con PHP [API] [Básico]

Un servicio web (en inglés, Web Service o Web services) es una tecnología que utiliza un conjunto de protocolos y estándares que sirven para intercambiar datos entre aplicaciones. Distintas aplicaciones de software desarrolladas en lenguajes de programación diferentes, y ejecutadas sobre cualquier plataforma, pueden utilizar los Web Services para intercambiar datos en redes de ordenadores como Internet. La interoperabilidad se consigue mediante la adopción de estándares abiertos.




[caption id="" align="aligncenter" width="424"]Web Service Funcionamiento básico de un Web Service[/caption]

Como se puede apreciar en la imagen, un Web Service está compuesto por dos partes:


Un servidor: En este está almacenada la información que va a ser consumida y toda la lógica del servicio.


Los clientes: Que son los encargados de consumir dicho servicio.


Básicamente el cliente envía una petición al servidor a través de la red y el servidor le envía el resultado, sencillo, ¿No?



Características de los Web Services


Algunas de las características de los Web Services son:




  • Pueden ser consumidas desde cualquier tipo de aplicación sin importar el lenguaje

  • Permiten el fácil acceso a su contenido y funcionamiento

  • Está orientado a la web

  • Basados en Mensajes

  • Puede ser localizado dinámicamente

  • Puede ser ensamblados o agregados dinámicamente

  • Accesible a través de internet

  • Basados en estándares de la industria

  • Fácil Integración

  • Escalabilidad

  • Permiten que servicios y software de diferentes compañías ubicadas en diferentes lugares geográficos puedan ser combinados fácilmente para proveer servicios integrados.


Inconvenientes de los Web Services



  • Para realizar transacciones no pueden compararse en su grado de desarrollo con los estándares abiertos de computación distribuida como CORBA (Common Object Request Broker Architecture).

  • Su rendimiento es bajo si se compara con otros modelos de computación distribuida, tales como RMI (Remote Method Invocation), CORBA o DCOM (Distributed Component Object Model). Es uno de los inconvenientes derivados de adoptar un formato basado en texto. Y es que entre los objetivos de XML no se encuentra la concisión ni la eficacia de procesamiento.

  • Al apoyarse en HTTP, pueden esquivar medidas de seguridad basadas en firewall cuyas reglas tratan de bloquear o auditar la comunicación entre programas a ambos lados de la barrera.


Estándares empleados (Tipos de Web Services)


Existen varios tipos de Web Services, varios de ellos son:




  • WSDL (Web Services Description Language)

  • UDDI (Universal Description, Discovery and Integration)

  • SOAP (Simple Object Access Protocol) o XML-RPC (XML Remote Procedure Call)

  • REST (Representational State Transfer)


Es importante resaltar que los dos últimos son los que están “en apogeo” debido a que han venido evolucionando a través del tiempo adaptándose a las demandas actuales.



[stextbox id="info" bgcolor="eeeeee" cbgcolor="eeeeee" bgcolorto="eeeeee" cbgcolorto="eeeeee"]Para saber más a cerca de estos dos últimos tipos de Web Service los invito a leer su Bench en el siguiente enlace: SOAP vs REST/RESTful[/stextbox]


 Crear Web Service


Para seguir este tutorial es muy recomendable tener conocimientos básicos en PHP y la estructura de JSON porque la finalidad de esta guía no es enseñar PHP sino aprender a crear un Web Service con PHP, aunque, si conoce otro lenguaje de programación es muy fácil intuir el funcionamiento del código.

En este tutorial aprenderemos a crear un Web Service RESTful sencillo, para la creación de nuestro Web Service requerimos usar diversas tecnologías, las que usaremos en este tutorial serán las siguientes:




  • PHP (Versión 7.0.8)

  • MySQL (Versión 5.7.16)

  • PHP ActiveRecord (Versión 1.xx)


El componente PHP ActiveRecord, es una "ORM library" de código abierto basado en el patrón ActiveRecord el cual facilitará la conexión entre PHP y nuestro motor de base de datos, esta librería es muy potente y no sólo se puede integrar con MySQL, sino que también se puede usar con otros motores de base de datos como PostgreSQL, SQLite y OCI (Oracle Call Interface).


Para descargarlo pueden hacerlo desde su página oficial, pero, la versión posteada ahí está desatendida, por lo cual es recomendable que se descargue la versión que se tiene en GitHub.


Esta librería es muy fácil de utilizar, es recomendable leer toda la información que está alojada en la Wiki oficial, es muy poca pero muy precisa y clara.


Para este ejemplo crearemos un sistema de deberes, que consiste básicamente en guardar Usuarios y a estos usuarios gestionarle Deberes.


Para organizarnos mejor haremos nuestra Check List:




  1. Crear nuestra base de datos y montarla

  2. Instalar PHP AR

  3. Configurar y probar PHP AR

  4. Crear los modelos o entidades de nuestra base de datos en PHP y probarlos

  5. Crear los controladores de cada modelo

  6. Probar cada modelo


1- Crear nuestra base de datos y montarla


La base de datos que usare será la siguiente:

[caption id="" align="alignnone" width="419"]Diagrama Diagrama de la base de datos[/caption]

La relación indica que, un usuario puede tener muchos deberes y (EN ESTE CASO) un deber sólo lo puede tenerlo un usuario, como vemos no verificamos que ningún campo sea único y bien se podría hacer normalización pero para no complicar el ejemplo mejor no se aplica tanto protocolo porque debemos recordar que es un ejemplo básico.


Ya teniendo nuestro diagrama creado, el SQL queda de la siguiente manera:

[spoiler title='SQL del ejemplo' style='default' collapse_link='true']
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

CREATE SCHEMA IF NOT EXISTS `programeet_ejemplo_web_service` DEFAULT CHARACTER SET utf8 ;
USE `programeet_ejemplo_web_service` ;

CREATE TABLE IF NOT EXISTS `programeet_ejemplo_web_service`.`Usuarios` (
`id` INT NOT NULL AUTO_INCREMENT,
`nombre` VARCHAR(45) NOT NULL,
`telefono` VARCHAR(45) NOT NULL,
`email` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `programeet_ejemplo_web_service`.`Deberes` (
`id` INT NOT NULL AUTO_INCREMENT,
`deber` VARCHAR(45) NOT NULL,
`Usuarios_id` INT NOT NULL,
PRIMARY KEY (`id`),
INDEX `fk_Deberes_Usuarios_idx` (`Usuarios_id` ASC),
CONSTRAINT `fk_Deberes_Usuarios`
FOREIGN KEY (`Usuarios_id`)
REFERENCES `programeet_ejemplo_web_service`.`Usuarios` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

[/spoiler]

Para montar la base de datos usaré MySQL Workbench siguiendo la siguiente ruta:

[caption id="" align="alignnone" width="903"]Mount DB Montar base de datos desde MySQL Workbench[/caption]

Luego de montar la base de datos nos quedará de la siguiente manera:

[caption id="" align="alignnone" width="333"]Mounted DB Base de datos montada con las dos tablas[/caption]

[stextbox id="info" bgcolor="eeeeee" cbgcolor="eeeeee" bgcolorto="eeeeee" cbgcolorto="eeeeee"]NOTA: De aquí en adelante esta nota es válida, en caso de usar Ubuntu Server es recomendable darle permisos a los archivos para que puedan ejecutar sin problemas, en mi caso como es para pruebas y lo tengo local, le asigné 777 a todos para evitar cualquier inconveniente.[/stextbox]

2 -Instalar PHP AR


Al descargarnos la librería de GitHub, la extraemos y copiamos los archivos relevantes a la librería que son:




  • ActiveRecord.php

  • lib [carpeta]


Nos vamos a nuestro servidor web (puede ser con Appserv, Xampp, Wamp o cualquier otro, que en mi caso uso Ubuntu Server)  y creamos una carpeta con el nombre que queramos, yo le pondré "php-activerecord" y agregaré la librería, la ruta de la librería es la siguiente:




[caption id="" align="alignnone" width="196"]Lib path Ruta de la librería[/caption]

3- Configurar y probar PHP AR


Para la configuración de PHP AR haremos un script que va a servir para iniciar la librería en todos nuestros controladores y lo pondremos en la ruta padre de nuestra librería aunque puede ponerse en cualquier otro lado:

[caption id="" align="alignnone" width="161"]autoload path Ruta de autoload.php[/caption]

El contenido del script es el siguiente:

[spoiler title='Contenido de autoload.php' style='default' collapse_link='true']
<?php
// Importamos nuestra librería poniendo la ruta del ActiveRecord.php
require_once 'php-activerecord/ActiveRecord.php';

ActiveRecord\Config::initialize(function($cfg){
$cfg->set_model_directory('model');
$cfg->set_connections(array(
'development' =>
'mysql://root:programeet@localhost/programeet_ejemplo_web_service'));
});
// Configuramos la ruta de la carpeta donde pondremos nuestros modelos
// en este caso la carpeta se llama 'model' y está en el mismo directorio que este script.
// Configuramos nuestra conexión a la base de datos:
// Usuario = root
// Password = programeet
// Servidor = localhost
// Nombre de la base de datos = programeet_ejemplo_web_service

[/spoiler]

Nuestro Web Service ahora tendrá la siguiente estructura:

[caption id="" align="alignnone" width="169"]path service Directorio del Web Service[/caption]

Una vez configurada nuestra librería procedemos a probarla:

[caption id="" align="alignnone" width="386"]testing lib Probando la librería[/caption]

Como pudimos notar no hubo ningún error, lo que quiere decir que nos conectamos correctamente a la base de datos.



4-Crear los modelos o entidades de nuestra base de datos en PHP y probarlos


Dentro de la carpeta "model" crearemos un script por cada tabla en la base de datos y tendrá la siguiente estructura:
<?php
class NOMBRE_DE_LA_CLASE extends ActiveRecord\Model
{
public static $table_name = 'NOMBRE_DE_LA_TABLA';
public static $primary_key = 'LLAVE_PRIMARIA';
}

Notese que la clase debe heredar de "ActiveRecord\Model", conociendo la estructura de todos los modelos así quedaron los del ejemplo:



// Deber.php
<?php
class Deber extends ActiveRecord\Model
{
public static $table_name = 'Deberes';
public static $primary_key = 'id';
}

// Usuario.php
<?php
class Usuario extends ActiveRecord\Model
{
public static $table_name = 'Usuarios';
public static $primary_key = 'id';
}

Una vez creados los modelos procedemos a probarlos, dentro del script "autoload.php" haremos las pruebas, no es necesario que sea ese, puede ser en otro pero se debe importar éste para iniciar la librería y poder usarla, haremos un crud sencillo por cada modelo para probar que funciona todo correctamente.


 [stextbox id="warning"]NOTA: Para poder hacer las pruebas deben tener TODOS los modelos creados.[/stextbox]

Procedemos a probar la entidad Usuario:

[spoiler title='Código de prueba para la entidad Usuario' style='default' collapse_link='true']
<?php
require_once 'php-activerecord/ActiveRecord.php';

ActiveRecord\Config::initialize(function($cfg){
$cfg->set_model_directory('model');
$cfg->set_connections(array(
'development' =>
'mysql://root:programeet@localhost/programeet_ejemplo_web_service'));
});

echo '<pre>';
//Create
Usuario::create(array(
'nombre' => 'Dro',
'telefono' => '5555',
'email' => 'programeet@web_service.ejemplo'
));
//Read
$u = Usuario::find_by_email('programeet@web_service.ejemplo');
print_r($u);
echo '<br>';

//Update
$u->telefono = "666";
$u->save();

$u2 = Usuario::find_by_telefono('666');
print_r($u2);
echo '<br>';

//Delete
$u2->delete();

[/spoiler]

Al ejecutar el script los print_r($u) y print_r($u2) nos arroja lo siguiente:

[spoiler title='Resultado' style='default' collapse_link='true']
Usuario Object
(
[errors] =>
[attributes:ActiveRecord\Model:private] => Array
(
[id] => 1
[nombre] => Dro
[telefono] => 5555
[email] => programeet@web_service.ejemplo
)

[__dirty:ActiveRecord\Model:private] => Array
(
)

[__readonly:ActiveRecord\Model:private] =>
[__relationships:ActiveRecord\Model:private] => Array
(
)

[__new_record:ActiveRecord\Model:private] =>
)

Usuario Object
(
[errors] =>
[attributes:ActiveRecord\Model:private] => Array
(
[id] => 1
[nombre] => Dro
[telefono] => 666
[email] => programeet@web_service.ejemplo
)

[__dirty:ActiveRecord\Model:private] => Array
(
)

[__readonly:ActiveRecord\Model:private] =>
[__relationships:ActiveRecord\Model:private] => Array
(
)

[__new_record:ActiveRecord\Model:private] =>
)


[/spoiler]

Con esto confirmamos que la identidad o modelo "Usuario" funciona perfectamente, procedemos a probar la entidad Deber:

Pero para poder probar la entidad Deber, debe existir por lo menos un usuario para que se cumpla la relación y el script queda de la siguiente manera:

[spoiler title='Código de prueba para la entidad Deber' style='default' collapse_link='true']
<?php
require_once 'php-activerecord/ActiveRecord.php';

ActiveRecord\Config::initialize(function($cfg){
$cfg->set_model_directory('model');
$cfg->set_connections(array(
'development' =>
'mysql://root:programeet@localhost/programeet_ejemplo_web_service'));
});

echo '<pre>';

// Creamos un usuario
$u = Usuario::create(array(
'nombre' => 'Dro',
'telefono' => '5555',
'email' => 'programeet@web_service.ejemplo'
));

//Create
Deber::create(array(
'deber' => 'Terminar la guia',
'Usuarios_id' => $u->id
));
//Read
$d = Deber::find_by_deber('Terminar la guia');
print_r($d);
echo '<br>';

//Update
$d->deber = "Crear guia intermedia";
$d->save();

$d2 = Deber::find_by_deber('Crear guia intermedia');
print_r($d2);
echo '<br>';

//Delete
$d2->delete();

[/spoiler]

Al ejecutar el script los print_r($d) y print_r($d2) nos arroja lo siguiente:

[spoiler title='Resultado' style='default' collapse_link='true']
Deber Object
(
[errors] =>
[attributes:ActiveRecord\Model:private] => Array
(
[id] => 1
[deber] => Terminar la guia
[usuarios_id] => 2
)

[__dirty:ActiveRecord\Model:private] => Array
(
)

[__readonly:ActiveRecord\Model:private] =>
[__relationships:ActiveRecord\Model:private] => Array
(
)

[__new_record:ActiveRecord\Model:private] =>
)

Deber Object
(
[errors] =>
[attributes:ActiveRecord\Model:private] => Array
(
[id] => 1
[deber] => Crear guia intermedia
[usuarios_id] => 2
)

[__dirty:ActiveRecord\Model:private] => Array
(
)

[__readonly:ActiveRecord\Model:private] =>
[__relationships:ActiveRecord\Model:private] => Array
(
)

[__new_record:ActiveRecord\Model:private] =>
)


[/spoiler]

Y en la tabla usuario tenemos:

[caption id="" align="alignnone" width="887"]users list Tabla Usuarios luego de probar la entidad Deber[/caption]

Con esto comprobamos que las dos entidades funcionan perfectamente.

5-Crear los controladores de cada modelo


Ahora creamos una carpeta llamada "controladores" o el nombre que quieran, pero es mejor llamar las carpetas y ficheros por lo que son, el directorio del servicio nos quedará de la siguiente manera:




[caption id="" align="alignnone" width="186"]service path Directorio del Web Service[/caption]

Dentro de esa carpeta vamos a crear dos script por cada entidad:

  1. ControllerEntidad.php: En este script va el crud de la identidad

  2. Entidad.php: Este script será el que reciba las peticiones HTTP y direccionarlas a cada método del controlador


[caption id="" align="alignnone" width="1098"]http description Peticiones HTTP y asociación con el CRUD de la entidad[/caption]

En este ejemplo sólo trabajaremos con la petición GET siendo este un tutorial de Web Service Básico.

[stextbox id="warning"]ADVERTENCIA: Con este ejemplo no se puede sacar un Web Service a producción porque no tiene medidas de seguridad y no aplica todas las peticiones HTTP[/stextbox]

Para el retorno de datos del Web Service vamos a usar el formato JSON y no XML.

[stextbox id="info" bgcolor="eeeeee" cbgcolor="eeeeee" bgcolorto="eeeeee" cbgcolorto="eeeeee"] NOTA: Para saber más sobre estos dos formatos de texto los invitamos a leer por qué elegimos JSON sobre XML en el Bench XML vs JSON[/stextbox]

Teniendo en cuenta esto creamos los respectivos controladores:

[spoiler title='Controlador Usuario' style='default' collapse_link='true']
<?php
require_once '../autoload.php';
include '../model/Usuario.php';

class ControllerUsuarios{

public function Create($name, $telefono, $email){
$u = Usuario::create(array(
'nombre' => "$name",
'telefono' => "$telefono",
'email' => "$email"
));
return null;
}

public function Read($name){
$u = Usuario::find_by_nombre($name);
return is_null($u) ? null : $u;
}

public function Update($name, $email){
$u = Usuario::find_by_nombre($name);
if(is_null($u)) return false;
$u->email = $email;
$u->save();
return true;
}

public function Delete($name){
$u = Usuario::find_by_nombre($name);
if(is_null($u)) return false;
$u->delete();
return true;
}
}

[/spoiler]

[spoiler title='Manejador de peticiones' style='default' collapse_link='true']
<?php
//print_r($_GET);
require 'ControllerUsuarios.php';
$crud = isset($_GET['action']) ? $_GET['action'] : 'empty';
switch ($crud) {
case 'create':
if (isset($_GET['name']) && isset($_GET['telefono']) && isset($_GET['email'])) {
$res = ControllerUsuarios::Create($_GET['name'],$_GET['telefono'],$_GET['email']);
echo json_encode(array(
'status' => '0',
'msg' => 'Usuario creado satisfactoriamente.'
));
}else{
echo json_encode(array(
'status' => '1',
'msg' => 'Debe especificar todos los parámetros.'
));
}
break;
case 'read':
if (isset($_GET['name'])) {
$res = ControllerUsuarios::Read($_GET['name']);
//print_r($res);
if($res) echo json_encode(array(
'status' => '0',
'msg' => $res->to_json()
));
else echo json_encode(array(
'status' => '1',
'msg' => 'No se encuentra el usuario con ese nombre.'
));
}else{
echo json_encode(array(
'status' => '1',
'msg' => 'Debe especificar todos los parámetros.'
));
}
break;
case 'update':
if (isset($_GET['name']) && isset($_GET['email'])) {
$res = ControllerUsuarios::Update($_GET['name'],$_GET['email']);
//print_r($res);
if($res) echo json_encode(array(
'status' => '0',
'msg' => 'Usuario actualizado correctamente.'
));
else echo json_encode(array(
'status' => '1',
'msg' => 'No se encuentra el usuario a modificar.'
));
}else{
echo json_encode(array(
'status' => '1',
'msg' => 'Debe especificar todos los parámetros.'
));
}
break;
case 'delete':
if (isset($_GET['name'])) {
$res = ControllerUsuarios::Delete($_GET['name']);
//print_r($res);
if($res) echo json_encode(array(
'status' => '0',
'msg' => 'Usuario eliminado satisfactoriamente'
));
else echo json_encode(array(
'status' => '1',
'msg' => 'No se encuentra el usuario con ese nombre.'
));
}else{
echo json_encode(array(
'status' => '1',
'msg' => 'Debe especificar todos los parámetros.'
));
}
break;
default:
echo json_encode(array(
'status' => '1',
'msg' => 'Debe especificar una opcion valida.'
));
break;
}
?>

[/spoiler]

[spoiler title='Controlador Deberes' style='default' collapse_link='true']
<?php
require_once '../autoload.php';
include '../model/Deber.php';

class ControllerDeberes{

public function Create($deber, $usuarios_id){
$u = Deber::create(array(
'deber' => "$deber",
'Usuarios_id' => "$usuarios_id"
));
return null;
}

public function Read($usuarios_id){
$u = Deber::find_all_by_Usuarios_id($usuarios_id);
$res = array();
foreach ($u as $d) $res[] = $d->to_json();
return is_null($u) ? null : $res;
}

public function Update($deber, $deber_new, $usuarios_id){
$check = Deber::find_by_deber_and_Usuarios_id("$deber", $usuarios_id);
if(is_null($check)) return false;
$check->deber = $deber_new;
$check->save();
return true;
}

public function Delete($deber, $usuarios_id){
$u = Deber::find_by_deber_and_Usuarios_id($deber, $usuarios_id);
if(is_null($u)) return false;
$u->delete();
return true;
}
}

[/spoiler]

[spoiler title='Manejador de peticiones' style='default' collapse_link='true']
<?php
//print_r($_GET);
require 'ControllerDeberes.php';
$crud = isset($_GET['action']) ? $_GET['action'] : 'empty';
switch ($crud) {
case 'create':
if (isset($_GET['deber']) && isset($_GET['usuarios_id'])) {
$res = ControllerDeberes::Create($_GET['deber'], $_GET['usuarios_id']);
echo json_encode(array(
'status' => '0',
'msg' => 'Deber agregado satisfactoriamente'
));
}else{
echo json_encode(array(
'status' => '1',
'msg' => 'Debe especificar todos los parámetros.'
));
}
break;
case 'read':
if (isset($_GET['usuarios_id'])) {
$res = ControllerDeberes::Read($_GET['usuarios_id']);
//print_r($res);
if($res) echo json_encode(array(
'status' => '0',
'msg' => $res
));
else echo json_encode(array(
'status' => '1',
'msg' => 'No se encuentran los deberes de ese usuario.'
));
}else{
echo json_encode(array(
'status' => '1',
'msg' => 'Debe especificar todos los parámetros.'
));
}
break;
case 'update':
if (isset($_GET['deber']) && isset($_GET['deber_new']) && isset($_GET['usuarios_id'])) {
$res = ControllerDeberes::Update($_GET['deber'],$_GET['deber_new'],$_GET['usuarios_id']);
//print_r($res);
if($res) echo json_encode(array(
'status' => '0',
'msg' => 'Deber actualizada correctamente.'
));
else echo json_encode(array(
'status' => '1',
'msg' => 'No se encuentra el deber a modificar.'
));
}else{
echo json_encode(array(
'status' => '1',
'msg' => 'Debe especificar todos los parámetros.'
));
}
break;
case 'delete':
if (isset($_GET['deber']) && isset($_GET['usuarios_id'])) {
$res = ControllerDeberes::Delete($_GET['deber'], $_GET['usuarios_id']);
if($res) echo json_encode(array(
'status' => '0',
'msg' => 'Deber eliminado satisfactoriamente'
));
else echo json_encode(array(
'status' => '1',
'msg' => 'No se encuentra el deber.'
));
}else{
echo json_encode(array(
'status' => '1',
'msg' => 'Debe especificar todos los parámetros.'
));
}
break;
default:
echo json_encode(array(
'status' => '1',
'msg' => 'Debe especificar una opcion valida.'
));
break;
}
?>

[/spoiler]

Como pudimos notar en el script ControllerEntidad.php son importados dos scripts, que son el autoload y el modelo de cada entidad, esto quiere decir que para poder hacer uso de la librería de PHP AR hay que ejecutar siempre el autoload y los modelos usados dentro del controlador, y como era de esperarse en el manejador se incluye el controlador para poder llamar sus métodos.

6-Probar cada modelo


Al final nuestro Web Service deberá tener la siguiente estructura:

[caption id="" align="alignnone" width="472"]service path Web Service terminado[/caption]

Ahora probemos todas las funciones de nuestro Web Service:

Usuarios


[spoiler title='Pruebas' style='default' collapse_link='true']

  • CREATE:


[ip_servidor]/controladores/Usuarios.php?action=create&name=Programeet&telefono=555&email=programeet@web_service.ejemplo


  • RESULT:


{"status":"0","msg":"Usuario creado satisfactoriamente."}


  • READ:


[ip_serv]/controladores/Usuarios.php?action=read&name=Programeet


  • RESULT:


{"status":"0","msg":"{\"id\":4,\"nombre\":\"Programeet\",\"telefono\":\"555\",\"email\":\"programeet@web_service.ejemplo\"}"}


  • UPDATE:


[ip_serv]/controladores/Usuarios.php?action=update&name=Programeet&email=dro_programeet@web_service.ejemplo


  • RESULT:


{"status":"0","msg":"Usuario actualizado correctamente."}


  • DELETE:


[ip_serv]/controladores/Usuarios.php?action=delete&name=Programeet


  • RESULT:


{"status":"0","msg":"Usuario eliminado satisfactoriamente"}

[/spoiler]

Deberes


[spoiler title='Pruebas' style='default' collapse_link='true']

Para probar esta identidad creamos un nuevo usuario y tiene un id=5
[ip_servidor]/controladores/Usuarios.php?action=create&name=Programeet&telefono=555&email=programeet@web_service.ejemplo


  • CREATE:


[ip_servidor]/controladores/Deberes.php?action=create&deber=Terminar%20la%20guia&usuarios_id=5


  • RESULT:


{"status":"0","msg":"Deber agregado satisfactoriamente"}


  • READ:


[ip_serv]/controladores/Deberes.php?action=read&deber=s&usuarios_id=5


  • RESULT:


{"status":"0","msg":["{\"id\":5,\"deber\":\"Terminar la guia\",\"usuarios_id\":5}"]}


  • UPDATE:


[ip_serv]/controladores/Deberes.php?action=update&deber=Terminar%20la%20guia&deber_new=Comer&usuarios_id=5


  • RESULT:


{"status":"0","msg":"Deber actualizada correctamente."}


  • DELETE:


[ip_serv]/controladores/Deberes.php?action=delete&deber=Comer&usuarios_id=5


  • RESULT:


{"status":"0","msg":"Deber eliminado satisfactoriamente"}

[/spoiler]

Esas pruebas son hechas en escenarios ideales en donde todos los parámetros enviados están bien, Probar que está bien validado depende de ustedes.

Bueno, eso fue todo por esta guía sencilla sobre cómo crear un Web Service básico conectado a cualquier motor de base de datos soportada por PHP AR.

Enlace de descarga del código fuente: MEGA

Herramientas utilizadas en el tutorial


1 comentario: