Project Description ( PHP )

Project : In this project we will learn how to create token based authorization REST API in php with all crud operation using JWT authentication library .

  • How to use JWT library.
  • How to generate encrypt user's information.
  • How to authenticate users based on generated token.
  • We will do all crud operation by using token.
  • We will learn how to encode and decode user's information
  • We will learn how to Authorization token key using headers.
  • Test all API URL on Postman.
Project Flow: database.php -> classes/User.php -> api/users -> Test on Postman -> Then
classes/Client.php -> api/clients -> Test on Postman ->
JWT is JSON Web Token which encrypt user information that can be used for user authentication to access information between clients and servers. JWT is encrypted user's information. JWT Structure: Header.Payload.Signature. You can read more about JWT by visiting official website:- Go to JWT
Install JWT: run command: composer require firebase/php-jwt
Vendor folder will add automatically when you install jwt php library .
How to include in PHP Files:
require '../../vendor/autoload.php';
use \Firebase\JWT\JWT;

Create database and table

Go to phpmAdmin, create database and table
PHP
Table relationship between users and clients
PHP

config

myproject/config/database.php
database.php
              
                  class Database{

                    private $hostname;
                    private $username;
                    private $password;
                    private $dbname;

                    private $conn;

                    public function connect(){
                      // varialiable initialization;
                      $this->hostname="localhost";
                      $this->username="root";
                      $this->password="";
                      $this->dbname="phpapi";

                      $this->conn = new mysqli($this->hostname,$this->username,$this->password,$this->dbname);

                      if($this->conn->connect_error){
                        print_r($this->conn->connect_error);
                        exit();
                      }else{
                        // echo "Connected....!!!";
                        return $this->conn;
                      }
                    }
                  }

                  // $db = new Database();
                  // $db->connect();
              
            

classes

myproject/classes/User.php
User.php

Create User class in classes folder

              
                class User{
                  public  $name;
                  public  $email;
                  public  $password;
                  public  $id;
                  private $conn;
                  private $table_users;

                  public function  __construct($db){
                    $this->conn = $db;
                    $this->table_users = "users";
                  }

                  public function check_email(){
                    $query ="SELECT * FROM ".$this->table_users." WHERE email=?";
                    $obj = $this->conn->prepare($query);
                    $obj->bind_param("s",$this->email);
                    if($obj->execute()){
                      $data = $obj->get_result();
                      return $data->fetch_assoc();
                    }else{
                      return [];
                    }
                  }
                  public function check_login(){
                    $query ="SELECT * FROM ".$this->table_users." WHERE email=?";
                    $obj = $this->conn->prepare($query);
                    $obj->bind_param("s",$this->email);
                    if($obj->execute()){
                      $data = $obj->get_result();
                      return $data->fetch_assoc();
                    }else{
                      return [];
                    }
                  }

                  public function create_user(){
                    $query ="INSERT INTO ".$this->table_users."  SET name=?, email=?, password=? ";
                    $obj = $this->conn->prepare($query);
                    $obj->bind_param("sss",$this->name,$this->email,$this->password);
                    if($obj->execute()){
                      return true;
                    }else{
                      return false;
                    }
                  }

                  //read all the data
                  public function get_all_users(){
                    $query = "SELECT * FROM ".$this->table_users;
                    //prepare the the sql
                    $obj = $this->conn->prepare($query);
                    if($obj->execute()){
                      return $obj->get_result();
                    }else{
                      return false;
                    }
                  }
                  public function fetch_single_user(){
                    $query ="SELECT * FROM ".$this->table_users." WHERE id=?";
                    $obj = $this->conn->prepare($query);
                    $obj->bind_param('i', $this->id);
                    if($obj->execute()){
                      $data = $obj->get_result();
                      return $data->fetch_assoc();
                    }else{
                      return false;
                    }
                  }

                  public function update_user(){
                    $query ="UPDATE ".$this->table_users."  SET name=?, email=?, password=? WHERE id=? ";
                    $obj = $this->conn->prepare($query);
                    $this->name = htmlspecialchars(strip_tags($this->name));
                    $this->email = htmlspecialchars(strip_tags($this->email));
                    $this->password = htmlspecialchars(strip_tags($this->password));
                    $this->id = htmlspecialchars(strip_tags($this->id));
                    $obj->bind_param("sssi",$this->name,$this->email,$this->password, $this->id);
                    if($obj->execute()){
                      return true;
                    }else{
                      return false;
                    }
                  }
                  public function delete_user(){
                    $query ="DELETE FROM ".$this->table_users." WHERE id=? ";
                    $obj = $this->conn->prepare($query);
                    $this->id = htmlspecialchars(strip_tags($this->id));
                    $obj->bind_param("i", $this->id);
                    if($obj->execute()){
                      return true;
                    }else{
                      return false;
                    }
                  }		
                }
              
          

