Tutorial Sobre Como Crear Tu API

by manelgarcia on February 19, 2010

in PHP, Recursos

Bien, esta vez sí, a petición del público y con retraso (perdón por la espera, pero ando muuy liado) intentaré explicar las bases para que uno por sí sólo pueda crear una API para su sitio web.

¿Que es una API?

Una API o Application Programming Interface es un grupo de funciones que permiten que desarrolladores puedan acceder a tus datos, de tal forma que puedan comunicarse con la base de datos sin necesidad de disponer del código fuente de nuestro sitio.

Sin ir más lejos Windows dispone de una API para que las empresas desarrollen software para su sistema operativo. Los pioneros en lanzar API’s en internet creo que fueron Amazon y eBay.

¿Para que sirve una API?

Las APIs son una herramienta perfecta para poder extender tu aplicación más allá de tu sitio web y crear aún más comunidad alrededor de tu marca. Una buena API puede permitir a nuestros usuarios que creen Mashups con tus datos cruzados con otros y de esta manera acceder a mucho más gente de la que nuestro site pueda abarcar.

El ejemplo más claro es Twitter que con su API ya se han creado más de 6000 sitios en toda internet que disponiendo de los datos de los usuarios de twitter pueden crear multitud de aplicaciones para ayudar o añadir valor al servicio. Sin duda todo un éxito.

Empecemos a Construir Nuestra API

Digamos que nuestra API puede disponer o no de dos grandes funcionalidades:

  • Recojer y disponer de los datos de nuestro sitio para mostrarlos de la forma conveniente
  • Alterar esos datos, cosas cómo modificar datos, añadir nuevos o eliminarlos.

Si la API que queremos contruir no necesita de autentificaión para usarla, las llamadas API Keys, puede ser una buena solución que nuestra API se comunique mediante el servidor usando GET y la url, así pues una consulta para eliminar el articulo numero 5 sería algo cómo:

http://misitio.com/api/borrar/5

Pero si son muchos los parámetros a enviar o creemos que nuestra API debe disponer de algo de seguridad para poder ser usada la mejor opción va a ser escoger el método POST. Este sistema nos va a permitir comprobar antes de empezar a procesar la información que la petición tenga los permisos correctos.

SOAP vs REST

Hay dos tipos de APIs usadas para en cuanto a web nos referimos. Google por ejemplo usa SOAP y Yahoo usa REST, vamos a ver que es cada cosa:

  • API’s con REST: Se basan en llamadas HTTP mediante URI y el formato de la respuesta la podemos definir nosotros. Normalmente las APIs con REST són más rápidas y fáciles de implementar.
  • Las APIs con SOAP suelen ser un poco más complicadas y necesitan la instalación de un plugin dependiendo del lenguaje de programación que estemos usando, en PHP o Python por ejemplo es necesario. Las APIs con SOAP se asemejan más a un sistema de métodos, así, para hacer la misma llamada que antes haciamos mediante URI (usando REST), en SOAP sería algo cómo:
    $api->borrar(5)

Nosotros en este caso y aclarando desde un principio que esto es una inicición y un primer enfoque a cómo debería construirse una API y cuales son nuestras opciones, usaremos REST para este post.

Código y Lo Que Ya Debemos Tener

En este ejemplo doy por supuesto que disponemos de una clase que nos permite interactuar con la base de datos y devolvernos datos, algo como:

class Data {

private $id;

function _construct($id){
$this->id = $id;
}

function borrar($id){
mysql_query("DELETE * FROM articulos WHERE id = '$id'");
// etc.. etc..
}

}

En nuestro server haríamos lo siguiente:

include 'class/class.Data.php';
$obj = new Data();
$obj->borrar(5);

Genial hasta aquí, pero cómo lo hacemos para alguien que no tiene acceso a nuestro servidor?
Debemos crear una especie de interfaz entre el usuario y nuestra classe, entonces nuestro archivo alojado en ‘api/borrar.php’ queradía así:

include '../class/class.Data.php';
if(permiso( $_POST['api_key'] )){
$obj = new Data();
$obj->borrar(5);
}

Eso va a permitir a nuestros usuarios de la API que envien consultas POST al archivo ‘api/borrar.php’ y si la clave es la correcta le permitiremos hacer la acción. Entendemos que la función permiso() debe comprobar que esta clave esta aceptada dentro de nuestra base de datos.

La Petición

Para realizar la petición HTTP vamos a usar cURL de PHP que va genial y es muy fácil de usar sencillamente necesitamos definir la URL que vamos a llamar y los parametros de la llamada:

// definimos nuestras variables POST
$post_vals = array(
    'api_key' => '0123456789',
    'id' => '5'
);

foreach($post_vals as $key => $value) {
    $peticion .= $key.'='.urlencode($value).'&';
}

$peticion = rtrim($peticion, '&');

$ch = curl_init('http://misitio.com/api/borrar.php');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $peticion);
$respuesta = curl_exec($ch);
curl_close ($ch);
);

La Respuesta y su Formato

