将 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;
}
然后我们根据需要调用此函数,即根据 method
和 url
and/or data
.
如果为了访问 Web 服务 URL 启用了 fopen 包装器,它也很容易使用 file_get_contents
。
$response = file_get_contents('http://example.com/path/to/api?param1=stack¶m2=overflow');
如果提供 JSON 响应,您可以按如下方式恢复 php 数组:
$response = json_decode($response, TRUE);
如果返回 XML 响应,则
$response = new \SimpleXMLElement($response);
但是,如果 API 端点 returns HTTP 错误状态,file_get_contents 函数失败并显示警告并且 returns null。
我有一个 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;
}
然后我们根据需要调用此函数,即根据 method
和 url
and/or data
.
如果为了访问 Web 服务 URL 启用了 fopen 包装器,它也很容易使用 file_get_contents
。
$response = file_get_contents('http://example.com/path/to/api?param1=stack¶m2=overflow');
如果提供 JSON 响应,您可以按如下方式恢复 php 数组:
$response = json_decode($response, TRUE);
如果返回 XML 响应,则
$response = new \SimpleXMLElement($response);
但是,如果 API 端点 returns HTTP 错误状态,file_get_contents 函数失败并显示警告并且 returns null。