We all know about curl. PHP has a library for curl. We need to install it before we can use it in php.
sudo apt-get install php5-curl
sudo service apache2 restart
After installing restart the apache server for curl to take effect.
function rest_call($method, $url, $data = false, $contentType= false, $token = false)
{
$curl = curl_init();
if($token){ //Add Bearer Token header in the request
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Authorization: '.$token
));
}
switch ($method)
{
case "POST":
curl_setopt($curl, CURLOPT_POST, 1);
if ($data){
if($contentType){
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: '.$contentType
));
}
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
break;
case "PUT":
curl_setopt($curl, CURLOPT_PUT, 1);
break;
default:
if ($data)
$url = sprintf("%s?%s", $url, http_build_query($data));
}
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
$postData = array("name"=>"John Doe", "from"=>"New York");
$string = http_build_query($postData);
$url = 'https://api.example.com/v1.0/user';
$jsonResponse = rest_call("POST",$url, $string, 'application/x-www-form-urlencoded');
$response = json_decode($jsonResponse);
When sending the request as JSON data, Content-Type
header needs to be set as application/json
. Store the data in a php array and use json_encode
function to convert it into JSON String to be passed in the request body.
$postData = array("name"=>"John Doe", "from"=>"New York");
$jsonData = json_encode($postData);
// Send the request
$url = 'https://api.example.com/v1.0/user';
$jsonResponse = rest_call('POST',$url, $jsonData,'appplication/json');
//Decode json back to PHP object
$response = json_decode($jsonResponse);
The JSON returned in the response is converted back to PHP object, using json_decode
. The below example shows how to use JSON returned in the response.
So once we call our REST API, we want to use the JSON on the server-side to render the html.
$covidJsonResponse = rest_call("GET","https://api.metamug.com/covid/v1.0/india");
$covidIndiaObject = json_decode($covidJsonResponse);
$lastCovidUpdateInfo = end($covidIndiaObject->historical_count);
As you can see the json_decode method is gives us a jsp object, which will help in server side rendering. If this REST API call was made from the browser, to update a div with the json values we would require dom manipulation.
<div class="card col-md-4">
<div class="card-body">
<h3><span class="badge badge-success" id="cured_count">
<?php echo $lastCovidUpdateInfo->total_cured_count; ?>
</span>
</h3>
</div>
</div>
After the DOM is rendered on the client side, we are required to change using javascript. In this case, we can have the same ease of accessing the json object and its attributes without the DOM manipulation.
There are cases we would like to send this JSON down to the browser like charting and for the user of js libraries that php can't handle. We can make the JSON we retrieved using our REST call in php to the javascript. During the initial page load, this json will be passed in the DOM. Client side rendering is faster as it can avoid the HTTP call to fetch the JSON.
<script>
var covidJsonResponse = <?php echo $covidJsonResponse ?>;
</script>
Heavier payload is always better than more HTTP calls