tutorial cara membuat web service.
Sebelum mulai memberikan paparan cara membuat web service, ada
baiknya jelaskan dahulu tentang apa itu web service. Menurut Wikipedia, web service atau juga disebut Web API (Application Programming Interface)
adalah layanan yang memungkinankan dua buah sistem atau lebih yang
saling independen dapat saling berkomunikasi seperti halnya client
server melalui protokol HTTP. Beberapa contoh implementasi web service
adalah sistem login seperti yang ada di Kaskus, atau Detik.com.
Jika Anda mengunjungi Kaskus, maka Anda akan menjumpai sistem login yang dapat menggunakan akun Facebook, Yahoo maupun Twitter.
Dengan kata lain, Anda dapat bergabung dalam komunitas forum Kaskus
atau istilah kerennya Kaskuser hanya dengan memiliki akun FB, Yahoo
atau Twitter tanpa harus registrasi di dalam Kaskus nya sendiri.
Contoh lain implementasi web service adalah di bagian komentar
Detik.com. Setiap kali kita akan mengisi komentar di Detik.com, kita
bisa menggunakan akun FB kita.
Nah… yang menjadi pertanyaan adalah, kok bisa ya kita bisa masuk ke
dalam sistem Kaskus maupun Detik.com menggunakan akun lain seperti FB,
Yahoo maupun Twitter? Ya… ini karena FB, Yahoo dan Twitter menyediakan
service yang memungkinkan sistem lain menggunakan akun mereka untuk
login. Dan… kebetulan Kaskus dan Detik.com ini memanfaatkan service
tersebut. Dalam kasus ini, FB, Yahoo, dan Twitter dikatakan bertindak
sebagai server sedangkan Kaskus dan Detik.com bertindak sebagai client.
Nah… pada artikel ini, saya akan mencoba memaparkan cara membuat web
service sederhana dengan studi kasus proses login menggunakan PHP dan
MySQL.
Adapun skenario dari contoh kasus yang saya ambil di sini adalah
andaikan terdapat dua buah sistem yang saling independen, katakanlah A
dan B. Sistem A ini andaikan berada pada URL http://sistem-a. Di dalam
sistem A ini, terdapat data user yang terdiri dari username dan
password. Sedangkan di dalam sistem B yang berada pada URL
http://sistem-b terdapat sistem login yang nantinya memanfaatkan user
dan password yang ada di sistem A.
Ide untuk mengimplementasikan skenario di atas adalah: sebuah script
harus diletakkan di dalam sistem B untuk memproses form login. Dalam
proses login, script tersebut mengirim username dan password ke sistem
A untuk dicek validitasnya melalui GET Request dengan parameter
username dan password yang dibaca dari form login. Selanjutnya di dalam
sistem A terdapat script untuk membaca username dan password yang
berasal dari GET request dari sistem B untuk diproses validitasnya.
Sebagai responnya, sistem A akan mengenerate sebuah dokumen XML yang di
dalamnya terdapat sebuah data misalkan berbentuk TRUE atau FALSE.
Bernilai TRUE jika username dan password tersebut valid, dan FALSE jika
tidak valid. Selanjutnya di sistem B respon tersebut dibaca, jika data
yang dibaca bernilai TRUE maka proses login berhasil dan jika FALSE
maka login gagal.
Mungkin Anda bertanya, apakah response dari sistem yang bertindak
sebagai server harus dalam bentuk XML? Jawabannya adalah tidak harus,
selain bentuk XML kita juga bisa membuat respon dalam bentuk JSON karena dengan dokumen JSON struktur entitas data juga dapat dibaca dengan jelas seperti halnya XML.
OK sekarang saatnya tahap implementasi ide di atas ke dalam bentuk script PHP nya.
Pertama kita buat script untuk web service yang nantinya diletakkan
di sistem A. Script ini nanti berfungsi untuk menangkap atau membaca
GET request berupa data username dan password dari sistem lain,
memproses validitasnya dan akhirnya mengenerate response dalam bentuk
XML.
Sebelum kita buat scriptnya, kita ambil contoh struktur tabel username yang ada di sistem A adalah sbb:
1.
CREATE
TABLE
`
user
` (
2.
`username`
varchar
(20),
3.
`
password
`
varchar
(20),
4.
PRIMARY
KEY
(`username`)
5.
)
1.
INSERT
INTO
`
user
`
VALUES
(
'user1'
,
'password1'
);
2.
INSERT
INTO
`
user
`
VALUES
(
'user2'
,
'password2'
);
Nah, kita bisa mulai membuat scriptnya sekarang.
service.php
01.
<?php
02.
03.
// koneksi ke database di sistem A
04.
mysql_connect(
"dbhost"
,
"dbuser"
,
"dbpass"
);
05.
mysql_select_db(
"dbname"
);
06.
07.
// membaca username dari GET request
08.
$user
=
$_GET
[
'username'
];
09.
// membaca password dari GET request
10.
$pass
=
$_GET
[
'password'
];
11.
12.
// membaca data password user berdasar usernamenya
13.
$query
=
"SELECT * FROM user WHERE username = '$user'"
;
14.
$hasil
= mysql_query(
$query
);
15.
$data
= mysql_fetch_array(
$hasil
);
16.
$password
=
$data
[
'password'
];
17.
18.
// mencocokkan password user dari db dan dari GET request
19.
// jika cocok, maka responnya TRUE, jika tidak cocok responnya FALSE
20.
if
(
$pass
==
$password
)
$response
=
"TRUE"
;
21.
else
$response
=
"FALSE"
;
22.
23.
// membuat header dokumen XML
24.
header(
'Content-Type: text/xml'
);
25.
echo
"<?xml version='1.0'?>"
;
26.
27.
// membuat tag data respon pada dokumen XML
28.
echo
"<data>"
;
29.
echo
"<response>"
.
$response
.
"</response>"
;
30.
echo
"</data>"
;
31.
?>
1.
http://sistem-a/service.php?username=user1&;password=xxxxx
Sedangkan berikut ini tampilan jika diberikan GET request melalui URL
1.
http://sistem-a/service.php?username=user1&;password=password1
Nah… selanjutnya, kita buat script di sistem B untuk proses login termasuk form loginnya.
index.html
1.
<
h1
>Form Login</
h1
>
2.
3.
<
form
method
=
"post"
action
=
"login.php"
>
4.
<
table
>
5.
<
tr
><
td
>Username</
td
><
td
><
input
type
=
"text"
name
=
"username"
></
td
></
tr
>
6.
<
tr
><
td
>Password</
td
><
td
><
input
type
=
"password"
name
=
"password"
></
td
></
tr
>
7.
<
tr
><
td
></
td
><
td
><
input
type
=
"submit"
name
=
"submit"
value
=
"Submit"
></
td
></
tr
>
8.
</
form
>
01.
<?php
02.
03.
// membaca username dari form login
04.
$username
=
$_POST
[
'username'
];
05.
// membaca password dari form login
06.
$password
=
$_POST
[
'password'
];
07.
08.
// membuat URL GET request ke sistem A
09.
$url
=
"http://sistem-a/service.php?username="
.
$username
.
"&password="
.
$password
;
10.
11.
// mengirim GET request ke sistem A dan membaca respon XML dari sistem A
12.
$bacaxml
= simplexml_load_file(
$url
);
13.
14.
// membaca data XML hasil dari respon sistem A
15.
foreach
(
$bacaxml
->response
as
$respon
)
16.
{
17.
// jika responnya TRUE maka login sukses
18.
// jika FALSE maka login gagal
19.
if
(
$respon
==
"TRUE"
)
echo
"Login Sukses"
;
20.
else
if
(
$respon
==
"FALSE"
)
echo
"Login Gagal"
;
21.
}
22.
23.
?>
Untuk membaca dan memparsing data XML yang diterima dari sistem A kita bisa menggunakan function
simplexml_load_file()
.Wah.. lantas cara mencoba script di atas bagaimana ya? kan ada dua 2 sistem yang berbeda tuh? jangan khawatir, Anda dapat mencoba script di atas melalui localhost (PC lokal) dan hosting. Kita misalkan localhost adalah sistem B nya dan hostingnya adalah sistem A nya. Jadi, Anda buat database user dan script service.php nya di hosting, dan script form loginnya di localhost. Selanjutnya Anda tinggal mengubah URL web servicenya saja ke URL hosting Anda.
Nah… mudah bukan membuatnya??
Ups… tunggu dulu, sistem di atas sebenarnya sudah berjalan, namun.. apakah tidak rawan bila menggunakan GET request seperti di atas. Artinya bisa saja ada sistem lain katakanlah C yang sebenarnya tidak berhak mengakses web service ke sistem A yang menggunakan service tersebut untuk sistem loginnya. Nah.. dengan demikian kita perlu memproteksi GET request tersebut. Caranya bagaimana? ya… kita bisa gunakan kode API. Kode API ini diberikan oleh sistem A kepada sistem B atau sistem yang berhak mengakses web servicenya. Kode API berfungsi sebagai password dalam melakukan GET request. Jika kode API yang dikirim melalui GET request oleh suatu sistem tidak dikenal oleh sistem A berarti sistem tersebut tidak berhak mengakses web servicenya.
OK… untuk mengimplementasikan kode API sebagai pengaman GET request dalam web service, kita sedikit modifikasi script di atas, baik di script service.php (di sistem A) maupun di login.php nya (di sistem B). Dalam contoh ini, misalkan kode API yang diberikan kepada sistem B oleh sistem A ini berbentuk string ’1234′. Maka script service.php nya adalah
service.php
01.
<?php
02.
03.
// koneksi ke database di sistem A
04.
mysql_connect(
"dbhost"
,
"dbuser"
,
"dbpass"
);
05.
mysql_select_db(
"dbname"
);
06.
07.
// membaca username dari GET request
08.
$user
=
$_GET
[
'username'
];
09.
// membaca password dari GET request
10.
$pass
=
$_GET
[
'password'
];
11.
// membaca kode API dari GET request
12.
$api
=
$_GET
[
'api'
];
13.
14.
// jika kode API nya '1234' maka lakukan proses validasi username dan password
15.
// jika kode API nya salah, maka proses validasi tidak dilakukan (diberikan respon "FALSE")
16.
if
(
$api
==
"1234"
)
17.
{
18.
// membaca data password user berdasar usernamenya
19.
$query
=
"SELECT * FROM user WHERE username = '$user'"
;
20.
$hasil
= mysql_query(
$query
);
21.
$data
= mysql_fetch_array(
$hasil
);
22.
$password
=
$data
[
'password'
];
23.
24.
// mencocokkan password user dari db dan dari GET request
25.
// jika cocok, maka responnya TRUE, jika tidak cocok responnya FALSE
26.
if
(
$pass
==
$password
)
$response
=
"TRUE"
;
27.
else
$response
=
"FALSE"
;
28.
}
29.
else
$response
=
"FALSE"
;
30.
31.
// membuat header dokumen XML
32.
header(
'Content-Type: text/xml'
);
33.
echo
"<?xml version='1.0'?>"
;
34.
35.
// membuat tag data respon pada dokumen XML
36.
echo
"<data>"
;
37.
echo
"<response>"
.
$response
.
"</response>"
;
38.
echo
"</data>"
;
39.
?>
login.php
01.
<?php
02.
03.
// membaca username dari form login
04.
$username
=
$_POST
[
'username'
];
05.
// membaca password dari form login
06.
$password
=
$_POST
[
'password'
];
07.
08.
// membuat URL GET request ke sistem A
09.
$url
=
"http://sistem-a/service.php?username="
.
$username
.
"&password="
.
$password
.
"&api=1234"
;
10.
11.
// mengirim GET request ke sistem A dan membaca respon XML dari sistem A
12.
$bacaxml
= simplexml_load_file(
$url
);
13.
14.
// membaca data XML hasil dari respon sistem A
15.
foreach
(
$bacaxml
->response
as
$respon
)
16.
{
17.
// jika responnya TRUE maka login sukses
18.
// jika FALSE maka login gagal
19.
if
(
$respon
==
"TRUE"
)
echo
"Login Sukses"
;
20.
else
if
(
$respon
==
"FALSE"
)
echo
"Login Gagal"
;
21.
}
22.
23.
?>
6 komentar:
Penjelasan tentang hal ini lama saya cari.. walau jujur saja ketika membacanya memaksa dahi untuk berkerut :) untuk ukuran saya yang otodidak. Namun setidaknya ada hikmahnya database saya tidak membengkak akibat bongkar pasang plugin :) karena cita2 memiliki kotak komentar seperti blog2 besar itu :D. Semoga saja saya memiliki semangat untuk mencoba script ini :D
Terus semangat :),terus mencoba dan tetap semangat... good luck.GB
Warning: simplexml_load_file(): I/O warning : failed to load external entity "username=user1&password=password1" in C:\xampp\htdocs\ancur\login.php on line 12
Notice: Trying to get property of non-object in C:\xampp\htdocs\ancur\login.php on line 15
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\ancur\login.php on line 15
ini maksudnya apa?
semoga saja saya diberikan kekuatan dan kesehatan untuk mendevelop sistem ini, sangat membantu gan...ane mau ucapin terima kasih,.baru yang ini nagkep mksudnya...hehe...
della marina : coba lihat pada algoritmanya apa sudah tersusun dan lihat data anda pada databasenya apa sdh sesuai
Libian Nyata : Terima Kasih kembali semoga anda dapat mengembangkannya
Thanks gan atas pencerahanya, masih kerja keras nich buat API baru. Berminggu-minggu masih gagal tapi tetep semangat.
Post a Comment