Configurar límites y api keys en Restler
Configurar límites y api keys en Restler

En este tutorial vamos a ver lo sencillo que es configurar límites y api keys en Restler de forma dinámica utilizando Doctrine, tendremos una tabla llamada api_keys donde guardaremos la información de cada key, con tres campos, api_key, rate_time, unit_limit y grant, vamos a explicar para que será cada uno de ellos.

  • api_key: clave para acceder y poder consumir determinados recursos de la api.
  • rate_time: número de {unit_limit}, por ejemplo, si es 5 y unit_limit es hours, 5 peticiones cada hora con esa key.
  • unit_limit: second, minute, hour, day, week, month.
  • grant: a través de anotaciones podremos dar a cada método o clase determinados accesos, con este campo sabremos si la api_key puede acceder.

Si tienes dudas con Restler o directamente no lo conoces te recomiendo revisas estos tutoriales.

Nosotros vamos a partir con el proyecto generado en este tutorial donde utilizamos doctrine, así que vamos a generar una nueva entidad llamada ApiKey con el siguiente código.


Para generar la tabla a partir de la entidad simplemente ejecuta el siguiente comando en tu terminal.


Vamos a añadir algunas keys de ejemplo para poder hacer pruebas.


El primer registro podrá realizar 10 peticiones a la hora, y los otros dos 5 cada minuto, el último valor es clave para saber si podrán acceder o no al recurso, para entenderlo, vamos primero a crear la clase AccessControl.


Implementando la interfaz \Luracast\Restler\iAuthenticate y su método __isAllowed podemos saber si el usuario puede acceder a determinados recursos de la api simplemente devolviendo un booleano, true puede acceder, false no tiene permisos suficientes, no tenemos que hacer nada más.

Ahora vamos a modificar la entidad User creada en tutoriales anteriores para permitir el acceso a través de la anotación requires a determinados métodos.


En el anterior caso, al método index podrá acceder cualquiera sin la necesidad de una api_key (*), al método get podrán acceder quienes en el campo grant de la tabla api_keys tengan private o master, y así con el resto, y todo será manejado por Restler de forma interna sin que tengamos que hacer nada más.

De la misma forma que hemos aplicado las anotaciones para cada método, también podemos aplicar anotaciones para toda la clase, simplemente debemos mover la anotación encima de la definición de la clase.


Y eso es todo, espero que te sea de ayuda.