Laravel Api

2021 January 31st

Now to build a RESTful API using Laravel 8.x learn by doing. As mobile development and JavaScript frameworks become more popular even the norm, it is nessarary to learn how RESTful apis work. Laravel an open-source PHP model–view–controller (MVC) web framework, created by Taylor Otwell. An opinionated PHP application framework as apposed to for example ExpressJS a minimal, un-opinionated JavaScript framework of which i will cover in another post.

In this post I am going to a build an MVC App single interface with a user login to a MySql DataBase (DB). Feel free to explore / reference / download or clone the repo GitHub

REST stands for REpresentational State Transfer.

HTTP VerbCRUDEntire Collection (e.g. /users)Specific Item (e.g. /user/{id})
POSTCreate201 (Created), 'Location' header with link to /users/{id} containing new ID.404 (Not Found), 409 (Conflict) if resource already exists..
GETRead200 (OK), list of users. Use pagination, sorting and filtering to navigate big lists.200 (OK), single user. 404 (Not Found), if ID not found or invalid.
PUTUpdate/Replace405 (Method Not Allowed), unless you want to update/replace every resource in the entire collection.200 (OK) or 204 (No Content). 404 (Not Found), if ID not found or invalid.
PATCHUpdate/Modify405 (Method Not Allowed), unless you want to modify the collection itself. 200 (OK) or 204 (No Content).404 (Not Found), if ID not found or invalid.
DELETEDelete405 (Method Not Allowed), unless you want to delete the whole collection—not often desirable.200 (OK). 404 (Not Found), if ID not found or invalid.

Getting set up

First install Get Composer a dependency manager for PHP. After composer installation run the below commands in your cli.

1$ composer global require laravel/installer
2$ laravel new myapp
3$ php artisan serve

Laravel localhost development server started:


Laravel App

Install MySQL, if using MacOS or Linux I recommend using then run the below command.

1brew services start mysql

if you run into an issue like I did, having a prevoius installed version of MySQL here is the solution I used

I am using Migrate it's like version control for our DB read more here Laravel 8.x Migrations

1php artisan make:seeder ArticlesTableSeeder
3namespace Database\Seeders;
5use Illuminate\Database\Seeder;
7class ArticlesTableSeeder extends Seeder
9 /**
10 * Run the database seeds.
11 *
12 * @return void
13 */
14 public function run()
15 {
16 // lets: truncate our existing records to start from scratch
17 Article:truncate();
19 $faker = \Faker\Factory::create();
21 // lets create some articles in our DB
22 for($i = 0; $i < 50; $i++) {
23 Article::create([
24 'title' => $faker->sentence,
25 'body' => $faker->paragraph
26 ]);
27 }
28 }

php artisan make:seeder UsersTableSeeder

Database Seeding

API throttling and Authenication middleware:


Routes and Controllers Create the test folder (if it does not exist) then create TestController inside. basic endpoints for our application: create, retrieve the list, retrieve a single one, update, and delete. On the routes/api.php file, we can simply do this:

1php artisan make:controller Article/ArticleController

HTTP Status Codes and the Response Format

Sending a Correct 404 Response

Laravel 8.x Handler.php return a JSON response, in Laravel 8x, render exceptions in the register() method. Laravel Errors: Rendering Exceptions

Laravel errors configuration add Throwable

Laravel passport

php artisan make:migration --table=users adds_api_token_to_users_table authentication

Medium simple authentication Laravel 8

Laravel frontend introduction npm install && npm run dev php artisan ui vue --auth

Laravel App

Toptal RESTful Laravel API tut

Laravel Docs Quick

Laravel Docs 8.x

Laracasts MySql

Riptutorial creating seeder

free web hosting

Techradar: best free web hosting


React Basics

theWhiteFox Web Dev ! © 2021 | Made with Gatsby