Page 122 - 0149-curso-laravel-5_Neat
P. 122
Laravel 5
class PhotoController extends Controller {
public function __construct() {
$this->middleware('auth');
$this->middleware('log', ['only' => ['store', 'update', 'destroy']]);
}
}
Definir una API mediante controladores
RESTful
Si queremos definir una API, ya sea mediante controladores tipo RESTful o controladores
normales, es recomendable que utilicemos el fichero de rutas routes/api.php en lugar de
routes/web.php . En este fichero las rutas se definen exactamente de la misma forma que
hemos estado viendo hasta ahora, usando la clase Route , los métodos get , post , put
y delete , los controladores de recursos, los grupos de rutas, middleware, parámetros, etc.
Además, al ejecutar el comando php artisan route:list estas rutas aparecerán en el
mismo listado. Por lo que... ¿en qué se diferencian? Las diferencias entre estos ficheros de
rutas son dos:
Los filtros o middleware que se utilizan: Mientras que en routes/web.php se aplican
filtros para inicializar la sesión, las cookies, los bindings y la protección CSRF; en las
rutas que se añadan a routes/api.php únicamente se aplican filtros para limitar el
número de peticiones y para cargar los bindings (la inyección de dependencias). Esto lo
podemos ver si editamos el fichero app/Http/Kernel.php , donde dentro de su array
$middlewareGroups veremos dos grupos: web y api , con los filtros que se aplican en
cada caso.
El prefijo de las rutas: A todas las rutas que especifiquemos en routes/api.php se les
añadirá el prefijo api . Por lo que si añadimos la ruta users para devolver el listado
de usuarios, para realizar la consulta tendremos que acceder a api/users . Esto lo
podemos comprobar en el listado de rutas que muestra Artisan.
Estas diferencias aportan varias ventajas, por un lado tenemos separadas todas las rutas
de la API tanto en un fichero distinto como por un prefijo, por lo que no se mezclarán los
distintos tipos de rutas de nuestro sitio web. Además, las peticiones a las rutas de la API no
tienen que cargar middleware innecesario, permitiéndonos también definir otros filtros
propios de una API, como el de rate limit. Las peticiones a estas rutas no mantendrán
sesión, por lo tanto se tendrán que autenticar bien mediante tokens o mediante seguridad
HTTP básica (usando las cabeceras de la petición). Además, en las respuestas no
tendremos que devolver una vista (con HTML), sino directamente el dato o la lista de datos
solicitados en formato plano, en XML o en JSON.
Controladores de recursos RESTful 122