将 Yii2 连接到另一个 RESTful 应用程序

Connect Yii2 to another RESTful application

我有一个 Yii2 应用程序。我想将它连接到另一个 restful 网页。所以用户将数据发送到我的应用程序,我将通过 POST 请求发送它们并根据 JSON 响应做一些事情。我怎样才能在 yii2 中发送请求/获取响应部分?

最好的方法是使用 curl 对您的 RESTful API 进行端到端调用,在这种情况下,您可能有兴趣查看 a yii2 extension for curl.

没有 Yii2 扩展,我们可以通过在控制器中创建更通用的函数或更优选的模型(用于共享访问)来实现此目的,如下例所示:

/**
 * $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;
}

然后我们根据需要调用此函数,即根据 methodurl and/or data.

如果为了访问 Web 服务 URL 启用了 fopen 包装器,它也很容易使用 file_get_contents

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

如果提供 JSON 响应,您可以按如下方式恢复 php 数组:

$response  = json_decode($response, TRUE);

如果返回 XML 响应,则

$response = new \SimpleXMLElement($response);

但是,如果 API 端点 returns HTTP 错误状态,file_get_contents 函数失败并显示警告并且 returns null。