I'm trying to create my 1st API on Laravel 8, and want to create versioning that would look like this
https://domain/api/v1/users
My user controller looks like this
namespace App\Http\Controllers\Api\V1;
use App\Models\User;
class UserController
{
public function getUser(int $idUser)
{
$user = User::find($idUser);
return new \App\Http\Resources\V1\User($user);
}
}
in my config/app.php i have this
'api_latest' => '1',
in my middleware (app\Http\Middleware\APIVersion.php)
namespace App\Http\Middleware;
use Closure;
class APIVersion
{
public function handle($request, Closure $next, $guard)
{
config(['app.api.version' => $guard]);
return $next($request);
}
}
in my kernal (app/http/kernel.php)
protected $routeMiddleware = [
// ...
'api_version' => App\Http\Middleware\APIversion::class,
];
in my /app/Providers/RouteServiceProvider.php
/** @var string $apiNamespace */
protected $apiNamespace ='App\Http\Controllers\Api';
protected function mapApiRoutes()
{
Route::group([
'middleware' => ['api', 'api_version:v1'],
'namespace' => "{$this->apiNamespace}\V1",
'prefix' => 'api/v1',
], function ($router) {
require base_path('routes/api_v1.php');
});
}
and in my routes/api_v1.php i have this
Route::middleware('api_version')->get('/user', function (Request $request) {
return $request->user();
});
I'm getting a 404 error when i type this in the browser https://domain/api/v1/users and how do i return a json error instead of a html page for this route?
UPDATE
php artisan route:list gives me this
+--------+----------+------------------------+----------------------+------------------------------------------------------------------------+------------+
| Domain | Method | URI | Name | Action
| Middleware |
+--------+----------+------------------------+----------------------+------------------------------------------------------------------------+------------+
| | GET|HEAD | / | | Closure
|
| | GET|HEAD | home | home | App\Http\Controllers\HomeController@index
| web |
| | | | |
| | GET|HEAD | login | login | App\Http\Controllers\Auth\LoginController@showLoginForm | web |
| | | | |
| guest |
| | POST | login | | App\Http\Controllers\Auth\LoginController@login | web |
| | | | |
| guest |
| | POST | logout | logout | App\Http\Controllers\Auth\LoginController@logout | web |
| | GET|HEAD | password/confirm | password.confirm | App\Http\Controllers\Auth\ConfirmPasswordController@showConfirmForm | web |
| | | | |
| auth |
| | POST | password/confirm | | App\Http\Controllers\Auth\ConfirmPasswordController@confirm | web |
| | | | |
| auth |
| | POST | password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail | web |
| | GET|HEAD | password/reset | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web |
| | POST | password/reset | password.update | App\Http\Controllers\Auth\ResetPasswordController@reset | web |
| | GET|HEAD | password/reset/{token} | password.reset | App\Http\Controllers\Auth\ResetPasswordController@showResetForm | web |
| | GET|HEAD | register | register | App\Http\Controllers\Auth\RegisterController@showRegistrationForm | web |
| | | | | | guest |
| | POST | register | | App\Http\Controllers\Auth\RegisterController@register | web |
| | | | | | guest |
+--------+----------+------------------------+----------------------+------------------------------------------------------------------------+------------+