Simple api rest con php

Simple api rest con php

Existen algunos proyectos en los que vamos a poder necesitar una pequeña api que nos sirva algunos datos y a la que podamos conectarnos desde diferentes lenguajes de programación y diferentes plataformas. Para hacer un api siempre es recomendable utilizar algún framework que nos facilite la tarea, pero si lo que necesitamos es realmente simple y no sabemos o no queremos aprender a utilizar ningún framework nuevo, lo podemos hacer directamente con un archivo php en unas pocas lineas.

Configurar el htaccess

El primer paso aunque este también es prescindible si queremos simplificar todavía más, sería crearnos un htaccess que pueda gestionar las llamadas a nuestra api simple. El código quedaría así:

RewriteEngine on
RewriteBase /
RewriteRule ^([a-zA-Z0-9_-]*)/$ index.php?opcion=$1

Con esto podríamos tener llamadas del tipo “nuestraapi.com/listar_canales/” y nuestro index.php serviría esas llamadas como si de un directorio interno se tratara, algo que queda muy organizado y profesional. Aunque también podríamos prescindir de este paso y tener llamadas del tipo nuestraapi.com/index.php?opcion=listar_canales, la cual devolvería el mismo resultado pero estéticamente queda mucho peor.

Nuestro archivo index.php

Para que nuestra api sea simple de verdad, vamos a meter todas las funciones y la programación que necesitemos en un solo fichero php, el cual podemos complicar todo lo que queramos, pero si vas a complicarlo mucho, mejor que valores utilizar algún framework o crear una estructura más compleja.

Empezamos por crear la linea que mostrará la salida que hagamos por pantalla en un fichero JSON:

header(‘Content-Type: application/json’);

Ahora añadiremos nuestras funciones, la primera que hago es la gestión de los errores para que los pueda mostrar como un JSON y podamos gestionarlos y manejarlos:

function error($mensaje){
$respuesta = array(
“tipo” => “error”,
“msj” => $mensaje
);
return $respuesta;
}

La siguiente función, es para conectarme con la base de datos, en mi caso lo necesito, pero puede que en proyectos pequeños no nos haga falta:

function conectar_basedatos(){
$usuario = “usuario”;
$password = “pass”;
$db = new PDO(‘mysql:host=localhost;dbname=tabla’, $usuario, $password);
return $db;
}

Ahora ya empezamos con las funciones que devolverán resultados, yo para este ejemplo necesitaba listar todas las compañías y los sectores a los que pertenece cada una, la función me devolverá un array con todas las compañías que existen en la base de datos o si algo no va bien un array con el error formateado por la función anterior:

function listar_companya(){
$companyas = array();
try {
$db = conectar_basedatos();
foreach($db->query(‘SELECT * from company’) as $fila) {
$companya = array(
“id” => $fila[‘id’],
“sector” => $fila[‘sector’],
“nombre” => $fila[‘nombre’],
“fecha” => $fila[‘fecha’]
);
array_push($companyas, $companya);
}
} catch (PDOException $e) {
return error($e->getMessage());
}
return $companyas;
}

Una función más a modo de ejemplo, para calcular un precio, he omitido el código que calcula este precio, ahí debemos poner las funciones que nos hagan falta para cada proyecto:

function calcular_precio(){
try{
$precio = array(
“precio” => “200”,
“fecha” => “2018-01-01”
);
} catch (Exception $e){
return error($e->getMessage());
}
return $precio;
}

Como se puede ver, siempre capturamos el error y lo mostramos formateado para poder trabajar con el posteriormente, esto es muy importante.

Por último el código que ejecutará cada función, dependiendo de la llamada a nuestra api que se haya realizado, esto lo podemos hacer todo lo grande que queramos, pero como ya hemos avisado, si necesitas algo más grande, yo me plantearía utilizar frameworks o incluso otro lenguaje más efectivo.

if($_GET[‘opcion’]==’listar_companyas’){
echo json_encode(listar_companya());
}elseif ($_GET[‘opcion’] == ‘calcular_precio’) {
echo json_encode(calcular_precio());
}else{
echo json_encode(error(“No se ha especificado parametro”));
}

Y con esto ya tendremos nuestra simple api en php operativa, a continuación os pego todo el código del fichero php junto, para que podáis copiar y pegar fácilmente.

api simple php
Resultado de ejecutar la función calcula precios

 

<?php
//ini_set('display_errors', 1);
//ini_set('display_startup_errors', 1);
//error_reporting(E_ALL);
header('Content-Type: application/json');

function error($mensaje){
    $respuesta = array(
        "tipo" => "error",
        "msj" => $mensaje
    );
    return $respuesta;
}
function conectar_basedatos(){
    $usuario = "usuario";
    $password = "pass";
    $db = new PDO('mysql:host=localhost;dbname=tabla', $usuario, $password);
    return $db;
}
function listar_companya(){    
    $companyas = array();
    try {
        $db = conectar_basedatos();
        foreach($db->query('SELECT * from company') as $fila) {
            $companya = array(
                "id" => $fila['id'],
                "sector" => $fila['sector'],
                "nombre" => $fila['nombre'],
                "fecha" => $fila['fecha']
            );
            array_push($companyas, $companya);
        }        
    } catch (PDOException $e) {
        return error($e->getMessage());
    }    
    return $companyas;
}

function calcular_precio(){
    try{
    $precio = array(
        "precio" => "200",
        "fecha" => "2018-01-01"
    );
    } catch (Exception $e){
        return error($e->getMessage());
    }
    return $precio;
}

if($_GET['opcion']=='listar_companyas'){
    echo json_encode(listar_companya());    
}elseif ($_GET['opcion'] == 'calcular_precio') {
    echo json_encode(calcular_precio());
}else{
    echo json_encode(error("No se ha especificado parametro"));
}
?>

 

Deja un comentario