
Good content takes time and effort to come up with.
Please consider supporting us by just disabling your AD BLOCKER and reloading this page again.
Hello There! I am back with another article on in my previous article I had shown you how to create Resourceful Controller for web in What Is Laravel Resourceful Controllers? article.
In this article I will show you how to
Laravel installed in your computer or server. To install Laravel you can use the following
composer create-project --prefer-dist laravel/laravel invoice
Since I already had ProductsController
for web.php demonstration I created ProductApiController
for demonstrating the Resourceful API controller with routes inside api.php. And I am using Product
as model name which resides inside App/Models/Product.php
php artisan make:controller ProductsApiController --api --resource
--resource
- This parameter specifies that we are creating the resourceful controller.
--api
- Specifies that we are creating API controller.
API resourceful controller creates the following functions inside ProductApiController
index() store() show() update() destroy()
Observe that it has not created
create() edit()
As we are creating REST API Controller here we don't need any create()
or edit()
view pages.
Another beautiful thing what you can do with Laravel is specify the Model while creating the Resourceful API Controller because for Route Model Binding
.
If you would like to learn more on route model binding then refer my article @ Route Model Binding In Laravel
php artisan make:controller ProductsApiController --api --resource --model Models/Product.php
--model
- Since my Product.php
model resides in App/Models/Product.php
I have give the path as Models/Product.php
. If you have model directly as App/Product.php
then you can give --model Product.php
But as far as I know Route Model Binding with API's is bit tricky and sneaky one.
Instead of adding individual API routes in api.php
file you can simply add the following code. This will create the routes automatically for us.
Route::apiResource('products', 'ProductsApiController');
You can also register multiple API routes at once with the following code
Route::apiResources([
'photos' => 'ProductsController',
'posts' => 'InvoiceController'
]);
In the above line observer apiResource
carefully. This will generate API routes only.
To check the list of available routes you can use the following command
php artisan route:list
You will be able to see similar to the following output. You will be able to see other fields along with the 3 columns I have actually filtered the columns with the following command
php artisan route:list --columns=Method,URI,Action
+-----------+-------------------------+----------------------------------------------------+
| Method | URI | Action |
+-----------+-------------------------+----------------------------------------------------+
| GET|HEAD | api/products | App\Http\Controllers\ProductsApiController@index |
| POST | api/products | App\Http\Controllers\ProductsApiController@store |
| GET|HEAD | api/products/{product} | App\Http\Controllers\ProductsApiController@show |
| PUT|PATCH | api/products/{product} | App\Http\Controllers\ProductsApiController@update |
| DELETE | api/products/{product} | App\Http\Controllers\ProductsApiController@destroy |
We saw how to add the automatic routes inside our api.php
, just incase if you feel secured or want very few routes with few modifications then you can use the following way
api.php
Route::get('/products', 'ProductsApiController@index');
Route::post('/products', 'ProductsApiController@store');
Route::get('/products/{product}', 'ProductsApiController@show');
Route::patch('/products/{product}', 'ProductsApiController@update');
Route::delete('/products/{product}', 'ProductsApiController@destroy');
Even these routes can be access with api prefixed with it. as follows
http://your_domain.com/api/products
http://your_domain.com/api/products/product_id
Now lets have a look at our implementation part. Basically here I will show you some tips
Basically in REST validation you need to return the JSON response. You can use the following way to validate and return the JSON response.
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'name' => 'required',
'product_image' => 'required',
]);
if ($validator->fails()) {
return response()->json([
'status' => 'error',
'errors' => $validator->errors()
], 400);
}
Observe the following from the above code. We are using Validator
to check the validation. It takes 2 parameters 1st is the POST form details we get this in Request $request
variable, 2nd parameter takes the rules to validate the form data.
Validator::make($request->all(), [
'name' => 'required',
'product_image' => 'required',
]);
We need to return if any validation fails. This needs to be in JSON
response. Laravel provides simple way to achieve the same.
return response()->json(data_need_to_send, status_code);
1st Parameter (Data)- Usually the array of data that you need to send
2nd Parameter (Status Code) - This is the status code that needs to be sent if any success or errors
I basically use the following format for success
return response()->json([
'status' => 'success',
'message' => 'List of products.',
'data' => [
'products' => $product
]
], 200);
For errors I use the following format
return response()->json([
'status' => 'error',
'message' => $e->getMessage(),
'errors' => $errors /* Validation errors */
], 400);
Hope the article was very helpful for you. Please check the related article which might be very helpful for you.
Search Engine Optimization Concepts
Route Model Binding In Laravel & Change Default Column id To Another Column
composer.json v/s composer.lock
Install Apache Web Server On Ubuntu 20.04 / Linux & Manage It
Simple Way To Create Resourceful API Controller In Laravel
Create Custom 404 Page In Laravel
@stack @push and @prepend In Laravel Blade
Why You Should Run Cronjobs In Laravel?
Automate Repeating Tasks In Linux Server With Cronjobs
Install RabbitMQ with Docker & Running with NodeJS
Supervisor For Laravel Queue Scheduling