Progettazione di una piccola API sul lato / per divertimento / per esperienza. Un problema che ho incontrato è il routing URI. Il problema è:
GET /users/{id} // Get user data
GET /users/availability // Get all users' availability
Entrambe le mappe si riferiscono allo stesso controller @ metodo basato su quale viene prima nel mio file Routes.php.
La funzione che sto utilizzando per trovare effettivamente i percorsi è la seguente:
public function find($request)
{
foreach($this->collection[$request->method] as $route)
{
$pattern = "'^".preg_replace('/{[a-zA-Z0-9\_\-]+}/', '([a-zA-Z0-9\-\_]+)', $route->uri)."$'";
if (preg_match($pattern, $request->resource, $matches))
{
array_shift($matches);
$route_package = ['route' => $route, 'params' => $matches];
return $route_package;
}
}
return null;
}
Non riesco davvero a vedere un RegExp in grado di risolvere questo problema. L'unica idea che avevo era di limitare gli ID delle risorse ai numeri interi ma poi non posso usare le date come l'ID della risorsa come nel caso di:
GET /calendar/2017-07-11 // Returns data about 2017-07-11