2016-05-02 2 views
0

У меня есть приложение Yii2. Я хотел бы подключить его к другой спокойной веб-странице. Поэтому пользователь отправит данные в мое приложение, я отправлю их через запрос POST и сделаю что-то в соответствии с ответом JSON. Как я могу отправить ответную часть запроса/выборки в yii2?Подключить Yii2 к другому заявлению RESTful

ответ

1

Лучший метод должен был бы использовать локон, чтобы встык вызовы на RESTful API, в этом случае вы можете быть заинтересованы в проверке из a yii2 extension for curl.

Без расширения Yii2, мы можем сделать это путем создания более общая функция в контроллере или более предпочтительно модель (для общего доступа), как exampled ниже:

/** 
* $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 и/или data.

Также удобно использовать file_get_contents, если для доступа к URL-адресам веб-службы разрешена обертка fopen.

$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 endpoint возвращает статус ошибки HTTP, функция file_get_contents завершается с предупреждением и возвращает null.

Смежные вопросы