Phalcon es un framework PHP open source que ofrece un alto rendimiento y un bajo consumo de recursos. Estas prestaciones se deben a que, a diferencia de otros frameworks, Phalcon se instala como una extensión C de PHP. Al ser una extensión de C:
Puedes descargar Phalcon en la zona de descargas de su web oficial. Allí están disponibles las descargas y las instrucciones de instalación para plataformas Linux, Mac, Windows, así como boxes Vagrant con entornos preconfigurados.
En este breve tutorial de configuración de Phalcon puedes encontrar los pasos para configurar Phalcon en una plataforma LAMP.
Antes de ver cómo crear una API REST para Redis usando Phalcon, veamos primero cómo montar un ejemplo sencillo sin complicarnos con la base de datos. Concretamente se trata de crear una API REST con dos métodos GET. El primer método GET es un método básico, sin parámetros, que simplemente nos dice la hora actual. El segundo método GET saluda a la persona que se pase como parámetro.
Crearemos un proyecto denominado HelloPhalcon
. Para nuestro ejemplo mínimo necesitaremos dos archivos:
.htaccess
que contiene todas las reglas para reescribir las URLs que lleguen a nuestra aplicación.index.php
en el que iniciaremos Phalcon, definiremos las rutas permitidas y definiremos los handlers (funciones asociadas) para cada una de las rutas permitidas.Entonces, la estructura básica de nuestro proyecto sería:
HelloRESTAPIPhalcon /
.htaccess
index.php
Puedes descargar este proyecto básico de API REST con Phalcon desde un repositorio en GitLab.
.htaccess
El archivo .htaccess
se usa para reescribir todas las peticiones que lleguen a nuestra aplicación. En concreto, todas las URL’s se reescribirán hacia al archivo index.php
, que será el que se encargue de implementar cómo dar respuesta a las peticiones permitidas por nuestra API.
Siempre utilizaremos el mismo archivo .htaccess
. Por tanto, lo podremos copiar de proyectos anteriores.
index.php
Con Phalcon podemos crear aplicaciones “Micro-Framework”. Esto nos permite crear una aplicación PHP con muy poco código. Las aplicaciones Micro son adecuadas para implementar prototipos de una forma sencilla y APIs, éstas últimas el objetivo de este tutorial.
Para crear el archivo index.php
de una API REST con Phalcon
básicamente deberemos seguir cuatro pasos:
\Phalcon\Mvc\Micro()
, responsable de implementar la aplicación Micro./
. También incluiremos un método HTTP para indicar que sólo se atienda la petición para la ruta y el método HTTP indicados.handle()
de la clase \Phalcon\Mvc\Micro()
index.php
A continuación se muestra un archivo index.php
que tomaremos como punto de partida. En él:
\Phalcon\Mvc\Micro()
, responsable de implementar una aplicación Micro.handle()
, encargado de atender la petición que se ajuste a una de las rutas permitidas.index.php
Nuestra API REST sólo atenderá las rutas que indiquemos.
En nuestro caso sólo atenderemos dos rutas: say/date
, que nos dice la fecha actual; y /say/hello{name}
, que saluda a la persona que se pase como parámetro.
A la ruta say/date
le asociaremos una función denominada currentDate()
. A la ruta say/hello{name}
le asociaremos una función denominada greeting($name)
. Ambas funciones se podrán implementar de forma anónima al declarar la ruta, o bien implementarlas aparte. En este tutorial las implementaremos aparte, ya que produce un código más legible.
La función currentDate()
para este ejemplo sencillo se limita a mostrar la fecha actual
Ahora veremos cómo pasar parámetros en una llamada a nuestra API. En nuestro ejemplo pasaremos un nombre a la ruta say/hello{name}
para que la función greeting($name)
salude a la persona con el nombre pasado como parámetro.
Sin embargo, suele ser habitual que el resultado de una petición GET en una API REST sea una cadena JSON. En PHP la podemos construir creando un array para mostrarlo con la función echo json_encode()
Un detalle que no debemos olvidar es qué debe mostrar nuestra aplicación cuando se solicita una ruta no válida. De forma predeterminada, dado que el control de las rutas lo ha tomado nuestro index.php
, si no se encuentra una ruta, no se mostraría nada.
Si queremos informar de un error, nuestra aplicación tendrá que implementar un handler Not Found en el index.php
.
index.php
preparadoUna vez que hemos visto la técnica para crear una API REST básica PHP usando Phalcon, es importante comenzar el desarrollo de una API REST definiendo la API. En dicha definición se describirán los métodos HTTP permitidos. Para el ejemplo desarrollado tendríamos
Método | URL | Descripción |
---|---|---|
GET | /say/date | Muestra la fecha actual |
GET | say/hello/Manolo | Devuelve un saludo JSON a partir del nombre ‘Manolo’ |
Puedes descargar el código del ejemplo básico de API REST con Phalcon del repositorio de GitHub.
Aquí veremos cómo implementar una API REST para Redis con los métodos básicos: GET, POST, PUT y DELETE.
Para ilustrar la creación de una API REST para Redis usando Phalcon nos limitaremos a mostrar los cuatro ejemplos básicos:
Método | URL | Descripción |
---|---|---|
GET | /api/{key} | Devuelve el valor JSON a partir de la clave proporcionada |
POST | api/ | Crea el nuevo par clave-valor proporcionado |
PUT | api/{key} | Modifica la clave especificada con el valor proporcionado |
DELETE | api/{key} | Elimina la clave especificada |
Operación | Uso |
---|---|
SELECT | curl -i -X GET http://appLocation/api/foo |
INSERT | curl -i -X POST -d '{"key":"foo", "value":"bar"}' http://appLocation/api |
UPDATE | curl -i -X PUT -d '{"value":"bar2"}' http://appLocation/foo |
DELETE | curl -i -X DELETE http://appLocation/api/foo |
La estructura básica de nuestro proyecto sería:
HelloRedisRESTAPIPhalcon /
.htaccess
index.php
.htaccess
El archivo .htaccess
se usa para reescribir todas las peticiones que lleguen a nuestra aplicación. Comentamos anteriormente que siempre utilizaremos el mismo archivo .htaccess
. Por tanto, lo podremos copiar de proyectos anteriores.
index.php
Nuestra API REST sólo atenderá las rutas siguientes:
En el código anterior también se indican los handlers que se encargarán de atender cada petición.
El handler home
se encarga de mostrar el uso de la API.
El handler notFound
redirigirá la ejecución al handler home
, y mostrará el uso de la API en caso de acceder a una URL no válida.
index.php
array(clave => valor)
.$app->request->getRawBody()
proporciondo por Phalcon. Dicho método contiene los datos leídos en forma de array asociativo.index.php
Puedes descargar el código del ejemplo básico de API REST para Redis con Phalcon del repositorio de GitHub.