Skip to content

Repository files navigation

ci4_codeigniter4_api

Buat Database dan Table

Disini saya membuat database dengan nama restful_db.

CREATEDATABASErestful_db;

Disini saya membuat sebuah table dengan nama product.

CREATETABLEproduct(
product_id INT(11) PRIMARY KEY AUTO_INCREMENT,
product_name VARCHAR(200),
product_price DOUBLE
)ENGINE=INNODB;

Selanjutnya, insert beberapa data kedalam table product dengan mengeksekusi query berikut:

INSERT INTO product(product_name,product_price) VALUES
('Product 1','2000'),
('Product 2','5000'),
('Product 3','4000'),
('Product 4','6000'),
('Product 5','7000');

Instalasi CodeIgniter 4

Download file Codeigniter 4 pada link berikut:

https://codeigniter.com

Download dan ekstrack ke htdocs ubah folder dengan nama ci4_codeigniter4_api


Membuat koneksi ke database

Buka file Database.php yang terdapat pada folder app/Config, kemudian temukan kode berikut:

public$default = [
'DSN' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'restful_db',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'cacheOn' => false,
'cacheDir' => '',
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
];

Ubah usernamepassworddatabase.

Agar Anda memiliki interface yang baik untuk menangani error, temukan file env pada root project, kemudian rename (ganti nama) menjadi .env dan open file tersebut.

Kemudian temukan kode berikut:

# CI_ENVIRONMENT = production

Kemudian ubah menjadi seperti berikut:

CI_ENVIRONMENT = development
  • Open app/Config/App.php file which is available at the project root.
public$baseURL = 'http://localhost:8080/';

Membuat file Model

Buat sebuah file model bernama ProductModel.php pada folder app/Models, kemudian ketikan kode berikut:

<?phpnamespaceApp\Models;
useCodeIgniter\Model;
class ProductModel extends Model
{
protected$table = 'product';
protected$primaryKey = 'product_id';
protected$allowedFields = ['product_name','product_price'];
}

Membuat file Controller

Buat sebuah file controller bernama Products.php pada folder app/Controllers, kemudian ketikan kode berikut:

<?phpnamespaceApp\Controllers;
useCodeIgniter\RESTful\ResourceController;
useCodeIgniter\API\ResponseTrait;
useApp\Models\ProductModel;
class Products extends ResourceController
{
use ResponseTrait;
// get all productpublicfunctionindex()
{
$model = newProductModel();
$data = $model->findAll();
return$this->respond($data, 200);
}
// get single productpublicfunctionshow($id = null)
{
$model = newProductModel();
$data = $model->getWhere(['product_id' => $id])->getResult();
if($data){
return$this->respond($data);
}else{
return$this->failNotFound('No Data Found with id '.$id);
}
}
// create a productpublicfunctioncreate()
{
$model = newProductModel();
$data = [
'product_name' => $this->request->getPost('product_name'),
'product_price' => $this->request->getPost('product_price')
];
$data = json_decode(file_get_contents("php://input"));
//$data = $this->request->getPost();$model->insert($data);
$response = [
'status' => 201,
'error' => null,
'messages' => [
'success' => 'Data Saved'
]
];
return$this->respondCreated($response, 201);
}
// update productpublicfunctionupdate($id = null)
{
$model = newProductModel();
$json = $this->request->getJSON();
if($json){
$data = [
'product_name' => $json->product_name,
'product_price' => $json->product_price
];
}else{
$input = $this->request->getRawInput();
$data = [
'product_name' => $input['product_name'],
'product_price' => $input['product_price']
];
}
// Insert to Database$model->update($id, $data);
$response = [
'status' => 200,
'error' => null,
'messages' => [
'success' => 'Data Updated'
]
];
return$this->respond($response);
}
// delete productpublicfunctiondelete($id = null)
{
$model = newProductModel();
$data = $model->find($id);
if($data){
$model->delete($id);
$response = [
'status' => 200,
'error' => null,
'messages' => [
'success' => 'Data Deleted'
]
];
return$this->respondDeleted($response);
}else{
return$this->failNotFound('No Data Found with id '.$id);
}
}
}

