WebServices en REST con PHPDBC


La Transferencia de Estado Representacional (Representational State Transfer) o REST. Para leer más teoría sobre REST aquí.

Bien dado que la teoria no es lo mio comenzaremos con la creación de un pequeño WebService de ABM pero nuestro servicio regresará JSON y utulizaremos a demás PHPDBC manos a la obra, nuestro árbol de archivos tiene que quedar de la siguiente manera:

  • index.php
  • .htaccess
  • includes
    • phpdbc2.min.php
  • modulos
    • item.php

index.php

<!--?php -->include("includes/phpdbc2.min.php");

//Comienzan los metodos del servicio
include("modulos/item.php");

$path = parse_url($_SERVER["REQUEST_URI"], 5);
$path = str_replace("/RESTTutorialRapido/", "", $path);
$path = trim($path, "/");
@list($resource, $params) = explode("/", $path, 2);
$resource = ucfirst(strtolower($resource));
$method = strtolower($_SERVER["REQUEST_METHOD"]);
$params = !empty($params) ? explode("/", $params) : array();

if (class_exists($resource)) {
try {
$resource = new $resource($params);
$resource->{$method}();
}
catch (Exception $e) {
@header("HTTP/1.1 500 Internal Server Error");
}
}
else {
@header("HTTP/1.1 404 File Not Found");
}
?>

Como podrán ver hicimos un cambio con la estructura que manejabamos con NuSOAP con este cambio podemos manejar la información como si fueran recursos un ejemplo de como accesar es:

http://127.0.0.1:4001/RESTTutorialRapido/Item/Agregar/Pluma/Esta es una pluma/

Agregar: es el nombre del metodo.
Pluma: es el nombre del elemento.
Esta es una pluma: es la descripcion de la pluma.

http://127.0.0.1:4001/RESTTutorialRapido/Item/Editar/Pluma Roja/Estoy modificando la pluma/1/

Agregar: es el nombre del metodo.
Pluma: es el nombre del elemento.
Esta es una pluma: es la descripcion de la pluma.
1: id del elemento.

http://127.0.0.1:4001/RESTTutorialRapido/Item/Eliminar/1/

1: id del elemento.

http://127.0.0.1:4001/RESTTutorialRapido/Item/Listar/0/30/

0: El número de registro donde veremos la información
30: El número de registros que serán mostrados

.htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /RESTTutorialRapido/index.php

Podemos ver en el .htaccess una linea quenos interesará mucho que es /RESTTutorialRapido/index.php para un dominio comprado /RESTTutorialRapido/ esta linea la podemos quitar.

item.php

<!--?php -->class Item
{
var $params;
var $db;

function Item($params="") {
$this->params = $params;
}

function get() {

$this->db = new db("localhost","root","","PHPDBC","MySQL");
$this->db->conectar();

switch ($this->params[0]) {
case "Agregar":
$this->Agregar();
break;
case "Editar":
$this->Editar();
break;
case "Eliminar":
$this->Eliminar();
break;
case "Listar":
$this->Listar();
break;
}
$this->db->desconectar();
}

function post() {

}

function Agregar() {
$nombre = urldecode($this->params[1]);
$descripcion = urldecode($this->params[2]);

$INSERT="INSERT INTO items (Nombre,Descripcion) VALUES ('".$nombre."','".$descripcion."')";
$this->db->query($INSERT);
$resp["Ok"] = true;
if (!empty($this->db->Error)) {
$resp["Ok"] = false;
$resp["Mensaje"] = $this->db->Error;
}
echo json_encode($resp);
}

function Editar() {
$nombre = urldecode($this->params[1]);
$descripcion = urldecode($this->params[2]);
$itemId = urldecode($this->params[3]);

$UPDATE="UPDATE items SET Nombre='".$nombre."',Descripcion='".$descripcion."' WHERE itemId = ".$itemId;
$this->db->query($UPDATE);
$resp["Ok"] = true;
if (!empty($this->db->Error)) {
$resp["Ok"] = false;
$resp["Mensaje"] = $this->db->Error;
}
echo json_encode($resp);
}

function Eliminar() {
$itemId = urldecode($this->params[1]);

$DELETE="DELETE FROM items WHERE itemId = ".$itemId;
$this->db->query($DELETE);
$resp["Ok"] = true;
if (!empty($this->db->Error)) {
$resp["Ok"] = false;
$resp["Mensaje"] = $this->db->Error;
}
echo json_encode($resp);
}

function Listar() {
if (!empty($this->params[1])) {
$NoRegistro = $this->params[1];
} else { $NoRegistro = 0; }
if (!empty($this->params[2])) {
$LimiteRegistro = $this->params[2];
} else { $LimiteRegistro= 30; }

$SELECT="SELECT itemId, Nombre, Descripcion FROM items LIMIT " . $NoRegistro . " , " . $LimiteRegistro;
$this->db->query($SELECT);
echo $this->db->JSON();
}

}
?>

Como podemos ver se genero una clase  muy simple, el sistema que tenemos en el index.php nos permitirá llamar a los metodos y además nos enviará las propiedades para poder utilizarlas, el PHPDBC nos da la tranquilidad de las conecciones a SQL.

Con esto terminamos el tutorial de REST

Ver el Tutorial de Programación Móvil
RESTTutorialRapido Download

Anuncios

Acerca de Francisco Castán

Creador, Diseñador, Investigador y Programador de Software Lenguajes Preferidos: C/C++, C#, Java, PHP, Python, PERL, Shell, JavaScript

Publicado el 26/11/2012 en JSON, Móvil, PHPDBC, WebServices y etiquetado en , , , , , . Guarda el enlace permanente. 4 comentarios.

  1. No entiendo lo que dices:
    “para un dominio comprado /RESTTutorialRapido/ esta linea la podemos quitar.”

    Yo tengo el que tu aconsejas 000webhost.com
    ¿Cómo tendría que poner esa linea?

    Gracias de antemano y felices fiestas!!!

  1. Pingback: Aplicaciones Móviles conectadas a servidores en Linea « https://fcocastan.wordpress.com

  2. Pingback: Programando Clon MVC y WebApi en PHP (Parte 2) | https://fcocastan.wordpress.com

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: