Teman-teman developer semuanya, di tutorial kali ini saya akan membuat tutorial membuat API login dengan bahasa pemrograman PHP, adapun studi kasusnya yaitu membuat API untuk login dan register.
Untuk mengikuti tutorial ini sebaiknya teman-teman sudah memahami dulu beberapa hal, diantaranya:
- PHP dasar
- OOP dengan PHP,
- MySQLi
- MySQLi Prepared Statements
- Postmen (untuk pengujian API)
Sebelum ke studi kasus, mungkin teman-teman ada yang belum tahu apa itu API? API adalah singkatan dari
Application Programming Interface yaitu sebuah teknologi untuk memfasilitasi pertukaran informasi atau data antara dua atau lebih aplikasi perangkat lunak.
Contoh real dari penggunaan API adalah dalam pembuatan aplikasi andriod, yang mana API ini digunakan sebagai jembatan atau penghubung antara andriod dengan server, karena data dan informasi yang ditampilkan pada andriod itu mayoritas berasal dari sebuah server, tidak semuanya disimpan dalam aplikasi android.
Contoh lain adalah ketika kita masuk pada sebuah website dengan menggunakan akun facebook, nah ketika kita masuk menggunakan akun facebook tersebut sebenarnya terdapat API dari facebook yang digunakan oleh website yang akan kita masuki, bukan berarti ada koneksi ke database facebook langsung.
Nah sekarang kita akan belajar membuat API yang bisa digunakan untuk login dan juga register, untuk itu bagi teman-teman yang baru belajar tentang API dan ingin bisa untuk membuatnya, sebaiknya ikuti tutorial ini sembari mempraktekan juga, karena ada sebuah kalimat dari senior kita yang maknanya cukup jelas:
Anda tidak akan bisa berenang dengan hanya membaca buku "Cara Berenang Seperti Juara Dunia", tapi anda harus praktek!
- Pertama
Persiapkan web server di komputer/laptop masing-masing, untuk windows bisa menggunakan XAMPP, dan untuk linux bisa menggunakan LAMPP. Atau web server lainnya sesuai dengan kesukaan teman-teman.
- Kedua
Buatlah database dengan nama yang bisa disesuaikan teman-teman, sebagai contoh saya akan buat database dengan nama db_sosmed
- Ketiga
Buatlah tabel dengan nama yang bisa disesuaikan teman-teman. Sebagai contoh saya akan membuat tabel denngan nama user dan berisi field-field id, name, email, dan password. Atau teman-teman bisa menggunakan code sql berikut ini :
create table tbl_user(
id int(11) primary key auto_increment,
name varchar(50) not null,
email varchar(100) not null unique,
password varchar(80) not null
);
- Keempat
Buatlah sebuah folder pada directory web server teman-teman semisal di htdocs pada windows, dan /var/www/html untuk linux ubuntu. Adapun nama foldernya bebas bisa disesuaikan teman-teman. Sebagai contoh saya beri nama sosmed.
- Kelima
Didalam folder sosmed tersebut, buatlah sebuah folder dengan nama include, folder ini akan digunakan untuk menyimpan fungsi-fungsi yang sering digunakan, seperti untuk koneksi ke database. Jadi untuk windows kurang lebih seperti ini strukturnya:
- htdocs
-- sosmed
--- include
Dan untuk linux:
- html
-- sosmed
--- include
- Keenam
Didalam folder include buatlah file dengan nama Config.php, file ini ini berisi konstanta untuk infomasi ke database.
<?php
define("DB_HOST", "localhost");
define("DB_USER", "root");
define("DB_PASSWORD", "");
define("DB_DATABASE", "sosmed");
?>
- Ketujuh
Didalam folder include buatlah filde dengan nama DB_Connect.php. File ini berisi kelas yang berfungsi untuk menghubungkan aplikasi ke database.
<?php
class DB_Connect {
private $conn;
// koneksi ke database
public function connect() {
require_once 'Config.php';
// koneksi ke mysql database
$this->conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
// return database handler
return $this->conn;
}
}
?>
DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE merupakan konstanta yang sudah diisi di file Config.php
- Kedelapan
Didalam folder include buatlah file dengan nama DB_Function.php . File ini berisi class yang berfungsi untuk menyimpan fungsi-fungsi yang berhubungan dengan database, seperti fungsi simpan user, ambil user, dan cek apakah user sudah terdaftar atau belum.
<?php
class DB_Function {
// construct
function __construct()
{
require_once 'DB_Connect.php';
// koneksi ke databse
$db = new DB_Connect();
$this->conn = $db->connect();
}
// destructor
public function __destruct()
{
}
public function simpan_user($nama, $email, $password)
{
// Hash password menggunakan bcrypt
$encrypted_password = password_hash($password, PASSWORD_BCRYPT);
$stmt = $this->conn->prepare("INSERT INTO tbl_user(name, email, password) VALUES(?,?,?)");
$stmt->bind_param("sss", $nama, $email, $encrypted_password);
$result = $stmt->execute();
$stmt->close();
// cek jika sudah sukses
if ($result)
{
$stmt = $this->conn->prepare("SELECT * FROM tbl_user WHERE email = ?");
$stmt->bind_param("s", $email);
$stmt->execute();
$user = $stmt->get_result()->fetch_assoc();
$stmt->close();
return $user;
}
else
{
return false;
}
}
/**
* Get user berdasarkan email dan password
*/
public function get_user_by_email_and_password($email, $password) {
$stmt = $this->conn->prepare("SELECT * FROM tbl_user WHERE email = ?");
$stmt->bind_param("s", $email);
if ($stmt->execute()) {
$user = $stmt->get_result()->fetch_assoc();
$stmt->close();
// verifikasi password user
$encrypted_password = $user['password'];
$verify = password_verify($password, $encrypted_password);
// cek password jika sesuai
if ($verify) {
// autentikasi user berhasil
return $user;
}
} else {
return NULL;
}
}
// Cek user ada atau tidak
public function is_user_existed($email)
{
$stmt = $this->conn->prepare("SELECT email FROM tbl_user WHERE email =?");
$stmt->bind_param("s", $email);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows() > 0)
{
$stmt->close();
return true;
}
else
{
$stmt->close();
return false;
}
}
}
-- Kesembilan
Didalam folder sosmed buatlah filde dengan nama login.php. File ini berfungsi untuk login dengan parameternya email dan password.
<?php
require_once 'include/DB_Function.php';
$db = new DB_Function();
// json response array
$response = array("error" => FALSE);
if (isset($_POST['email']) && isset($_POST['password']))
{
// menerima patameter POST (email dan password)
$email = $_POST['email'];
$password = $_POST['password'];
// get the user by email and password
// get user berdasarkan email dan passeword
$user = $db->get_user_by_email_and_password($email, $password);
if ($user != false)
{
$response["error"] = FALSE;
$response["user"]["name"] = $user["name"];
$response[""]["email"] = $user["email"];
echo json_encode($response);
}
else
{
$response["error"] = TRUE;
$response["error_msg"] = "Login gagal. Password atau Email salah";
echo json_encode($response);
}
}
else
{
$response["error"] = TRUE;
$response["error_msg"] = "Parameter (email atau password) ada yang kurang";
echo json_encode($response);
}
?>
- Kesepuluh
Didalam folder sosmed buatlah file dengan nama register.php. File berisi sintak untuk menerima data dari client lalu diteruskan ke server.
<?php
require_once 'include/DB_Function.php';
$db = new DB_Function();
// json response array
$response = array("error" => FALSE);
if (isset($_POST['name']) && isset($_POST['email']) && isset($_POST['password'])) {
// menerima parameter POST ( name, email, password )
$name = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];
// Cek jika user ada dengan email yang sama
if ($db->is_user_existed($email)) {
// user telah ada
$response["error"] = TRUE;
$response["error_msg"] = "User telah ada dengan email " . $email;
echo json_encode($response);
} else {
// buat user baru
$user = $db->simpan_user($name, $email, $password);
if ($user) {
// simpan user berhasil
$response["error"] = FALSE;
$response["user"]["name"] = $user["name"];
$response["user"]["email"] = $user["email"];
echo json_encode($response);
} else {
// gagal menyimpan user
$response["error"] = TRUE;
$response["error_msg"] = "Terjadi kesalahan saat melakukan registrasi";
echo json_encode($response);
}
}
} else {
$response["error"] = TRUE;
$response["error_msg"] = "Parameter (nama, email, atau password) ada yang kurang";
echo json_encode($response);
}
?>
- Kesebelas
Saatnya testing menggunakan aplikasi Postman dengan method POST, jangan lupa untuk menyertakan parameter di bagian Body Postman.
API Register : http://localhost/sosmed/register.php
Parameter : name, email, password
Jika berhasil, maka akan muncul seperti ini:
Response jika berhasil:
{
"error": false,
"user": {
"name": "Ruswan",
"email": "ruswan11@ummi.ac.id"
}
}
Response Jika parameter kurang:
{
"error": true,
"error_msg": "Parameter (nama, email, atau password) ada yang kurang"
}
Response jika email sudah pernah terdaftar:
{
"error": true,
"error_msg": "User telah ada dengan email ruswan11@ummi.ac.id"
}
API Login : http://localhost/sosmed/login.php
Parameter : email dan password
Jika berhasil, maka akan tampil seperti ini:
Response jika login berhasil:
{
"error": false,
"user": {
"name": "Ruswan"
},
"": {
"email": "ruswan11@ummi.ac.id"
}
}
Response jika username atau password ada yang kosong:
{
"error": true,
"error_msg": "Parameter (email atau password) ada yang kurang"
}
Response jika email atau password salah:
{
"error": true,
"error_msg": "Login gagal. Password atau Email salah"
}