Membuat Service PHP Menggunakan Lumen Framework Part 3 Content Negotiation

Untuk tutorial sekarang adalah tentang Content Negotiation. Untuk tutorial sebelumnya disini https://catatanmystudi.blogspot.com/2019/11/membuat-service-php-menggunakan-lumen.html. Jadi dalam Http request bisa memanage payload / param yang dikirim ke server, dan jiga balikan / response yang diterima jika request selesai dijalankan. Dalam tutorial ini akan membahas Accep dan Content-Type header.

Tujuan tutorial ini adalah untuk:
1. Mampu implementasi Content Negotiation menggunakan Lumen
2. Membuat service yang bisa mem-validasi Accept header request. Accept header yang diterima adalah:
- application/json
- application/xml
3. Membuat service yang bisa mem-validasi Content-Type header request. Content-Type header yang diterima adalah:
- application/json
4. Accept Header dikirim ketika melakukan fungsi GET (Read), POST (Create), PUT (Update), DELETE (Delete)
5. Content-Type Header dikirim ketika melakukan fungsi POST (Create), PUT (Update)

Pertama buka project sebelumnya dan buka PostController.

Pada method index, tambahkan code seperti dibawah ini.
public function index(Request $request)
{
if ($request->header('Accept')==='application/json' || $request->header('Accept')==='application/xml') {
$post = Post::OrderBy("id", "DESC")->paginate(10);
if ($request->header('Accept')==='application/json') {
$output = [
"message"=>"posts",
"results"=>$post->items('data')
];
return response()->json($output, 200);
} else {
$xml = new \SimpleXMLElement('<posts/>');
foreach ($post->items('data') as $item) {
$xmlItem = $xml->addChild('post');
$xmlItem->addChild('id', $item->id);
$xmlItem->addChild('title', $item->title);
$xmlItem->addChild('status', $item->status);
$xmlItem->addChild('content', $item->content);
$xmlItem->addChild('userId', $item->user_id);
}
return $xml->asXML();
}
} else {
return response('Not Accepable', 406);
}
}code diatas memvalidasi header ''Accept" yang dikirimkan ke server, jika accept headernya json, maka akan mengembalikan response json, sebaliknya, jika xml maka akan mengembalikan xml response.

Pada method store, tambahkan code seperti dibawah

public function store(Request $request)
{
if ($request->header('Accept')==='application/json' || $request->header('Accept')==='application/xml') {
if ($request->header('Content-Type')==='application/json') {
$input = $request->all();
$post = Post::create($input);
return response()->json($post, 200);
} else {
$dataPOST = trim(file_get_contents('php://input'));
$xmlData = simplexml_load_string($dataPOST);

$post = Post::create([
"title"=>$xmlData->title,
"status"=>$xmlData->status,
"content"=>$xmlData->content,
"user_id"=>$xmlData->userId
]);
$xml = new \SimpleXMLElement('<post/>');
$xmlItem = $xml->addChild('post');
$xmlItem->addChild('id', $post->id);
$xmlItem->addChild('title', $post->title);
$xmlItem->addChild('status', $post->status);
$xmlItem->addChild('content', $post->content);
$xmlItem->addChild('userId', $post->user_id);
return $xml->asXML();
}
} else {
return response('Not Accepable', 406);
}
}
code diatas memvalidasi header ''Accept" yang dikirimkan ke server, dan juga memvalidasi Content-Type nya jika accept headernya json, maka akan mengembalikan response json, sebaliknya, jika xml maka akan mengembalikan xml response, dan jika Content-Type nya json maka server akan memproses kiriman data json untuk diteruskan disimpan ke database, begitu pula sebaliknya.

Buka posman untuk mengetestnya.

Jika Accept nya json


Jika Accept nya xml



Jika bukan keduanya


Sekian dan terimakasih.



Labels: PHP
0 Komentar untuk "Membuat Service PHP Menggunakan Lumen Framework Part 3 Content Negotiation"

Back To Top