Laravel API 404 error
Asked Answered
P

5

8

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        |
+--------+-----------+--------------------------------------------+----------------------+-----------------------------------------------------+------------+
Platonic answered 25/7, 2017 at 5:34 Comment(13)
The api.php routes are already prefixed with /api. You don't need to add this again yourself. With your current set-up, your route is localhost:8888/{projectname}/api/api/v1/meetingNull
I tried also delete api with routes and it shows The same errorPlatonic
You don't need /{projectname} in your request url.Peculation
Tried localhost:8888/api/v1/meeting ?Selfdeception
Yes and it shows same error 404Platonic
Please post the results of php artisan route:listSelfdeception
here is result of php artisan route:list 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 | apiPlatonic
What about homepage and other pages?Peculation
@Michael Chen When i go to localhost:8888/{project-folder}/{project-name}/public it shows normal laravel welcome page so it working properly. Only problem is with api. Nothing of solutions that was below doesn't work for me.Platonic
So, what about localhost:8888/{project-folder}/{project-name}/public/api/v1/meeting ?Mildredmildrid
@cbaconnier you are a genius it stars workingPlatonic
I am confused why you need project-folder and project-name in you url?Peculation
becouse in my htdocs folder I have project folder and I created another folder with command composer create laravel/laravel project-namePlatonic
H
5

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.

Harping answered 25/7, 2017 at 7:11 Comment(3)
You are right I changed it but still got 404 problem. Maybe there is other problem not with routes/api.php file.Platonic
ahh can you give me whats your server host config?Harping
Worked for me in Laravel 6.2Metabolite
G
10

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() {

}
Glutton answered 25/7, 2017 at 5:59 Comment(3)
It's not the problem with this route becouse I change it as you said and still have the same troublePlatonic
@KonradUciechowski ok please try it with localhost:8888/{projectname}/index.php/api/v1/meetingGlutton
Are you using php artisan serveor apache/nginx/...?Mildredmildrid
H
5

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.

Harping answered 25/7, 2017 at 7:11 Comment(3)
You are right I changed it but still got 404 problem. Maybe there is other problem not with routes/api.php file.Platonic
ahh can you give me whats your server host config?Harping
Worked for me in Laravel 6.2Metabolite
F
1

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.

Fistula answered 28/7, 2021 at 13:5 Comment(0)
T
0

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

Torquay answered 6/7 at 5:0 Comment(1)
As it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center.Calie
C
-1

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.

Chide answered 15/5, 2020 at 9:14 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.