Basic REST API Using PHP

Follow @desiprogrammer_

Let's take a quick look at creating basic REST API using PHP ! Assuming that you already have a working understanding of PHP, SQL and Server Request Methods like GET, POST etc, We will move forward quickly !

I have a simple table named tasks , with three columns for id, task and status.


 $sql = "CREATE TABLE `tasks` (
  `id` tinyint(4) NOT NULL,
  `task` tinytext NOT NULL,
  `status` tinyint(4) NOT NULL DEFAULT 0
)";
        

In a file named db.php, I have connected to a Database named as apis, where I have my Table tasks.


 <?php
 $servername = "localhost";
 $dbUsername = "root";
 $dbPassword = "";
 $dbName = "apis";
         
 $conn = mysqli_connect($servername, $dbUsername, $dbPassword, $dbName);
 if(!$conn){
     die("Connection Failed : ".mysqli_connect_error());
 }
 ?>           
        

I will create a single file named index.php and in that file we will do CRUD Operation Based on The Request Type.
For A GET Request , we will send the list of tasks available, for a PUT Request we will accept a value for task and will add that to our database, for a POST Request, we will mondify the status of our task from 0 (pending) to 1(completed), and finally for DELETE Request, we will delete a task based on the ID provided.

Now here We have simply set our headers, for Content-Type and Allowed Origins.


 <?php
 header("Access-Control-Allow-Origin: *");
 header("Content-Type: application/json; charset=UTF-8");

 $method = $_SERVER['REQUEST_METHOD'];
 // we get the type of request made and store it in $method 
 require 'db.php';
 // for the sake of tutorial we will simply put the db connection
 // file in global scope 
 ?>
        

We will find the type of request being made to server and will handle out code base according to that.


  switch ($method) {
     case 'GET':
         $sql = "SELECT * FROM tasks";
         $result = mysqli_query($conn, $sql);
         $tasks = array();
         if (mysqli_num_rows($result) > 0) {
             while ($row = mysqli_fetch_assoc($result)) {
                 array_push($tasks, $row);
             }
             $response = array(
                 'status' => true,
                 'msg' => "Fetched Successfully",
                 'data' => $tasks
             );
             echo json_encode($response);
         } else {
             $response = array(
                 'status' => true,
                 'msg' => "No Tasks Found",
                 'data' => $tasks
             );
             echo json_encode($response);
         }
         break;
     case 'PUT':
         // get the data send as JSON and decode it
         $data = json_decode(file_get_contents("php: input"));
         //
         if (is_null($data)) {
             $response = array(
                 'status' => false,
                 'msg' => "Empty Fields"
             );
             echo json_encode($response);
         } else {
             $sql = "INSERT INTO tasks (task) VALUES (?)";
             if ($stmt = mysqli_prepare($conn, $sql)) {
                 // Bind variables to the prepare statement as parameters
                 mysqli_stmt_bind_param($stmt, "s" $data->task);
                 mysqli_stmt_execute($stmt);
                 $response = array(
                     'status' => true,
                     'msg' => "Added Successfully"
                 );
                 echo json_encode($response);
             } else {
                 $response = array(
                     'status' => false,
                     'msg' => "Error Preparing Statements"
                 );
                 echo json_encode($response);
             }
         }
         break;
     case 'POST':
         // POST REQ
         // Modify Status
         // get the data send as JSON and decode it
         $data = json_decode(file_get_contents("php: input"));
         if (is_null($data)) {
             $response = array(
                 'status' => false,
                 'msg' => "Empty Fields"
             );
             echo json_encode($response);
         } else {
             $sql = "UPDATE tasks SET status = ? WHERE i = ?";
             if ($stmt = mysqli_prepare($conn, $sql)) {
                 // Bind variables to the prepare statement as parameters
                 mysqli_stmt_bind_param($stmt, "ss" $data->status, $data->id);
                 mysqli_stmt_execute($stmt);
                 // not getting deeper into checking th response
                 $response = array(
                     'status' => true,
                     'msg' => "Updated Successfully"
                 );
                 echo json_encode($response);
             } else {
                 $response = array(
                     'status' => false,
                     'msg' => "Error Preparing Statements"
                 );
                 echo json_encode($response);
             }
         }
         break;
     case 'DELETE':
         // Delete A Task
         // get the data send as JSON and decode it
         $data = json_decode(file_get_contents("php: input"));
         if (is_null($data)) {
             $response = array(
                 'status' => false,
                 'msg' => "Empty Fields"
             );
             echo json_encode($response);
         } else {
             $sql = "DELETE FROM tasks WHERE id = "  $data->id;
             $result = mysqli_query($conn, $sql);
             // assuming that only the valid Ids will b send from UI
             $response = array(
                 'status' => true,
                 'msg' => "Deleted Successfully"
             );
             echo json_encode($response);
         }
         break;
 
     default:
         $response = array(
             'status' => false,
             'msg' => "Unsupported Request Type"
         );
         echo json_encode($response);
 
         break;
 }
    

Having done this you can use a REST client like Postman to make requests.

Given below is a sample response you will get if try to make a request, but with a method other than the ones mentioned above !


 {
     "status": false,
     "msg": "Unsupported Request Type"
 }
         

You May Also Like..

Local Email authentication in Node JS

Using passport js for local email authentication.

Language Icon

Flutter PDF

Create Pdf and Read From Internet, Storage or Asset

Language Icon