RESPONSE API
RESPONSE API
Kita akan membuat service menggunakan
PHP Lumen yang bisa melakukan Content Negotiation yang
bisa mem-validasi Accept header request, Accept header yang akan diterima
adalah aplication/json dan aplication/xml. Membuat service yang bisa
mem-validasi Content-Type header request, Content-Type header yang
diterima adalah : aplication/json
1. Endpoint
Di
bawah ini adalah Endpoint yang akan implementasikan berdasarkan Restful API
Design:
Method (HTTP Verbs)
|
Endpoint |
Header Content
Negotiation |
GET |
/posts |
Accept |
GET |
/post/{postId} |
Accept |
POST |
/users |
Accept, Content-Type |
PUT |
/post/{postId} |
Accept, Content-Type |
DELETE |
/post/{postId} |
Accept |
2. Fungsi Read All
1) Fungsi
Read ini akan melakukan satu validasi, yakni:
a. Melakukan
validasi Accept Header: hanya menerima application/json atau application/xml.
b. Accept
Header ini akan menentukan response format yang di kembalikan.
2) Buka file app/Http/Controllers/MahasiswaController.php
dan update function index menjadi seperti ini:
//Read data
public function index(Request $req)
{
$acceptHeader = $req->header('Accept');
if($acceptHeader === 'aplication/json' || $acceptHeader === 'aplication/xml'){
$mahasiswa = Mahasiswa::OrderBy('id', 'ASC')->paginate(10);
if($acceptHeader === 'aplication/json'){
return response()->json($mahasiswa->items('data'),200);
}else{
$xml = new\simpleXMLElement('<post/>');
foreach($mahasiswa->items('data') as $item){
$xmlItem = $xml->addChild('mahasiswa');
$xmlItem->addChild('id', $item->id);
$xmlItem->addChild('nim', $item->nim);
$xmlItem->addChild('nama', $item->nama);
$xmlItem->addChild('jurusan', $item->jurusan);
$xmlItem->addChild('alamat', $item->alamat);
}
return $xml->asXML();
}
}else{
return response()->json('Not Accepted', 406);
}
}
3) Buka aplikasi Postman untuk melakukan pengetesan. Dibawah ini adalah tampilan Postman ketika melakukan request tanpa mengirimkan Accept Request Header. Responnya adalah ‘Not Accepted!’. Ini terjadi karena kita belum mengirimkan Accept Header.
4) Sekarang kita tambahkan Request Header. Click tab Headers (disamping tab Body yang lagi aktif). Tambahkan Accept Header dengan value application/json. Ketika kita click Send, maka tampilannya akan seperti dibawah ini.
3. Fungsi Create
1) Fungsi
Create ini akan melakukan satu validasi, yakni:
a. melakukan
validasi Accept Header: hanya menerima application/json atau application/xml.
b. Melakukan
validasi Content-Type Header: hanya menerima application/json
2)
Buka file app/Http/Controllers/MahasiswaController.php dan update
function storeData menjadi seperti ini:
//Create Data
public function storeData(Request $req)
{
$acceptHeader = $req->header('Accept');
if($acceptHeader === 'aplication/json' || $acceptHeader === 'aplication/xml'){
$contentTypeHeader = $req->header('Content-Type');
if($contentTypeHeader === 'aplication/json'){
$input = $req->all();
$post = Mahasiswa::create($input);
return response()->json($post, 200);
} else {
return response('Unsupported Media Type', 413);
}
}else{
return response('Not Accepted', 406);
}
}
3) Sekarang
kita tambahkan Request Header. Click tab Headers (disamping tab Body yang lagi
aktif). Tambahkan Accept Header dengan value application/json. Ketika kita
click Send, maka tampilannya akan seperti dibawah ini.
4. Fungsi Read Detail
1) Fungsi
Read ini akan melakukan satu validasi, yakni:
a. melakukan
validasi Accept Header: hanya menerima application/json atau application/xml.
b. Accept
Header ini akan menentukan response format yang di kembalikan.
2) Buka file app/Http/Controllers/MahasiswaController.php
dan update function showData menjadi seperti ini:
//Read data By Id
public function showData(Request $req, $id)
{
$acceptHeader = $req->header('Accept');
if($acceptHeader === 'aplication/json' || $acceptHeader === 'aplication/xml'){
$mahasiswa = Mahasiswa::find($id);
if($acceptHeader === 'aplication/json'){
return response()->json($mahasiswa, 200);
}else{
$xml = new\SimpleXMLElement('<post/>');
$xmlItem = $xml->addChild('Mahasiswa');
$xmlItem->addChild('id', $mahasiswa->id);
$xmlItem->addChild('nim', $mahasiswa->nim);
$xmlItem->addChild('nama', $mahasiswa->nama);
$xmlItem->addChild('jurusan', $mahasiswa->jurusan);
$xmlItem->addChild('alamat', $mahasiswa->alamat);
return $xml->asXML();
}
}else{
return response('Not Accepted', 406);
}
}
3) Sekarang kita tambahkan Request Header. Click tab Headers (disamping tab Body yang lagi aktif). Tambahkan Accept Header dengan value application/json. Ketika kita click Send, maka tampilannya akan seperti dibawah ini.
5. Fungsi Update
1) Fungsi
Update ini akan melakukan satu validasi, yakni:
a. melakukan
validasi Accept Header: hanya menerima application/json atau application/xml.
b. Melakukan
validasi Content-Type Header: hanya menerima application/json
2)
Buka file app/Http/Controllers/MahasiswaController.php dan update
function updateData menjadi seperti ini:
//Update Data
public function updateData(Request $req, $id)
{
$acceptHeader = $req->header('Accept');
if($acceptHeader === 'aplication/json' || $acceptHeader === 'aplication/xml'){
$contentTypeHeader = $req->header('Content-Type');
if($contentTypeHeader === 'aplication/json'){
$input = $req->all();
$post = Mahasiswa::find($id);
$post->fill($input);
$post->save();
return response()->json($post, 200);
}else{
return response('Unsupported Media Type', 415);
}
}else{
return response('Not Accepted', 406);
}
}
6. Fungsi Delete
1) Fungsi
Delete ini akan melakukan satu validasi, yakni:
a. melakukan
validasi Accept Header: hanya menerima application/json atau application/xml.
2) Buka file app/Http/Controllers/MahasiswaController.php
dan update function deleteData menjadi seperti ini:
//Delete Data
public function deleteData(Request $req, $id)
{
$acceptHeader = $req->header('Accept');
if($acceptHeader === 'aplication/json' || $acceptHeader === 'aplication/xml'){
$contentTypeHeader = $req->header('Content-Type');
if($contentTypeHeader === 'aplication/json'){
$post = Mahasiswa::find($id);
$post->delete();
$message = ['message' => 'Delete successfully', 'post_id' => $id];
return response()->json($message, 200);
}else{
return response('Unsupport Media Type', 415);
}
}else{
return response('Not Accepted', 406);
}
}
Komentar
Posting Komentar