This tutorial will show you how to create a REST API using Restful API Framework SLIM for any web or mobile application. These REST Endpoints can be used in any Android, IOS, Angularjs, or other application.
The Rest API facilitates communication between the client and server applications. MySQL is my database, and PHP is used to retrieve records from it.
I’ll build a REST API to handle HTTP GET, POST, PUT, and DELETE requests. I’ll use a GET request to fetch records, a POST request to add new records, a PUT request to update a record in the database, and a Delete request to delete a record from the database.
Slim is a PHP microframework that allows you to create simple and powerful web applications and APIs quickly. The SLIM framework is simple to use and lightweight, and it supports a wide range of requests. I’m assuming you’re familiar with basic PHP, MySQL, and the rest service.
Read: Different type of web services.
You must first download the Slim framework from Slim framework as well as unzip it Now, rename the Slim-Skeleton-master
folder dummy and copy it to the XAMPP/htdocs/
or wamp/www/
folder.
The project folder structure will now look like this:
XAMPP/htdocs/dummy
I’m assuming you have composer installed; if not, please install composer. Please open the XAMPP/htdocs/dummy/
folder in the cmd
line and run the command below.
composer update
Step 1: Open D:\XAMPP\apache\conf\extra\httpd-vhosts.conf
file and add the below codes to end of the file.
<virtualhost *:80=""> DocumentRoot "D:\XAMPP\htdocs\dummy\public" ServerName dummy <directory "d:\xampp\htdocs\dummy\public"=""> Order allow,deny Allow from all </directory> </virtualhost>
Please uncomment NameVirtualHost *:80
line from httpd-vhosts.conf
file.
Note: Please Change ‘D:’ drive as per your install XAMPP drive.
Step 2: Now open C:\Windows\System32\drivers\etc\hosts
files and add the below codes to the end of the file.
127.0.0.1 dummy
Now open http://dummy
on the browser, that will redirect to the slim home page which is index.php file into a public folder.
For these slim tutorials, I’m using an MYSQL database. I’ll make a dummy db
in MySQL using the phpMyAdmin UI or the MySQL server. We will execute the SQL query below in the code>dummy db database.
-- -- Table structure for table `employee` -- CREATE TABLE IF NOT EXISTS `employee` ( `id` int(11) NOT NULL COMMENT 'primary key', `employee_name` varchar(255) NOT NULL COMMENT 'employee name', `employee_salary` double NOT NULL COMMENT 'employee salary', `employee_age` int(11) NOT NULL COMMENT 'employee age' ) ENGINE=InnoDB AUTO_INCREMENT=58 DEFAULT CHARSET=latin1 COMMENT='datatable demo table';
We will create a DB connection method in the code>index.php/code> file. You can create a separate DB connection file and include it in the index.php
as well, but I will not create complexity in this slim tutorial code because I am creating simple laymen user slim tutorials.
Open the dummy/public/index.php
file and paste the code below at the end.
function getConnection() { $dbhost="127.0.0.1"; $dbuser="root"; $dbpass=""; $dbname="dummy_db"; $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $dbh; }
As you can see from the MySQL connection information, the parameters are as follows:
dbhost: If your slim framework application code and MySQL server are on the same machine, this will contain the database’s hostname, such as IP address or hostname. Localhost can be used as a hostname.
dbname: The database’s name You can replace it with the name of your database.
dbuser: dbuser is the MySQL database’s username.
dbpass: The database password for MySQL.
now navigate to http://dummy//
If everything is in order, you will see the slim home page; otherwise, an error message will appear.
In this slim example tutorial, I will create the following rest of EndPoints. We will create GET, POST, PUT, and DELETE type requests.
# | Route | Method | Type | Full route | Description |
---|---|---|---|---|---|
1 | /employee | GET | JSON | http://yourhost/api/v1/employees/ | Get all employee data |
2 | /employee/{id} | GET | JSON | http://yourhost/api/v1/employee/1 | Get a single employee data |
3 | /create | POST | JSON | http://yourhost/api/v1/create | Create new record in database |
4 | /update/{id} | PUT | JSON | http://yourhost/api/v1/update/21 | Update an employee record |
5 | /delete/{id} | DELETE | JSON | http://yourhost/api/v1/update/2 | Delete an employee record |
We intend to include the above-rest calls in this tutorial, so we will include the below-rest endpoints in the dummy/src/routes.php/
file.
group('/api', function () use ($app) { // Version group $app->group('/v1', function () use ($app) { $app->get('/employees', 'getEmployes'); $app->get('/employee/{id}', 'getEmployee'); $app->post('/create', 'addEmployee'); $app->put('/update/{id}', 'updateEmployee'); $app->delete('/delete/{id}', 'deleteEmployee'); }); });
I’ve created an API
and a v1
group for the versioning process only, which will make it easier to navigate the rest endpoints. I use GET, POST, PUT, and DELETE requests and pass the rest URL as well as the controller method that will call the API request.
ex: $app->post('/create', 'addEmployee');
The HTTP method in the preceding Routes is POST, and the function 'addEmployee'
will call on the '/create'
rest end point.
We will add a new method getEmployes()
, to the dummy/public/index.php
file and return JSON results. This method will retrieve all employee information from the employee table.
function getEmployes($response) { $sql = "select * FROM employee"; try { $stmt = getConnection()->query($sql); $wines = $stmt->fetchAll(PDO::FETCH_OBJ); $db = null; return json_encode($wines); } catch(PDOException $e) { echo '{"error":{"text":'. $e->getMessage() .'}}'; } }
Now, try the following rest call: http://dummy/api/v1/employees/
It will display employee list JSON results data in the browser.
When we use a cross-domain rest call, the client will receive an error message on the console about a cross-domain request, blah blah…? With the corsslim
plugin, We can easily fix that issue in the slim framework.
First, we’ll add "palanik/corsslim": "dev-slim3"
to the composer file and then run the composer update command again.
We’ll add some CORS configuration code to the publicindex.php
file.
$corsOptions = array( "origin" => "*", "exposeHeaders" => array("Content-Type", "X-Requested-With", "X-authentication", "X-client"), "allowMethods" => array('GET', 'POST', 'PUT', 'DELETE', 'OPTIONS') ); $cors = new \CorsSlim\CorsSlim($corsOptions);
We will create a new HTTP Post method addEmployee() into dummy/public/index.php
file. This method will create a new record into the MySQL database. You need to send data into json format.
function addEmployee($request) { $emp = json_decode($request->getBody()); $sql = "INSERT INTO employee (employee_name, employee_salary, employee_age) VALUES (:name, :salary, :age)"; try { $db = getConnection(); $stmt = $db->prepare($sql); $stmt->bindParam("name", $emp->name); $stmt->bindParam("salary", $emp->salary); $stmt->bindParam("age", $emp->age); $stmt->execute(); $emp->id = $db->lastInsertId(); $db = null; echo json_encode($emp); } catch(PDOException $e) { echo '{"error":{"text":'. $e->getMessage() .'}}'; } }
Now, try the rest call http://dummy/api/v1/create/
. Using any rest test client, such as postman, it will return the newly created employee JSON data as a result.
We will add a new HTTP PUT method called updateEmployee()
to the dummy/public/index.php/
file. This method will update an existing employee record in MySQL. You must send employee data in json format, including the employee’s ID.
function updateEmployee($request) { $emp = json_decode($request->getBody()); $id = $request->getAttribute('id'); $sql = "UPDATE employee SET employee_name=:name, employee_salary=:salary, employee_age=:age WHERE id=:id"; try { $db = getConnection(); $stmt = $db->prepare($sql); $stmt->bindParam("name", $emp->name); $stmt->bindParam("salary", $emp->salary); $stmt->bindParam("age", $emp->age); $stmt->bindParam("id", $id); $stmt->execute(); $db = null; echo json_encode($emp); } catch(PDOException $e) { echo '{"error":{"text":'. $e->getMessage() .'}}'; } }
test rest call http://dummy/api/v1/update/1
using any rest test client like postman etc, it will return updated employee JSON data as a result.
We will create Delete type request and new method deleteEmployee()
into dummy/public/index.php
file. This method will take the employee id as a parameter and delete records from the employee table.
function deleteEmployee($request) { $id = $request->getAttribute('id'); $sql = "DELETE FROM employee WHERE id=:id"; try { $db = getConnection(); $stmt = $db->prepare($sql); $stmt->bindParam("id", $id); $stmt->execute(); $db = null; echo '{"error":{"text":"successfully! deleted Records"}}'; } catch(PDOException $e) { echo '{"error":{"text":'. $e->getMessage() .'}}'; } }
This Slim Api Framework tutorial covers the fundamentals of crud table operation. We learned how to use the rest web service to add new records and edit existing records in a MySQL database. We’ve also included a listing of employee table data with a delete record from the MySQL table. You can integrate these rest calls into any web application that communicates with a server via APIs. You can modify these Slim example tutorials to suit your needs and have fun :).
This tutorial helps integrate a PHP SDK with Laravel. We'll install aws-php-sdk into laravel application and access all aws services… Read More
in this quick PHP tutorial, We'll discuss php_eol with examples. PHP_EOL is a predefined constant in PHP and represents an… Read More
This Laravel tutorial helps to understand table Relationships using Elequonte ORM. We'll explore laravel table Relationships usage and best practices… Read More
We'll explore different join methods of Laravel eloquent with examples. The join helps to fetch the data from multiple database… Read More
in this Laravel tutorial, We'll explore valet, which is a development environment for macOS minimalists. It's a lightweight Laravel development… Read More
I'll go through how to use soft delete in Laravel 10 in this post. The soft deletes are a method… Read More
View Comments
how to connect with sql server
i hvnt connected with sql server, i thng u need to set right database driver for sql server
Hi can you provide github link, i m not really understand bout this? thank you
Ok,i ll do that and update u
sorry for late reply, its added now
after setting all above, call that url dummy/ ,i found error Page Not Found, WHy?
Hi Awadhesh,
I have create virtual host dummy, hv u created?
How to create pagination for this rest api?
you need to add limit params on get list rest call
And you can use the response headers (like WordPress) to specify how many records and how many pages are in total. The client will then know to call page 1, 2..
i am getting error on this step
now test rest call dummy/api/v1/employees using browser , it will show employee list json results data.
i think i missed something about api/v1
please help..
thanks..
i am getting error on this step..
dummy/api/v1/employees
did i miss something?
i don't understand api/v1
its the rest groups mentioned in routes,hv u created dummy as vhost