CodeIgniter 4 telah memberikan kemudahan bagi web developer dalam membuat RESTful API.

Dapat dilihat pada controller Products.php diatas, dengan hanya mengextends ResourceController kita telah dapat membuat RESTful API.

Tidak hanya itu,

Kita juga bisa dengan mudah membuat response dengan menggunakan API ResponseTrait.


Konfigurasi Routes.php

Langkah terakhir yang tidak kalah pentingnya yaitu melakukan sedikit konfigurasi pada file Routes.php yang terdapat pada folder app/Config.

Buka file Routes.php pada folder app/Config, kemudian temukan kode berikut:

$routes->get('/', 'Home::index');
$routes->resource('products');

products adalah nama controller


Aktifkan CORS (Cross-Origin Resources Sharing)

Agar resources dapat diakses di luar domain, kita perlu mengaktifkan CORS. Untuk menaktifkan CORS, buat file bernama Cors.php pada folder app/Filters. Kemudian ketikan kode berikut:

<?phpnamespaceApp\Filters;
useCodeIgniter\HTTP\RequestInterface;
useCodeIgniter\HTTP\ResponseInterface;
useCodeIgniter\Filters\FilterInterface;
Class Cors implements FilterInterface
{
publicfunctionbefore(RequestInterface$request, $arguments = null)
{
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Authorization");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
$method = $_SERVER['REQUEST_METHOD'];
if ($method == "OPTIONS") {
die();
}
}
publicfunctionafter(RequestInterface$request, ResponseInterface$response, $arguments = null)
{
// Do something here
}
}

Selanjutnya buka file Filters.php yang terdapat pada folder app/Config. Kemudian temukan kode berikut:

public$aliases = [
'csrf' => \CodeIgniter\Filters\CSRF::class,
'toolbar' => \CodeIgniter\Filters\DebugToolbar::class,
'honeypot' => \CodeIgniter\Filters\Honeypot::class,
];

Kemudian tambahkan cors filter seperti berikut:

public$aliases = [
'csrf' => \CodeIgniter\Filters\CSRF::class,
'toolbar' => \CodeIgniter\Filters\DebugToolbar::class,
'honeypot' => \CodeIgniter\Filters\Honeypot::class,
'cors' => \App\Filters\Cors::class, ];

Selanjutnya definisikan "cors" pada public globals seperti berikut:

public$globals = [
'before' => [
'cors'//'honeypot'// 'csrf',
],
'after' => [
'toolbar',
//'honeypot'
],
];

Testing

alankan project dengan mengetikkan perintah berikut pada Terminal / Command Prompt:

php spark serve
php spark serve --port 8081

If Error Happen

Test On Postman


Random Trial

$routes->resource('products');
//http://localhost:8080/QueryTest/funGet$routes->post('/funGet', 'QueryTest::funGet');
//http://localhost:8080/QueryTest/funPost//{// "nama" : "nama nih"//}$routes->post('/funPost', 'QueryTest::funPost');
//http://localhost:8080/QueryTest/funPostParams/1$routes->post('/funPostParams/(:num)', 'QueryTest::funPostParams/$1');
//http://localhost:8080/QueryTest/query$routes->post('/query', 'QueryTest::query');
<?phpnamespaceApp\Controllers;
useCodeIgniter\RESTful\ResourceController;
useCodeIgniter\API\ResponseTrait;
useApp\Models\ProductModel;
class QueryTest extends ResourceController
{
publicfunctionfunGet()
{
$response = [
'status' => 200,
'data' => 'data'
];
return$this->respond($response);
}
publicfunctionfunPost()
{
$json = $this->request->getJSON();
$response = [
'status' => 200,
'data' => $json
];
return$this->respond($response);
}
publicfunctionfunPostParams($id = null)
{
$response = [
'status' => 200,
'data' => $id
];
return$this->respond($response);
} publicfunctionquery()
{
$query = "SELECT * FROM product;";
$db = \Config\Database::connect();
$data = $db->query($query);
// return json_encode($data->getResult());// return json_encode($query->getResultArray());// return json_encode($query->getRow());return$this->respond($data->getResult());
}
}

Thanks to mfikri.com


Copyright 2021 M. Fadli Zein

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages