This tutorial for cakephp version 4, here we will learn how we can create a simple API using cakephp.
Our goal is we will create an API to save category if doesn’t exist !
Very beginning we will create a resources route in cakephp. Here, you may ask what is the resource route ? Answer is resource route will accept all http VERBS. Example GET,POST,PUT,DELETE,PUT
Now let’s go in cakephp source in location config/routes.php Go to the end of the line and create a new route scope for your API. Example
$routes->scope('/api', function (RouteBuilder $routes) { $routes->setExtensions(['json']); $routes->resources('Categories',[ 'path' => 'category', 'prefix' => 'Api', 'map' => [ 'addCategory' => [ 'action' => 'addCategory', 'method' => 'POST', 'path' => '/add-category' ], ] ]); });
Here , You can see I have created a route for my categories controller where I have an action called addCategory
So, Let’s create a class in location src/Controller/Api
Note : Create a folder with name Api, because in route we have used prefix Api
Now your CategoriesController.php will looks like below.
<?php namespace App\Controller\Api; use App\Controller\AppController; use Cake\Event\EventInterface; use Cake\ORM\TableRegistry; Class CategoriesController extends AppController { public function addCategory() { $this->request->allowMethod(['post']); $category = $this->Categories->patchEntity($this->Categories->newEmptyEntity(), $this->request->getData()); $this->set('category',$this->Categories->findOrCreate( ['name'=>$this->request->getData('name')], function()use($category){ return $category; } ) ) ; $this->viewBuilder()->setOption('serialize', ['category']); } }
Don’t forget to create a model for categories ! You can use a simple bake command to create a model for categories table.
bin/cake bake model categories
So, We have done it ! Now let’s test in postman , you can test it postman using below URL
http://localhost/api/category/add-category.json
Set body name = your-category-name
Also send a post request !