Cómo nos lo vamos a hacer para dar la respuesta a la petición? Hay varias maneras, las más conocidas son mediante XML o JSON, el consejo es que si puedas ofrezcas las dos formas.

Otra cosa a tener en cuenta y no olvidar es dar las respuestas a los procesos si todo ha funcionado correctamente o si ha fallado alguna cosa, para que el usuario final sea capaz de poder crear una pequeña función isSuccess() etc…

Un ejemplo de respuesta en XML podria ser:

<respuesta estado="ok">
<metodo>borrar</metodo>
<formato>rest</formato>
<id>5</id>
<api_key>01234567890</api_key>
</respuesta>

Disclaimer: Todo el post esta explicado sobre el método borrar, aunque si hacemos un ejercicio de refleción pronto nos daremos cuenta que un método de estos sólo nos puede perjudicar!

Links de interés

{ 17 comments… read them below or add one }

gafeman February 23, 2010 at 2:57 pm

buen tutorial manel!

Omar February 23, 2010 at 3:36 pm

Puede que sea un poco quisquilloso, pero notar que si queremos hacerlo una ‘buena’ API RESTful convendría usar los propios métodos de HTTP. Por lo que para borrar un recurso usaríamos el método DELETE, para actualizar PUT, para insertar POST y GET para consulta.

Saludos.

manelgarcia February 25, 2010 at 4:16 pm

Tienes razón!, gracias por tu comentario!

Bernardo February 27, 2010 at 3:54 pm

Puedo trabajar con linux, para las api, desarrollos web?, gracias bernardo.

galax May 10, 2010 at 1:59 am

es basico y funcional pense que era mas avanzado, cuando empezamos la segunda fase de este tutorial para llenarnos de aportes..

hacklucas May 14, 2010 at 11:50 pm

ola man,

pero como accedes a algo asi: tienes http://misitio.com/api/borrar.php en un server y
quieres jalarlo con json desde otro como harias el codigo javascript

porfa ayuda, gracias

Jesus Coral October 23, 2010 at 1:56 am

Excelente tema. Estoy por crear mis api’s, empezaré con las de consulta y luego con inserts. También esperando una segunda entrega, sino es mucho pedir jeje.

Gracias por compartir.

Jesus Coral October 23, 2010 at 3:01 am

Acabo de implementar mi primera api !! Pensé que me daría más trabajo jeje. Aquí pueden ver el ejemplo:

Hice una consulta desde http://www.altumasesores.com/bolsa_trabajo.php accediendo a las clases de http://www.mivacante.com

Muchísimas gracias Manel.

manelgarcia October 28, 2010 at 2:00 pm

Genial Jesus,

Estoy muy contento que te haya funcionado!

Un saludo y gracias a tí por comentar!

manelgarcia October 28, 2010 at 2:02 pm

Gracias, espero que te salga bien, cualquier duda, perguntame!

Ahora tengo poco tiempo, pero cuando me vuelva a poner en ello hago una segunda enterga con ejemplos prácticos :)

Saludos!

max henrry December 22, 2010 at 9:22 pm

ahy algo que me deja perprejo si es un api y si solo mostrare datos de mi base de datos para que otros lo muestren en sus web en que forma tendrian permisos o cuales serian los code para que ellos puedan mostrar mi base de datos en su web siendo api este tutorial que has echo!

sofia June 1, 2011 at 7:51 pm

Buenas, mi normbre es sofia y tengo una web en la que necesito poner en la zona de pago una integracion donde realizar llamadas a la API de mi web zona de pago a mi sponsor y la verdad no tengo ni idea, jeje, si no es mucho pedir si alguien pudiera explicarme como se hace lo agradeceria, espero respuesta lo antes posibre… Saludoss

manelgarcia June 4, 2011 at 2:21 pm

lo que preguntas es difícil de explicar sin previas consideracions sobre que tipo de servicos estas usando etc..

en todo caso te recomiendo buscar a alguien experto en el tema para que te pueda ayudar a hacer todo eso, felicidades por la web!

un saludo!

Ultimo August 10, 2011 at 9:10 pm

Este es el ultimo comentario, no agregen mas, jeje.

Martin October 20, 2011 at 11:57 pm

Hola manel, yo quiero usar un CMS el cual es el siguiente Interspire Shopping Cart, este CMS trae muchas apis para pagos de todo el mundo, pero quiero implemetar la api de DineroMail (sistema de pago en Argetina), tengo la api de ellos pero no se como meterla en el CMS… espero que me puedas ayudar, si quieres por correo te voy consultando cuando tengas un tiempo…

Desde ya te agradezco

Saludos desde Argentina

Alejandro December 17, 2011 at 7:27 pm

Estoy de acuerdo con Omar se tiene que utilizar metodos HTTP apropiadamente para cada accion.

viviana March 29, 2012 at 12:47 am

Hola sofia…. algo muy parecido debo realizar. Me encantaria saber si lograste encontrar informacion.
Gracias

Leave a Comment

{ 4 trackbacks }

Previous post:

Next post: