2016-05-02 17 views
0

我有一個Yii2應用程序。我想將它連接到另一個寧靜的網頁。所以用戶將數據發送到我的應用程序,我會通過POST請求發送它們,並根據JSON響應做一些事情。我如何在yii2中發送請求/獲取響應部分?將Yii2連接到另一個RESTful應用程序

回答

1

最好的方法是使用捲曲,使端到端應用於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和/或data呼籲在需要的基礎即此功能。

如果啓用fopen包裝以便訪問Web服務URL,它也很方便易用file_get_contents

​​

如果JSON響應服務,您可以收回PHP數組如下:

$response = json_decode($response, TRUE); 

如果返回XML響應,然後

$response = new \SimpleXMLElement($response); 

但是,如果API端點返回HTTP錯誤狀態,file_get_contents函數失敗,併發出警告並返回null。

相關問題