myproject/classes/Client.php
Client.php

Create Clinet class in classes folder

              
                class Client{
                    public  $name;
                    public  $email;
                    public  $mobile;
                    public  $id;
                    public  $user_id;
                    private $conn;
                    private $table_client;
                    private $table_user;

                    public function  __construct($db){
                      $this->conn = $db;
                      $this->table_client = "clients";
                      $this->table_user = "users";
                    }
                    public function check_client(){
                      $query ="SELECT * FROM ".$this->table_client." WHERE email=?";
                      $obj = $this->conn->prepare($query);
                      $obj->bind_param("s",$this->email);
                      if($obj->execute()){
                        $data = $obj->get_result();
                        return $data->fetch_assoc();
                      }else{
                        return [];
                      }
                    }

                    public function create_client(){
                      $query ="INSERT INTO ".$this->table_client."  SET user_id=?, name=?, email=?, mobile=? ";
                      $obj = $this->conn->prepare($query);
                      $this->name = htmlspecialchars(strip_tags($this->name));
                      $this->email = htmlspecialchars(strip_tags($this->email));
                      $this->mobile = htmlspecialchars(strip_tags($this->mobile));
                      $obj->bind_param("isss",$this->user_id,$this->name,$this->email,$this->mobile);
                      if($obj->execute()){
                        return true;
                      }else{
                        return false;
                      }
                    }

                    //read all the data
                    public function get_all_clients(){
                      $query = "SELECT * FROM ".$this->table_client." WHERE user_id=?";
                      //prepare the the sql
                      $obj = $this->conn->prepare($query);
                      $this->user_id = htmlspecialchars(strip_tags($this->user_id));
                      $obj->bind_param('i', $this->user_id);
                      if($obj->execute()){
                        return $obj->get_result();
                      }else{
                        return false;
                      }
                    }
                    public function fetch_single_client(){
                      $query = "SELECT * FROM ".$this->table_client."  WHERE id=? AND user_id=? "; 
                      $obj = $this->conn->prepare($query);
                      $this->id = htmlspecialchars(strip_tags($this->id));
                      $this->user_id = htmlspecialchars(strip_tags($this->user_id));
                      $obj->bind_param('ii', $this->id,$this->user_id);
                      if($obj->execute()){
                        $data = $obj->get_result();
                        return $data->fetch_assoc();
                      }else{
                        return false;
                      }
                    }

                    public function update_client(){
                      $query ="UPDATE ".$this->table_client."  SET name=?, email=?, mobile=? WHERE id=? AND user_id=? ";
                      $obj = $this->conn->prepare($query);
                      $this->name = htmlspecialchars(strip_tags($this->name));
                      $this->email = htmlspecialchars(strip_tags($this->email));
                      $this->mobile = htmlspecialchars(strip_tags($this->mobile));
                      $this->id = htmlspecialchars(strip_tags($this->id));
                      $this->user_id = htmlspecialchars(strip_tags($this->user_id));
                      $obj->bind_param("sssii", $this->name, $this->email, $this->mobile, $this->id,$this->user_id);
                      if($obj->execute()){
                        return true;
                      }else{
                        return false;
                      }
                    }
                    public function delete_client(){
                      $query ="DELETE FROM ".$this->table_client." WHERE id=? AND user_id=? ";
                      $obj = $this->conn->prepare($query);
                      $this->id = htmlspecialchars(strip_tags($this->id));
                      $this->user_id = htmlspecialchars(strip_tags($this->user_id));
                      $obj->bind_param("ii", $this->id, $this->user_id);
                      if($obj->execute()){
                        return true;
                      }else{
                        return false;
                      }
                    }
                  }
              
          

api (Create API URL Files)

myproject/api/users

users

