Working With RESTful Services in Codeigniter 3 – GET Example

Introduction

In this tutorial I am going to show you how you can work with RESTful or REST webservice in Codeigniter framework. I am going to use HTTP method GET to fetch data from database server.

Related Posts:

The base/root URI for the Web service such as http://<host>/<appcontext/contextpath>/<url pattern>/<resources>.

The MIME type of the response data supported, which are JSON/XML/TEXT/HTML etc.

HTTP methods are mapped to CRUD (create, read, update and delete) actions for a resource. Although you can make slight modifications such as making the PUT method to create or update, the basic patterns are listed as follows.

HTTP GET: Get/List/Retrieve an individual resource or a collection of resources.

Prerequisites

Please go through Setup RESTful service with Codeigniter, MySQL 5.x – 8.0.26

Project Directory

It’s assumed that you have setup Apache, PHP and Codeigniter in Windows system.

Now I will create a project root directory called codeIgniter-rest-api-get the Apache server’s htdocs folder.

Now move all the directories and files from CodeIgniter framework into codeIgniter-rest-api-get directory.

I may not mention the project root directory in subsequent sections and I will assume that I am talking with respect to the project root directory.

MySQL Table

Create a MySQL table contact under database roytuts. This table stores information for contact address details. For MySQL version 5.x, use the following table structure.

USE `roytuts`;

/*Table structure for table `contact` */

DROP TABLE IF EXISTS `contact`;

