работа - Вызов API REST в PHP




simple php restful api (8)

Наш клиент предоставил мне REST API, для которого мне нужно сделать PHP-вызов. Но на самом деле документация, предоставленная API, очень ограничена, поэтому я действительно не знаю, как вызвать службу.

Я попытался это сделать Google, но единственное, что появилось, это уже истекший Yahoo! о том, как вызвать службу. Не упоминать заголовки или что-либо подробное.

Есть ли приличная информация о том, как вызвать REST API или какую-то документацию об этом? Потому что даже в W3schools они описывают только метод SOAP. Каковы различные варианты создания API для отдыха в PHP?


CURL - это самый простой способ. Вот простой вызов

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "THE URL TO THE SERVICE");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, POST DATA);
$result = curl_exec($ch);


print_r($result);
curl_close($ch);

Вам нужно будет знать, поддерживает ли REST API, поддерживающий GET или POST, или оба метода. Код ниже - это то, что работает для меня, я называю свой собственный API веб-сервисов, поэтому я уже знаю, что делает API и что он вернет. Он поддерживает методы GET и POST, поэтому менее чувствительная информация попадает в URL (GET), а информация, подобная имени пользователя и паролю, представляется как переменные POST. Кроме того, все происходит через соединение HTTPS.

Внутри кода API я кодирую массив, в который я хочу вернуться в json-формат, а затем просто используйте команду PHP echo $ my_json_variable, чтобы сделать эту json-строку доступной для клиента.

Итак, как вы можете видеть, мой API возвращает данные json, но вам нужно знать (или посмотреть на возвращаемые данные, чтобы узнать), в каком формате отвечает ответ API.

Вот как я подключаюсь к API со стороны клиента:

$processed = FALSE;
$ERROR_MESSAGE = '';

// ************* Call API:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.myapi.com/api.php?format=json&action=subscribe&email=" . $email_to_subscribe);
curl_setopt($ch, CURLOPT_POST, 1);// set post data to true
curl_setopt($ch, CURLOPT_POSTFIELDS,"username=myname&password=mypass");   // post data
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);
curl_close ($ch);

// returned json string will look like this: {"code":1,"data":"OK"}
// "code" may contain an error code and "data" may contain error string instead of "OK"
$obj = json_decode($json);

if ($obj->{'code'} == '1')
{
  $processed = TRUE;
}else{
  $ERROR_MESSAGE = $obj->{'data'};
}

...

if (!$processed && $ERROR_MESSAGE != '') {
    echo $ERROR_MESSAGE;
}

Кстати, я также попытался использовать метод file_get_contents (), поскольку некоторые из предложенных здесь пользователей, но это не работает для меня. Я обнаружил, что метод завитки является более быстрым и надежным.


Вы можете пойти с POSTMAN, приложение, которое упрощает API. Заполните поля запроса, а затем он будет генерировать код для вас на разных языках. Просто нажмите код справа и выберите предпочитаемый язык.


Если вы используете Symfony, у вас есть отличный клиентский пакет для отдыха, который включает в себя все 100 исключений и бросает их вместо того, чтобы возвращать бессмысленный код ошибки + сообщение.

Вы действительно должны это проверить: https://github.com/CircleOfNice/CiRestClientBundle

Мне нравится интерфейс:

try {
    $restClient = new RestClient();
    $response   = $restClient->get('http://www.someUrl.com');
    $statusCode = $response->getStatusCode();
    $content    = $response->getContent();
} catch(OperationTimedOutException $e) {
    // do something
}

Работает для всех методов http.


Если у вас есть URL-адрес, и ваш php поддерживает его, вы можете просто вызвать file_get_contents:

$response = file_get_contents('http://example.com/path/to/api/call?param1=5');

если $ response - JSON, используйте json_decode, чтобы превратить его в php-массив:

$response = json_decode($response);

если $ response - XML, используйте класс simple_xml:

$response = new SimpleXMLElement($response);

http://sg2.php.net/manual/en/simplexml.examples-basic.php


Использовать HTTPFUL

Httpful - простая, цельная, читаемая библиотека PHP, предназначенная для того, чтобы говорить по-разному. Это позволяет разработчику сосредоточиться на взаимодействии с API-интерфейсами вместо просеивания страниц curl set_opt и является идеальным клиентом PHP REST.

Httpful включает ...

  • Поддержка Readable HTTP Method (GET, PUT, POST, DELETE, HEAD и OPTIONS)
  • Пользовательские заголовки
  • Автоматический «Умный» анализ
  • Автоматическая сериализация полезной нагрузки
  • Базовый аут
  • Сертификат стороны клиента Auth
  • Запрос «Шаблоны»

Ex.

Отправьте запрос GET. Автоматический анализ JSON-ответа.

Библиотека уведомляет JSON Content-Type в ответе и автоматически анализирует ответ на собственный PHP-объект.

$uri = "https://www.googleapis.com/freebase/v1/mqlread?query=%7B%22type%22:%22/music/artist%22%2C%22name%22:%22The%20Dead%20Weather%22%2C%22album%22:%5B%5D%7D";
$response = \Httpful\Request::get($uri)->send();

echo 'The Dead Weather has ' . count($response->body->result->album) . " albums.\n";

На самом деле есть много клиентов. Один из них - Pest - проверьте это. И имейте в виду, что эти вызовы REST - это простой HTTP-запрос с различными методами: GET, POST, PUT и DELETE.


как сказал Кристоф Винклер, это базовый класс для его достижения:

curl_helper.php

// This class has all the necessary code for making API calls thru curl library

class CurlHelper {

// This method will perform an action/method thru HTTP/API calls
// Parameter description:
// Method= POST, PUT, GET etc
// Data= array("param" => "value") ==> index.php?param=value
public static function perform_http_request($method, $url, $data = false)
{
    $curl = curl_init();

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

            if ($data)
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            break;
        case "PUT":
            curl_setopt($curl, CURLOPT_PUT, 1);
            break;
        default:
            if ($data)
                $url = sprintf("%s?%s", $url, http_build_query($data));
    }

    // Optional Authentication:
    //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;
}

}

Затем вы всегда можете включить файл и использовать его, например: any.php

    require_once("curl_helper.php");
    ...
    $action = "GET";
    $url = "api.server.com/model"
    echo "Trying to reach ...";
    echo $url;
    $parameters = array("param" => "value");
    $result = CurlHelper::perform_http_request($action, $url, $parameters);
    echo print_r($result)




rest