register.php
                
                  ini_set("display_error", 1);
                  header("Access-Control-Allow-Origin: *");
                  header("Content-Type: application/json; charset:UTF-8");
                  header("Access-Control-Allow-Methods: POST");
                  include_once('../../config/database.php');
                  include_once('../../classes/User.php');
                  //objects
                  $db = new Database();
                  $connection = $db->connect();
                  $obj = new User($connection);
                  if($_SERVER['REQUEST_METHOD']=='POST'){
                    $data = json_decode(file_get_contents("php://input")); //from Postman
                    if(!empty($data->name) && !empty($data->email) && !empty($data->password)){
                      $obj->name = $data->name;
                      $obj->email = $data->email;
                      $obj->password = password_hash( $data->password, PASSWORD_DEFAULT);
                      $email_data = $obj->check_email();
                      if(!empty($email_data)){
                        http_response_code(500);
                        echo json_encode([
                          "status"=>0,
                          "message"=>"User already exist, try another"
                        ]);
                      }else{
                        if($obj->create_user()){
                          http_response_code(200); // means ok
                          echo json_encode([
                            "status"=> 1,
                            "message"=> "User has been created successfully"
                          ]);
                        }else{
                          http_response_code(500); //means internal server error
                          echo json_encode([
                            "status"=> 0,
                            "message"=> "Failed to insert data"
                          ]);
                        }
                      }
                    }else{
                        http_response_code(404); //404 means page not found
                        echo json_encode([
                          "status"=> 0,
                          "message"=> "All the inputs are required"
                        ]);
                      }
                  }else{
                    http_response_code(503); //means internal server error
                    echo json_encode([
                      "status"=> 0,
                      "message"=> "Access denied"
                    ]);
                  }
                
            

Test Register API in Postman

PHP
users/login.php
login.php
                
                ini_set("display_error", 1);
                // include vendor
                require '../../vendor/autoload.php';
                use \Firebase\JWT\JWT;
                header("Access-Control-Allow-Origin: *");
                header("Content-Type: application/json; charset:UTF-8");
                header("Access-Control-Allow-Methods: POST");
                include_once('../../config/database.php');
                include_once('../../classes/User.php');
                //objects
                $db = new Database();
                $connection = $db->connect();
                $obj = new User($connection);
                if($_SERVER['REQUEST_METHOD']=='POST'){
                  $data = json_decode(file_get_contents("php://input")); //from Postman
                  if(!empty($data->email) && !empty($data->password)){
                    $obj->email    = $data->email;
                    $email_data = $obj->check_email();
                    if($email_data>0){
                      $user_data = $obj->check_login();
                      if(!empty($user_data)){
                          $name  =  $user_data['name'];
                          $email =  $user_data['email'];
                          $password =  $user_data['password'];
                          if(password_verify($data->password, $password)){
                              $iss = "localhost";
                              $iat = time();
                              $nbf = $iat + 10;
                              $exp = $iat + 360;
                              $aud = "myusers";
                              $userData = [
                                  'id'    => $user_data['id'] ,
                                  "name"  => $user_data['name'],
                                  "email" => $user_data['email'],
                              ];
                              $secret_key = "saten123";
                              $payload_info = [
                                  "iss"  => $iss,
                                  "iat"  => $iat,
                                  "nbf"  => $nbf,
                                  "exp" =>  $exp,
                                  "aud"  => $aud,
                                  "data" => $userData
                              ];
                              $jwt_token = JWT::encode($payload_info, $secret_key, 'HS512');
                              http_response_code(200); // means ok
                              echo json_encode([
                                  "status"=> 1,
                                  "token"=> $jwt_token,
                                  "message"=> "User loggedin successfully",
                              ]);
                          }else{
                              http_response_code(500); //means internal server error
                              echo json_encode([
                                  "status"=> 0,
                                  "message"=> "Email address/Password is invalid"
                              ]); 
                          }
                      }else{
                        http_response_code(500); //means internal server error
                        echo json_encode([
                          "status"=> 0,
                          "message"=> "Failed to loggin into your account"
                        ]);
                      }
                    }else{
                      http_response_code(500);
                      echo json_encode([
                        "status"=>0,
                        "message"=>"User does not exist"
                      ]);
                    }
                  }else{
                      http_response_code(404); //404 means page not found
                      echo json_encode([
                        "status"=> 0,
                        "message"=> "All the fields are required"
                      ]);
                    }
                }else{
                  http_response_code(503); //means internal server error
                  echo json_encode([
                    "status"=> 0,
                    "message"=> "Access denied"
                  ]);
                }
                
            

Test Login API in Postman

PHP
We have to implement jwt token in other api to authenticate, check below

users/read.php
We will read user's encrypted information
read.php
                
                ini_set("display_error", 1);
                // error_reporting('0');
                // include vendor folder
                require '../../vendor/autoload.php';
                use \Firebase\JWT\JWT;
                header("Access-Control-Allow-Origin: *");
                header("Access-Control-Allow-Methods: GET");
                header("Content-Type: application/json; charset:UTF-8");
                header('Access-Control-Allow-Headers: Access-Control-Allow-Headers,Content-Type, 
                        Access-Control-Allow-Methods, Authorization, X-Requested-With');
                include_once('../../config/database.php');
                include_once('../../classes/User.php');
                //objects
                $db = new Database();
                $connection = $db->connect();
                $user = new User($connection);
                if($_SERVER['REQUEST_METHOD']==='GET'){
                // $data = json_decode(file_get_contents('php://input'));
                  $all_headers = getallheaders();
                  $token = $all_headers['Authorization'];
                    if(!empty($token)){
                        try {
                            $secret_key = "saten123";
                            $decoded_data = JWT::decode($token, $secret_key, ['HS512']);
                            $id = $decoded_data->data->id;
                            $name = $decoded_data->data->name;
                            $email = $decoded_data->data->email;
                            http_response_code(200);
                            echo json_encode([
                                'status' => 1,
                                'message'=> 'Token verified',
                                // 'user_data' => $decoded_data,
                                'user ID'   => $id,
                                'User name' => $name,
                                'email'     => $email
                            ]);
                        } catch (Exception $ex) {
                            http_response_code(500);
                            echo json_encode([
                                'status' => 0,
                                'message'=> $ex->getMessage()
                            ]);
                        }  
                    }else{
                        http_response_code(404);
                        echo json_encode([
                            'status'=>0,
                            'message'=>'User does not exist',
                        ]);
                    }
                }else{
                    http_response_code(503); //means internal server error
                    echo json_encode([
                        "status"=> 0,
                        "message"=> "Access denied"
                    ]);
                }
                
            

Test Read API in Postman

To access other api for crud operation such as read, update, fetch we have to login and generate token key, afterthat copy token key and pass in headers PHP Go to read.php, follow as in image PHP
users/update.php
update.php
              
              ini_set("display_error", 1);
              // include vendor folder
              require '../../vendor/autoload.php';
              use \Firebase\JWT\JWT;
              header("Access-Control-Allow-Origin: *");
              header("Content-Type: application/json; charset:UTF-8");
              header("Access-Control-Allow-Methods: POST");
              include_once('../../config/database.php');
              include_once('../../classes/User.php');
              //objects
              $db = new Database();
              $connection = $db->connect();
              $obj = new User($connection);
              if($_SERVER['REQUEST_METHOD']=='POST'){
                $data = json_decode(file_get_contents("php://input"));  //from Postman
                $all_headers = getallheaders();
                $token = $all_headers['Authorization'];
                if(!empty($data->name) && !empty($data->email) && !empty($data->password)){
                  if(!empty($token)){
                    try {
                      $secret_key = "saten123";
                      $decoded_data = JWT::decode($token, $secret_key, ['HS512']);
                      $obj->id = $decoded_data->data->id;
                      $obj->name = $data->name;
                      $obj->email = $data->email;
                      $obj->password = password_hash($data->password, PASSWORD_DEFAULT);
                      if($obj->update_user()){
                        http_response_code(200); // means ok
                        echo json_encode([
                          "status"=> 1,
                          "message"=> "User has been updated successfully"
                        ]);
                      }else{
                        http_response_code(500); //means internal server error
                        echo json_encode([
                          "status"=> 0,
                          "message"=> "Failed to update data"
                        ]);
                      }
                    } catch (Exception $ex) {
                      http_response_code(500);
                            echo json_encode([
                              'status' => 0,
                              'message'=> $ex->getMessage()
                            ]);
                    }
                  }else{
                    http_response_code(404);
                    echo json_encode([
                      'status'=>0,
                      'message'=>'User does not exist',
                    ]);
                  }
                }else{
                  http_response_code(404); //404 means page not found
                  echo json_encode([
                    "status"=> 0,
                    "message"=> "All the inputs are required"
                  ]);
                }
              }else{
                http_response_code(503); //means internal server error
                echo json_encode([
                  "status"=> 0,
                  "message"=> "Access denied"
                ]);
              }
              
            

Test Update API in Postman

Copy token key after login and pass in Headers PHP Follow as in image PHP

clients

myproject/api/clients
add-client.php
              
              ini_set("display_error", 1);
              // include vendor
              require '../../vendor/autoload.php';
              use \Firebase\JWT\JWT;
              header("Access-Control-Allow-Origin: *");
              header("Content-Type: application/json; charset:UTF-8");
              header("Access-Control-Allow-Methods: POST");
              include_once('../../config/database.php');
              include_once('../../classes/Client.php');
              //objects
              $db = new Database();
              $connection = $db->connect();
              $obj = new Client($connection);
              if($_SERVER['REQUEST_METHOD']=='POST'){
                $data = json_decode(file_get_contents("php://input")); //from postman
                $headers = getallheaders();
                if(!empty($data->name) && !empty($data->email) && !empty($data->mobile)){
                  try{
                    $token = $headers['Authorization'];
                    $secret_key = "saten123";
                    $decoded_data = JWT::decode($token, $secret_key, ['HS512']);
                    $obj->user_id = $decoded_data->data->id;
                    $obj->name = $data->name;
                    $obj->email = $data->email;
                    $obj->mobile = $data->mobile;
                    $check_client = $obj->check_client();
                    if(!empty($check_client)){
                      http_response_code(500);
                      echo json_encode([
                        "status"=>0,
                        "message"=>"Client already exist, try another"
                      ]);
                    }else{
                      if($obj->create_client()){
                        http_response_code(200); // means ok
                        echo json_encode([
                          "status"=> 1,
                          "message"=> "Client has been added successfully"
                        ]);
                      }else{
                        http_response_code(500); //means internal server error
                        echo json_encode([
                          "status"=> 0,
                          "message"=> "Failed to insert data"
                        ]);
                      }
                    }
                  }catch(Exception $ex){
                    http_response_code(500); //means internal server error
                    echo json_encode([
                      "status"=> 0,
                      "message"=> $ex->getMessage()
                    ]);
                  }
                }else{
                    http_response_code(404); //404 means page not found
                    echo json_encode([
                      "status"=> 0,
                      "message"=> "All the inputs are required"
                    ]);
                  }
              }else{
                http_response_code(503); //means internal server error
                echo json_encode([
                  "status"=> 0,
                  "message"=> "Access denied"
                ]);
              }
              
            

Test add-client API in Postman

Copy token key after login and pass in Headers PHP Follow as in image Paste token key header authorization PHP
myproject/api/clients
user-all-clients.php
              
                ini_set("display_error", 1);
                // include vendor
                require '../../vendor/autoload.php';
                use \Firebase\JWT\JWT;
                header("Access-Control-Allow-Origin: *");
                header("Content-Type: application/json; charset:UTF-8");
                header("Access-Control-Allow-Methods: GET");
                include_once('../../config/database.php');
                include_once('../../classes/Client.php');
                //objects
                $db = new Database();
                $connection = $db->connect();
                $obj = new Client($connection);
                if($_SERVER['REQUEST_METHOD']=='GET'){
                  $headers = getallheaders();
                  $token = $headers['Authorization'];
                    if(!empty($token)){
                    try {
                      $secret_key = "saten123";
                      $decoded_data = JWT::decode($token, $secret_key, ['HS512']);
                      $obj->user_id = $decoded_data->data->id; // this is user id from users table in database after user login
                      $clients = $obj->get_all_clients();
                      if($clients->num_rows >0){
                        $client_data = [];
                        while($row = $clients->fetch_assoc()){
                          $client_data[] = [
                            'id'     =>$row['id'],
                            'user_id'=>$row['user_id'],
                            'name'   =>$row['name'],
                            'email'  =>$row['email'],
                            'mobile' =>$row['mobile'],
                            'status' =>$row['status'],
                            'created_at'=>$row['created_at']
                          ];
                        }
                        http_response_code(200);
                        echo json_encode([
                          'status'=>1,
                          'message'=>$client_data	
                        ]);
                      }else{
                        http_response_code(404);
                        echo json_encode([
                          'status'=>0,
                          'message'=>'No client found',
                        ]);
                      }
                      }catch(Exception $ex){
                        http_response_code(404);
                          echo json_encode([
                              'status'=>0,
                              'message'=> $ex->getMessage(),
                          ]);
                      }
                  }else{
                    http_response_code(404);
                        echo json_encode([
                            'status'=>0,
                            'message'=>'Client does not exist',
                        ]);
                  }
                }else{
                  http_response_code(503); //means internal server error
                  echo json_encode([
                    "status"=> 0,
                    "message"=> "Access denied"
                  ]);
                }
              
            

Test user-all-clients API in Postman

Copy token key after login and pass in Headers PHP Follow as in image Paste token key header authorization PHP
myproject/api/clients
fetch-single-client-by-get-method.php
              
              ini_set("display_error", 1);
              // include vendor
              require '../../vendor/autoload.php';
              use \Firebase\JWT\JWT;
              header("Access-Control-Allow-Origin: *");
              header("Content-Type: application/json; charset:UTF-8");
              header("Access-Control-Allow-Methods: GET");
              include_once('../../config/database.php');
              include_once('../../classes/Client.php');
              //objects
              $db = new Database();
              $connection = $db->connect();
              $obj = new Client($connection);
              if($_SERVER['REQUEST_METHOD']==='GET'){
                $client_id = isset($_GET['id']) ? intval($_GET['id']) : "";
                $headers = getallheaders();
                $token = $headers['Authorization'];
                  if(!empty($client_id)){
                    try {
                      if(!empty($token)){
                        $secret_key = "saten123";
                        $decoded_data = JWT::decode($token, $secret_key, ['HS512']);
                        $obj->id = $client_id; // this is client id from clients table in database. 
                        $obj->user_id = $decoded_data->data->id; // this is user id from users table in database after user login.
                        $client_data = $obj->fetch_single_client();
                        if(!empty($client_data)){
                            http_response_code(200);
                            echo json_encode([
                              'status'=>1,
                              'message'=>$client_data	
                            ]);
                        }else{
                          http_response_code(404);
                          echo json_encode([
                            'status'=>0,
                            'message'=>'You dont have any client',
                          ]);
                        }
                      }else{
                        http_response_code(404);
                      echo json_encode([
                        'status'=>0,
                        'message'=>'No client found',
                      ]);
                      }
                    } catch (Exception $ex) {
                      http_response_code(404);
                      echo json_encode([
                        'status'=>0,
                        'message'=>$ex->getMessage(),
                      ]);
                    }
                }else{
                  http_response_code(404);
                  echo json_encode([
                    'status'=>0,
                    'message'=>'Client does not exist',
                  ]);
                }
              }else{
                http_response_code(503); //means internal server error
                echo json_encode([
                  "status"=> 0,
                  "message"=> "Access denied"
                ]);
              }
              
            

Test fetch-single-client-by-get-method API in Postman

Copy token key after login and pass in Headers PHP Follow as in image Paste token key header authorization PHP
myproject/api/clients
fetch-single-client-by-post-method.php
              
              ini_set("display_error", 1);
              // include vendor
              require '../../vendor/autoload.php';
              use \Firebase\JWT\JWT;
              header("Access-Control-Allow-Origin: *");
              header("Content-Type: application/json; charset:UTF-8");
              header("Access-Control-Allow-Methods: POST");
              include_once('../../config/database.php');
              include_once('../../classes/Client.php');
              //objects
              $db = new Database();
              $connection = $db->connect();
              $obj = new Client($connection);
              if($_SERVER['REQUEST_METHOD']==='POST'){
                $client = json_decode(file_get_contents("php://input")); //from postman
                $headers = getallheaders();
                $token = $headers['Authorization'];
                  if(!empty($client->id)){
                    try {
                      if(!empty($token)){
                        $secret_key = "saten123";
                        $decoded_data = JWT::decode($token, $secret_key, ['HS512']);
                        $obj->id = $client->id; // this is client id from clients table in database. 
                        $obj->user_id = $decoded_data->data->id; // this is user id from users table in database after user login.
                        $client_data = $obj->fetch_single_client();
                        if(!empty($client_data)){
                          http_response_code(200);
                        echo json_encode([
                          'status'=>1,
                          'message'=>$client_data	
                        ]);
                        }else{
                          http_response_code(404);
                        echo json_encode([
                          'status'=>0,
                          'message'=>'You dont have any client',
                        ]);
                        }
                      }else{
                        http_response_code(404);
                      echo json_encode([
                        'status'=>0,
                        'message'=>'No client found',
                      ]);
                      }
                    } catch (Exception $ex) {
                      http_response_code(404);
                    echo json_encode([
                      'status'=>0,
                      'message'=>$ex->getMessage(),
                    ]);
                    }
                }else{
                  http_response_code(404);
                  echo json_encode([
                    'status'=>0,
                    'message'=>'Client does not exist',
                  ]);
                }
              }else{
                http_response_code(503); //means internal server error
                echo json_encode([
                  "status"=> 0,
                  "message"=> "Access denied"
                ]);
              }
              
            

Test fetch-single-client-by-post-method API in Postman

Copy token key after login and pass in Headers PHP Follow as in image Paste token key header authorization PHP
myproject/api/clients
update-client.php
              
              ini_set("display_error", 1);
              // include vendor
              require '../../vendor/autoload.php';
              use \Firebase\JWT\JWT;
              header("Access-Control-Allow-Origin: *");
              header("Content-Type: application/json; charset:UTF-8");
              header("Access-Control-Allow-Methods: POST");
              include_once('../../config/database.php');
              include_once('../../classes/Client.php');
              //objects
              $db = new Database();
              $connection = $db->connect();
              $obj = new Client($connection);
              if($_SERVER['REQUEST_METHOD']=='POST'){
                $client = json_decode(file_get_contents("php://input")); //from postman
                $headers = getallheaders();
                if(!empty($client->name) && !empty($client->email) && !empty($client->mobile) && !empty($client->id)){
                  try {
                    $token = $headers['Authorization'];
                    $secret_key = "saten123";
                    $decoded_data = JWT::decode($token, $secret_key, ['HS512']);
                    $obj->id = $client->id; // this is client id from clients table in database. 
                    obj->user_id = $decoded_data->data->id; // this is user id from users table in database after user login
                    $client_data = $obj->fetch_single_client();
                    if(!empty($client_data)){
                      $obj->name = $client->name;
                      $obj->email = $client->email;
                      $obj->mobile = $client->mobile;
                      if($obj->update_client()){
                        http_response_code(200); // means ok
                        echo json_encode([
                          "status"=> 1,
                          "message"=> "User has been updated successfully"
                        ]);
                      }else{
                        http_response_code(500); //means internal server error
                        echo json_encode([
                          "status"=> 0,
                          "message"=> "Failed to update data"
                        ]);
                      }
                    }else{
                      http_response_code(404);
                      echo json_encode([
                        'status'=>0,
                        'message'=>'You dont have any client',
                      ]);
                    }
                  } catch (Exception $ex) {
                    http_response_code(500); //means internal server error
                    echo json_encode([
                      "status"=> 0,
                      "message"=> $ex->getMessage()
                    ]);
                  }
                }else{
                  http_response_code(404); //404 means page not found
                  echo json_encode([
                    "status"=> 0,
                    "message"=> "All the inputs are required"
                  ]);
                }
              }else{
                http_response_code(503); //means internal server error
                echo json_encode([
                  "status"=> 0,
                  "message"=> "Access denied"
                ]);
              }
              
            

Test update-client API in Postman

Copy token key after login and pass in Headers PHP Follow as in image Paste token key header authorization PHP
myproject/api/clients
delete-client-by-get-method.php
              
              ini_set("display_error", 1);
              // include vendor
              require '../../vendor/autoload.php';
              use \Firebase\JWT\JWT;
              header("Access-Control-Allow-Origin: *");
              header("Content-Type: application/json; charset:UTF-8");
              header("Access-Control-Allow-Methods: GET");
              include_once('../../config/database.php');
              include_once('../../classes/Client.php');
              //objects
              $db = new Database();
              $connection = $db->connect();
              $obj = new Client($connection);
              if($_SERVER['REQUEST_METHOD']=='GET'){
                $client_id = isset($_GET['id']) ? intval($_GET['id']) : "";
                $headers = getallheaders();
                $token = $headers['Authorization'];
                if(!empty($client_id)){
                  try {
                      if(!empty($token)){
                        $secret_key = "saten123";
                        $decoded_data = JWT::decode($token, $secret_key, ['HS512']);
                        $obj->id = $client_id; // this is client id from clients table in database. 
                        $obj->user_id = $decoded_data->data->id; // this is user id from users table in database after user login.
                        $client_data = $obj->fetch_single_client();
                        if(!empty($client_data)){
                        if($obj->delete_client()){
                          http_response_code(200); // means ok
                          echo json_encode([
                            "status"=> 1,
                            "message"=> "Client has been deleted successfully."
                          ]);
                        }else{
                          http_response_code(500); //means internal server error
                          echo json_encode([
                            "status"=> 0,
                            "message"=> "Failed to delete client ! try again."
                          ]);
                        }
                      }else{
                        http_response_code(404);
                        echo json_encode([
                          'status'=>0,
                          'message'=>'Client does not exists.',
                        ]);
                      }
                      }else{
                        http_response_code(404);
                      echo json_encode([
                        'status'=>0,
                        'message'=>'No client found.',
                      ]);
                      }
                    } catch (Exception $ex) {
                      http_response_code(404);
                    echo json_encode([
                      'status'=>0,
                      'message'=>$ex->getMessage(),
                    ]);
                    }
                }else{
                  http_response_code(404); //404 means page not found
                  echo json_encode([
                    "status"=> 0,
                    "message"=> "The Client not found"
                  ]);
                }
              }else{
                http_response_code(503); //means internal server error
                echo json_encode([
                  "status"=> 0,
                  "message"=> "Access denied"
                ]);
              }
              
            

Test delete-client-by-get-method API in Postman

Copy token key after login and pass in Headers PHP Follow as in image Paste token key header authorization PHP
myproject/api/clients
delete-client-by-post-method.php
              
              ini_set("display_error", 1);
              // include vendor
              require '../../vendor/autoload.php';
              use \Firebase\JWT\JWT;
              header("Access-Control-Allow-Origin: *");
              header("Content-Type: application/json; charset:UTF-8");
              header("Access-Control-Allow-Methods: POST");
              include_once('../../config/database.php');
              include_once('../../classes/Client.php');
              //objects
              $db = new Database();
              $connection = $db->connect();
              $obj = new Client($connection);
              if($_SERVER['REQUEST_METHOD']=='POST'){
                $client = json_decode(file_get_contents("php://input")); //from postman
                $headers = getallheaders();
                $token = $headers['Authorization'];
                if(!empty($client->id)){
                  try {
                      if(!empty($token)){
                        $secret_key = "saten123";
                        $decoded_data = JWT::decode($token, $secret_key, ['HS512']);
                        $obj->id = $client->id; // this is client id from clients table in database. 
                        $obj->user_id = $decoded_data->data->id; // this is user id from users table in database after user login.
                        $client_data = $obj->fetch_single_client();
                        if(!empty($client_data)){
                        if($obj->delete_client()){
                          http_response_code(200); // means ok
                          echo json_encode([
                            "status"=> 1,
                            "message"=> "Client has been deleted successfully."
                          ]);
                        }else{
                          http_response_code(500); //means internal server error
                          echo json_encode([
                            "status"=> 0,
                            "message"=> "Failed to delete client ! try again."
                          ]);
                        }
                      }else{
                        http_response_code(404);
                        echo json_encode([
                          'status'=>0,
                          'message'=>'Client does not exists.',
                        ]);
                      }
                      }else{
                        http_response_code(404);
                      echo json_encode([
                        'status'=>0,
                        'message'=>'No client found.',
                      ]);
                      }
                    } catch (Exception $ex) {
                      http_response_code(404);
                    echo json_encode([
                      'status'=>0,
                      'message'=>$ex->getMessage(),
                    ]);
                    }
                }else{
                  http_response_code(404); //404 means page not found
                  echo json_encode([
                    "status"=> 0,
                    "message"=> "The Client not found"
                  ]);
                }
              }else{
                http_response_code(503); //means internal server error
                echo json_encode([
                  "status"=> 0,
                  "message"=> "Access denied"
                ]);
              }
              
            

Test delete-client-by-post-method API in Postman

Copy token key after login and pass in Headers PHP Follow as in image Paste token key header authorization PHP

If Bearer Token Authorization

If it is bearer token authorization : just we have to extract only token from string
Copy token key after login and pass in Headers PHP Copy token key after login and pass in Authorization PHP After passing token inAuthorization We will recieve token some like that PHP Add code : we have to add few lines of code in all php file and rest will be same. check image PHP