CREATE TABLE `contact` (
  `contact_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `contact_name` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `contact_address` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
  `contact_phone` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`contact_id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

If you are using MySQL version 8.x then use the following table structure:

CREATE TABLE `contact` (
  `contact_id` int unsigned COLLATE utf8mb4_unicode_ci NOT NULL AUTO_INCREMENT,
  `contact_name` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL,
  `contact_address` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
  `contact_phone` varchar(15) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`contact_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Dump some data into table contact. You need to test your example about “working with restful services in codeigniter – put example” and for that you need some data in the database table. Therefore I am dumping some sample data into the table. If your data are coming from different sources then you don’t need it.

insert  into 
`contact`(`contact_id`,`contact_name`,`contact_address`,`contact_phone`) 
values 
(1,'S Roy','https://roytuts.com','1234578960'),
(2,'S Roy','https://roytuts.com','1234578960'),
(3,'S Roy','https://roytuts.com','5454544574'),
(4,'S Roy','https://roytuts.com','4578912360'),
(5,'S Roy','https://roytuts.com','8945761254'),
(6,'S Roy','https://roytuts.com','4587961235'),
(7,'S Roy','https://roytuts.com','1254897652'),
(12,'S Roy','https://roytuts.com','1234567890');

Autoload Configuration

You need some configurations, such as, auto-loading for helpers to avoid loading every time you need to use.

Modify application/config/autoload.php file for auto-loading libraries and helper functions.

This one time auto-loading gives flexibility to uniformly use the helpers and libraries anywhere throughout the application without loading repeatedly.

For my example I am auto-loading databaseurlfile.

It is not mandatory but if you auto-load the libraries or helper classes which are repeatedly used in many places throughout the application then these classes are available anywhere and it simplifies your life.

$autoload['helper'] = array('url', 'file');
$autoload['libraries'] = array('database');

Database Configurations

Modify also <root directory>/application/config/database.php. This modification is required in order to establish the connection with database and performing database queries.

'hostname' => 'localhost',
'username' => 'root',
'password' => 'root',
'database' => 'roytuts',
'dbdriver' => 'mysqli',

REST Controller Class

Create a controller file RestGetController.php under <project root>/application/controllers folder with the following source code.

Notice I have used _get as a suffix to the function names to indicate that I am making HTTP GET requests.

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

require_once 'Format.php';
require_once 'RestController.php';

use chriskacerguis\RestServer\RestController;

/**
 * Description of RestGetController
 *
 * @author https://roytuts.com
 */
class RestGettController extends RestController {
	
	function __construct() {
        parent::__construct();
		$this->load->model('ContactModel', 'cm');
    }

    function contacts_get() {
        $contacts = $this->cm->get_contact_list();

        if ($contacts) {
            $this->response($contacts, 200);
        } else {
            $this->response(NULL, 404);
        }
    }

    function contact_get() {
        if (!$this->get('id')) {
            $this->response(NULL, 400);
        }

        $contact = $this->cm->get_contact($this->get('id'));

        if ($contact) {
            $this->response($contact, 200); // 200 being the HTTP response code
        } else {
            $this->response(NULL, 404);
        }
    }

}
  • is used to return GET variables from either a query string like this restgetcontroller/contact?id=1 or can be set in the more CodeIgniter’s way with restgetcontroller/contact/id/1.

In the method, I am picking up a ?id=XX and passing it to the model. If data is found then I send it to the $this->response() function with a status 200. If nothing is found, return no body and a 404 to say nothing was found.

Model Class

Create a model file ContactModel.php under <project root>/application/models folder with the following source code.

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * Description of ContactModel
 *
 * @author https://roytuts.com
 */
class ContactModel extends CI_Model {

    private $contact = 'contact';

    function get_contact_list() {
        $query = $this->db->get($this->contact);
        if ($query) {
            return $query->result();
        }
        return NULL;
    }

    function get_contact($id) {
        $query = $this->db->get_where($this->contact, array("contact_id" => $id));
        if ($query) {
            return $query->row();
        }
        return NULL;
    }

}

Testing REST API GET Example

Now run the application on apache http server. Or deploy the application using CLI mode. I have strated application in CLI mode and application deployed at localhost in 8000 port.

Use the REST Client in Firefox browser or Postman tool or any browser to test the REST service.

Method: GET

URL: http://localhost:8000/restgetcontroller/contacts

$[‘rest_default_format’]=’json’ at <project’s root directory>/application/config/rest.php

Output:

[
	{
		"contact_id": "1",
		"contact_name": "S Roy",
		"contact_address": "https://roytuts.com",
		"contact_phone": "1234578960"
	},
	{
		"contact_id": "2",
		"contact_name": "S Roy",
		"contact_address": "https://roytuts.com",
		"contact_phone": "1234578960"
	},
	{
		"contact_id": "3",
		"contact_name": "S Roy",
		"contact_address": "https://roytuts.com",
		"contact_phone": "5454544574"
	},
	{
		"contact_id": "4",
		"contact_name": "S Roy",
		"contact_address": "https://roytuts.com",
		"contact_phone": "4578912360"
	},
	{
		"contact_id": "5",
		"contact_name": "S Roy",
		"contact_address": "https://roytuts.com",
		"contact_phone": "8945761254"
	},
	{
		"contact_id": "6",
		"contact_name": "S Roy",
		"contact_address": "https://roytuts.com",
		"contact_phone": "4587961235"
	},
	{
		"contact_id": "7",
		"contact_name": "S Roy",
		"contact_address": "https://roytuts.com",
		"contact_phone": "1254897652"
	},
	{
		"contact_id": "12",
		"contact_name": "S Roy",
		"contact_address": "https://roytuts.com",
		"contact_phone": "1234567890"
	}
]

In browser the output will be like the following image:

codeigniter 3 rest get

If you change as, $[‘rest_default_format’]=’xml’ at <root directory>/application/config/rest.php.

<?xml version="1.0" encoding="utf-8"?>
<xml>
	<item>
	  <contact_id>1</contact_id>
	  <contact_name>S Roy</contact_name>
	  <contact_address>https://roytuts.com</contact_address>
	  <contact_phone>1234578960</contact_phone>
	</item>
	<item>
	  <contact_id>2</contact_id>
	  <contact_name>S Roy</contact_name>
	  <contact_address>https://roytuts.com</contact_address>
	  <contact_phone>1234578960</contact_phone>
	</item>
	<item>
	  <contact_id>3</contact_id>
	  <contact_name>S Roy</contact_name>
	  <contact_address>https://roytuts.com</contact_address>
	  <contact_phone>5454544574</contact_phone>
	</item>
	<item>
	  <contact_id>4</contact_id>
	  <contact_name>S Roy</contact_name>
	  <contact_address>https://roytuts.com</contact_address>
	  <contact_phone>4578912360</contact_phone>
	</item>
	<item>
	  <contact_id>5</contact_id>
	  <contact_name>S Roy</contact_name>
	  <contact_address>https://roytuts.com</contact_address>
	  <contact_phone>8945761254</contact_phone>
	</item>
	<item>
	  <contact_id>6</contact_id>
	  <contact_name>S Roy</contact_name>
	  <contact_address>https://roytuts.com</contact_address>
	  <contact_phone>4587961235</contact_phone>
	</item>
	<item>
	  <contact_id>7</contact_id>
	  <contact_name>S Roy</contact_name>
	  <contact_address>https://roytuts.com</contact_address>
	  <contact_phone>1254897652</contact_phone>
	</item>
	<item>
	  <contact_id>12</contact_id>
	  <contact_name>S Roy</contact_name>
	  <contact_address>https://roytuts.com</contact_address>
	  <contact_phone>1234567890</contact_phone>
	</item>
</xml>

In browser you will see the similar output:

codeigniter 3 get example

Method: GET

URL: http://localhost/ci_3_1_0/index.php/restgetcontroller/contact?id=1

$[‘rest_default_format’]=’json’ at <root directory>/application/config/rest.php

Output:

{
	"contact_id": "1",
	"contact_name": "S Roy",
	"contact_address": "https://roytuts.com",
	"contact_phone": "1234578960"
}

If you change as, $[‘rest_default_format’]=’xml’ at <root directory>/application/config/rest.php.

<?xml version="1.0" encoding="utf-8"?>
<xml>
	<contact_id>1</contact_id>
	<contact_name>S Roy</contact_name>
	<contact_address>https://roytuts.com</contact_address>
	<contact_phone>1234578960</contact_phone>
</xml>

Hope you got an idea how to work with REST API GET method in CodeIgniter 3.

Source Code

Download

3 thoughts on “Working With RESTful Services in Codeigniter 3 – GET Example

  1. Hi, i’m following the example, but this is what I get: {“status”:false,”error”:”Invalid API key “}; I can´t get to know what is the error

Leave a Reply

Your email address will not be published. Required fields are marked *