Marek Čačko
Marek Čačko

Reputation: 1010

Connect Yii2 to another RESTful application

I have a Yii2 application. I would like to connect it to another restful webpage. So user will send data to my application, I will send them via POST request and do something according to a JSON response. How can I do the send a request / fetch response part in a yii2?

Upvotes: 1

Views: 3323

Answers (1)

Henry Ohanga
Henry Ohanga

Reputation: 416

The best method would be to use curl to make end to end calls to your RESTful API, in which case you may be interested in checking out a yii2 extension for curl.

Without a Yii2 extension, we can accomplish this by creating a more general function in a controller or more preferably a model (for shared access) as exampled below:

/**
 * $method e.g POST, GET, PUT 
 * $data = [
        'param' => 'value',
   ]
 */

public function curlToRestApi($method, $url, $data = null)
{
    $curl = curl_init();

    // switch $method
    switch ($method) {
        case 'POST':
            curl_setopt($curl, CURLOPT_POST, 1);

            if($data !== null) {
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            }
            break;
            // logic for other methods of interest
            // .
            // .
            // .

        default:
            if ($data !== null){
                $url = sprintf("%s?%s", $url, http_build_query($data));
            }
    }

    // Authentication [Optional]
    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($curl, CURLOPT_USERPWD, "username:password");

    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    $result = curl_exec($curl);

    curl_close($curl);

    return $result;
}

We then call this function on a need basis i.e. depending on the method and url and/or data.

It is also conveniently easy to use file_get_contents if fopen wrapper is enabled in order to access Web Service URLs.

$response = file_get_contents('http://example.com/path/to/api?param1=stack&param2=overflow');

If a JSON response is served, you can recover the php array as follows:

$response  = json_decode($response, TRUE);

If an XML response is returned, then

$response = new \SimpleXMLElement($response);

However, if the API endpoint returns an HTTP error status, the file_get_contents function fails with a warning and returns null.

Upvotes: 2

Related Questions