Membuat Simple PHP Service App

Firman Mardiyanto
3 min readOct 2, 2021

--

Hallo, pHappier. Kali ini kita akan membuat service menggunakan PHP murni tanpa menggunakan framework. Ini bisa jadi latihan untuk kita lebih mengenal dulu native php untuk selanjutnya kita melangkah ke PHP Framework seperti CI, Laravel, dll.

Ini adalah daftar endpoint dan contoh response yang tersedia dalam web service yang akan kita buat :

GET “/”
GET “/users”
GET “/users/{userId}”

Struktur Folder

Struktur Folder Project

Berikut isi kode dari tiap masing-masing filenya :

Index.php

<?php

ini_set('display_errors', 1);
error_reporting(E_ALL);

require __DIR__ . "/core/Bootstrap.php";

config/Routes.php

<?php

$routes = [
'/users' => 'Users.php',
'/' => 'Home.php'
];

controller/Home.php

<?php

$url = $_SERVER['REQUEST_URI'];

$urlArr = explode('index.php', $url);
if (count($urlArr) >= 2)
$url = $urlArr[1];

if (strpos($url, '/')
!== 0) $url = '/$url';

if ($url == '/' && $_SERVER['REQUEST_METHOD'] == 'GET')
echo json_encode(array(
'service_name' => 'PHP Service App',
'status' => 'Running'
));

controller/Users.php

<?php

$url = $_SERVER['REQUEST_URI'];

$urlArr = explode('index.php', $url);
if (count($urlArr) >= 2) $url = $urlArr[1];

if (strpos($url, '/') !== 0)
$url = '.$url';

if ($url == '/users' && $_SERVER['REQUEST_METHOD'] == 'GET') {
$users = array(
array(
'id' => 1,
'name' => 'Sumatrana',
'email' => 'sumantrana@gmail.com',
'address' => 'Padang',
'gender' => 'Laki-laki'
),
array(
'id' => 2,
'name' => 'Jawarianto',
'email' => 'jawarianto@gmail.com',
'address' => 'Cimahi',
'gender' => 'Laki-laki'
),
array(
'id' => 3,
'name' => 'Kalimantanio',
'email' => 'kalimantanio@gmail.com',
'address' => 'Samarinda',
'gender' => 'Laki-laki'
),
array(
'id' => 4,
'name' => 'Sulawesiani',
'email' => 'sulawesiani@gmail.com',
'address' => 'Makasar',
'gender' => 'Perempuan'
),
array(
'id' => 5,
'name' => 'Papuani',
'email' => 'papuani@gmail.com',
'address' => 'Jayapura',
'gender' => 'Perempuan'
));
echo json_encode($users);
}

if (preg_match("/users\/([0-9])+/", $url, $matches) && $_SERVER['REQUEST_METHOD'] == 'GET') {
$users = array(
'1' => array(
'id' => 1,
'name' => 'Sumatrana',
'email' => 'sumantrana@gmail.com',
'address' => 'Padang',
'gender' => 'Laki-laki'
),
'2' => array(
'id' => 2,
'name' => 'Jawarianto',
'email' => 'jawarianto@gmail.com',
'address' => 'Cimahi',
'gender' => 'Laki-laki'
),
'3' => array(
'id' => 3,
'name' => 'Kalimantanio',
'email' => 'kalimantanio@gmail.com',
'address' => 'Samarinda',
'gender' => 'Laki-laki'
),
'4' => array(
'id' => 4,
'name' => 'Sulawesiani',
'email' => 'sulawesiani@gmail.com',
'address' => 'Makasar',
'gender' => 'Perempuan'
),
'5' => array(
'id' => 5,
'name' => 'Papuani',
'email' => 'papuani@gmail.com',
'address' => 'Jayapura',
'gender' => 'Perempuan'
)
);

$user = $users[$matches[1]];

echo json_encode($user);
}

core/Bootstrap.php

<?php

require __DIR__ . '/Router.php';
require __DIR__ . '/../config/Routes.php';

$router = new Router;
$router->setRoutes($router);

$url = $_SERVER['REQUEST_URI'];
require __DIR__ . '/../controller/' . $router->getFileName($url);

core/Router.php

<?php

class Router
{
private $routes = [];

function setRoutes(array $routers)
{
$this->routes = $routers;
}

function getFileName(string $url)
{
foreach ($this->routes as $route => $file) {
if (strpos($url, $route) !== false)
return $file;
}
}
}

Untuk menjalan aplikasi anda dapat menggunakan command line php dengan cara menjalankan php -S localhost:8000 di dalam root folder project, atau jika menggunakan web server seperti XAMPP/WAMP/MAMP simpan folder project pada htdocs web server dan dapat di akses melalui localhost/php-service-app/index.php

--

--