Reputation: 486
I am making simple API with Laravel 5.4 and I have problem. I created routing and some data for tests but when I testing if routing work properly with Postman by putting localhost:8888/{projectname}/api/v1/meeting
it shows me error 404 page not found
. What am I doing wrong?
routes/api.php
<?php
Route::group(['prefix' => 'v1'], function() {
Route::resource('meeting', 'MeetingController', [
'except' => ['edit', 'create']
]);
Route::resource('meeting/registration', 'RegistrationController', [
'only' => ['store', 'destroy']
]);
Route::post('user', [
'uses' => 'AuthController@store'
]);
Route::post('user/signin', [
'uses' => 'AuthController@signin'
]);
});
MeetingController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class MeetingController extends Controller
{
public function __construct()
{
// $this->middleware('name');
}
public function index()
{
return "It works!";
}
public function store(Request $request)
{
return "It works!";
}
public function show($id)
{
return "It works!";
}
public function update(Request $request, $id)
{
return "It works!";
}
public function destroy($id)
{
return "It works!";
}
}
RegistrationController
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class RegistrationController extends Controller
{
public function store(Request $request)
{
return "It works!";
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
return "It works!";
}
}
AuthController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class AuthController extends Controller
{
public function store(Request $request)
{
return "It works!";
}
public function signin(Request $request)
{
return "It works!";
}
}
Output of command php artisan route:list
:
+--------+-----------+--------------------------------------------+----------------------+-----------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+--------------------------------------------+----------------------+-----------------------------------------------------+------------+
| | GET|HEAD | / | | Closure | web |
| | POST | api/v1/meeting | meeting.store | App\Http\Controllers\MeetingController@store | api |
| | GET|HEAD | api/v1/meeting | meeting.index | App\Http\Controllers\MeetingController@index | api |
| | POST | api/v1/meeting/registration | registration.store | App\Http\Controllers\RegistrationController@store | api |
| | DELETE | api/v1/meeting/registration/{registration} | registration.destroy | App\Http\Controllers\RegistrationController@destroy | api |
| | DELETE | api/v1/meeting/{meeting} | meeting.destroy | App\Http\Controllers\MeetingController@destroy | api |
| | PUT|PATCH | api/v1/meeting/{meeting} | meeting.update | App\Http\Controllers\MeetingController@update | api |
| | GET|HEAD | api/v1/meeting/{meeting} | meeting.show | App\Http\Controllers\MeetingController@show | api |
| | POST | api/v1/user | | App\Http\Controllers\AuthController@store | api |
| | POST | api/v1/user/signin | | App\Http\Controllers\AuthController@signin | api |
+--------+-----------+--------------------------------------------+----------------------+-----------------------------------------------------+------------+
Upvotes: 9
Views: 41128
Reputation: 1
Maybe you haven't make the api configuration
run
php artisan install:api
for automatically create all config for api
https://laravel.com/docs/11.x/routing#api-routes
Upvotes: 0
Reputation: 195
I would prefer adding Accept application/json header on client side to get JSON response. That’s the most straightforward way, but you would be surprised how many developers forget it, or don’t even know about it.
Upvotes: 2
Reputation: 941
Please don't use /api in your routes keep it simple like
Route::group(['prefix' => 'v1'], function() { //code goes here}
php artisan route:list
this will list all your routes if there is any error in the route then it will not be listed here.
Upvotes: -1
Reputation: 474
In Laravel 5.4, your routes/api.php
should look like this:
<?php
Route::prefix('v1')->group(function () {
Route::resource('meeting', 'MeetingController', [
'except' => ['edit', 'create']
]);
Route::resource('meeting/registration', 'RegistrationController', [
'only' => ['store', 'destroy']
]);
Route::post('user', [
'uses' => 'AuthController@store'
]);
Route::post('user/signin', [
'uses' => 'AuthController@signin'
]);
});
For more info, visit their docs here.
Upvotes: 5
Reputation: 1773
as in version 5.4 the api is already added in the end points so no need to add 'api' again in the url.
Please change from:
Route::group(['prefix' => 'api/v1'], function() {
}
To
Route::group(['prefix' => 'v1'], function() {
}
Upvotes: 10