Как работать с WordPress HTTP API

REST API набирает популярность с бешеной скоростью, и это не зря. Он удобен в использовании и предлагает простой и понятный интерфейс для таких сервисов как Twitter, MailChimp, и GitHub.

API WordPress на подходе(на данном этапе в виде плагина), поэтому теперь лучшее время, чтобы это узнать все об существующем HTTP API в WordPress.

Как работать с WordPress HTTP API

Смотрите также:

  • Введение в WordPress Filesystem API
  • WordPress Color Picker: используем API инструмента выбора цвета в целях
  • 5 будущих направлений в создании WordPress плагинов, на которые вы обязаны обратить внимание
  • Советы для начинающих разработку веб-сайта на WordPress
  • WordPress Codex — ценный помощник разработчика

В данной статье мы покажем вам, что это такое, как он работает и где вы можете легко его использовать.

Что такое HTTP API?

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

Именно так что новый WordPress API так важен, он может создавать настоящую связь между пользовательской стороной приложения и основным кодом WordPress. Для того, чтобы использовать его, вы должны быть знакомы с отправкой HTTP запросов и получением ответов — все, что будет самой сутью процесса HTTP API.

Есть различные методы отправки HTTP запросов. HTTP API предлагает унифицированный интерфейс. Он использует пару вспомогательных возможностей, с которыми мы будем знакомиться дальше.

HTTP способы и ресурсы

Работа HTTP сосредоточена вокруг способов(иногда их называют глаголами) и ресурсов. Ресурсы определяют предмет, над которым вы планируете произвести определенное действие, а способы определяют что это будет за действие, его тип.

Ресурс — это URL, который указывает на объект в интернете, например, на пост. Есть ряд способов, которые могут работать с данным объектом и наиболее важными из них являются GET, POST, PUT и DELETE.

У вас должен быть достаточно большой опыт работы с GET, так как это тот способ, который вы используете для получения ресурса. Для просмотра данной статьи браузер сделал запрос GET к https://hostenko.com/wpcafe/tutorials/kak-rabotat-s-wordpress-http-api/. Запросы PUT используются для изменения ресурсов, запросы POST — для их создания, запросы DELETE — для их удаления.

К примеру, наш администратор мог бы отправить запрос DELETE https://hostenko.com/wpcafe/tutorials/kak-rabotat-s-wordpress-http-api/ для удаления поста. Эта функцию могла бы быть полезной для больших сайтов с собственной системой управления мобильных приложений.

Простой запрос

Давайте отправим простой запрос GET для тестирования. Это можно без труда сделать при помощи возможности wp_remote_get(), которая принимает два параметры. Первый настройка — это полный URL ресурса, второй — массив вариантов, который мы можем использовать для уточнения деталей.

$test = wp_remote_get( 'http://google.com');echo "<pre>"; var_dump($test); echo "</pre>";

Этот код будет извлекать домашнюю страницу Google. Если вы сбросите значение $test — что будет ответом, который Google отправляет обратно — вы должны увидеть все включенные элементы.

Заголовки(headers) содержат дополнительную информацию о каждом сообщении. В некотором случае REST API будет просить вас отправить определенную информацию в заголовках для того, чтобы сделать запрос.

Ответ(response) включает статус-код и фразы, которые вы видели на страницах 404 ошибок, 500 ошибок сервера или 301 и 302 редиректов. В W3.org есть все коды ошибок HTTP. Очень толковый ресурс, на который следует обратить внимание, если вы хотели бы выяснить что означает определенная ошибка.

Тело(body) включает ответ и, как правило, здесь необходимо искать всю основную информацию. В данном случае, мы получаем HTML — полный HTML адрес домашней страницы Google. При работе с REST API это стандартная практика: приобрести закодированную строку данных JSON. Иногда от API будет поступать запрос на добавление определенной строки в тело во время отправки запроса.

Раздел cookies будет содержать все cookies, которые были получены с сообщениями.

Как вы видите, отправлять запрос с HTTP API просто. Что может усложнить нашу работу с HTTP так это то, что REST API может быть чувствительным к корректности вводимых данных(что, в принципе, отлично). Поэтому, если вы пропустите несколько строк при чтении документации API, можете потом приобрести совершенно неработающее нечто.

Работа с API

Мы думаем, что не слукавим, если скажем, что большинство из вас будут использовать HTTP, чтобы взаимодействовать с REST API во всем интернете. В таком случае вы должны будете использовать второй настройка, чтобы уточнять определенные вещи, идентифицировать себя и избегать некоторых распространенных ошибок. Давайте начнем с простого примера — получение записей с Pinterest.

Все соответствующие API требуют проверки подлинности, но мы схитрим тут и будем использовать Pinterest token generator. После того, как вы авторизируетесь, вы получите маркер доступа, который можно использовать. Далее давайте сделаем сам запрос и получим необходимые записи.

$request = wp_remote_get( 'https://api.pinterest.com/v1/boards/marticz/home-office/pins/?access_token=<your access token>');$pins = json_decode( $request['body'], true);if(!empty( $pins['data'])) {echo '<ul>';foreach( $pins['data'] as $pin) {echo '<li><a href="'. $pin['url']. '">'. $pin['note']. '</a></li>';}echo '</ul>';}

Мы вставили код в файл content-page.php в теме Twenty Fifteen, чтобы протестировать, как все будет работать. Результат — страница, которая выводит последние записи с Pinterest из Home Offices.

Как работать с WordPress HTTP API

Удостоверьтесь, что вы используете собственный маркер в первой строке. Вторая строка декодирует тело ответа, так что мы можем использовать массив. «Пины» хранятся в $pins[‘data’], так что мы просто прошлись циклом по позициям и вывели их в виде списка

Аутентификация

На данном этапе у многих могут возникнуть трудности. Как минимум потому, что для аутентификации требуется одно дополнительное действие и, как правило, некоторые заголовки.

Давайте в виде примера посмотрим на Twitter API, конкретно на аутентификацию, которую вы можете использовать для проверки подлинности заявки при помощи Twitter.

Обязательно читайте документацию

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

Но тогда есть большая вероятность, что вы пропустите следующую строку:

The body of the request must be grant_type=client_credentials.

Невыполнение этого маленького пункта приведет к тому, что все не будет работать, даже если иные аспекты были настроены правильно. Так что, чтобы избежать подобных ситуаций, убедитесь, что вы прочитали все тщательно.

Добавляйте заголовки и иные настройки

Следуя четким указаниям из документации, мы создали запрос POST, который должен генерировать маркер доступа. Вот как это выглядит.

$key = base64_encode( urlencode( "n8KP16uvGZA6xvFTtb8IAA:i4pmOV0duXJv7TyF5IvyFdh5wDIqfJOovKjs92ei878"));$request = wp_remote_post('https://api.twitter.com/oauth2/token', array('headers' => array('Authorization' => 'Basic '. $key,'Content-Type' => 'application/x-www-form-urlencoded;charset=UTF-8'),'body' => 'grant_type=client_credentials','httpversion' => '1.1'));$token = json_decode( $request['body']);echo "<pre>"; var_dump($token); echo "</pre>";

Первым шагом будет URL-кодирование доступа токена и секрета (ни один из них не будет фактическим токеном). Мы добавили два заголовка: один для авторизации, который включает учетные данные для доступа, второй для типа содержимого, который Твиттер поручил нам добавить.

Тело также было заполнено, а HTTP-версия была добавлена (это тоже требование Твиттера). Ответ будет содержать окончательный маркер доступа в разделе тела. Вам понадобится этот маркер для всех последующих вызовов API.

Как работать с WordPress HTTP API

Кэширование Access Token

Маркер действует в течение достаточно долгого времени. Запрашивать его при каждой загрузке страницы или когда приложению надо выполнить какое-то действие — пустая трата времени. В WordPress вы можете использовать временное хранилище для его значения и использовать само хранилище в каждом последующем вызове.

$token = get_transient( 'twitter_access_token' );$token = ( empty( $token ) ) ? get_twitter_access_token() : $token;$request = wp_remote_get('https://api.twitter.com/1.1/followers/ids.json?screen_name=danielpataki&count=5', array('headers' => array('Authorization' => 'Bearer ' . $token,'Content-Type' => 'application/x-www-form-urlencoded;charset=UTF-8'),'httpversion' => '1.1'));$token = json_decode( $request['body'] );

Этот запрос к API Twitter должен показать пять наших фолловеров (простой список идентификаторов). Мы получили наш токен из хранилища. Если он не существует, то мы используем возможность get_twitter_access-token(). Она добавит токен в хранилище, чтобы в следующий раз мы могли его использовать оттуда.

Обратите внимание, что это не идеальное решение, но этот пример помогает вам увидеть и понять логику данного способа. В виде альтернативы, мы бы просто могли использовать возможность get_twitter_access_token(), которая быстро бы справилась с поставленной задачей без кучи if-ов.

Вспомогательные возможности HTTP API

Сейчас, когда мы получили представление о том, что это вообще такое и где его можно использовать, давайте посмотрим на все возможности WordPress HTTP API, которые могут вам помочь. Есть четыре возможности, которые будут делать запрос:

  • wp_remote_get()
  • wp_remote_post()
  • wp_remote_head()
  • wp_remote_request()

По их названиям довольно очевидно догадаться что они делают. Последняя wp_remote_request() — это обобщенная функцию, которую вы можете использовать с любым HTTP глаголом.

Следующие пять возможностей помогают с легкостью извлекать все ответы:

  • wp_remote_retrieve_body()
  • wp_remote_retrieve_header()
  • wp_remote_retrieve_headers()
  • wp_remote_retrieve_response_code()
  • wp_remote_retrieve_response_message()

Опять-таки, по названиям все без проблем понять. Если есть функция, лучше использовать данные возможности, а не писать все вручную. Это поможет иным разработчикам разбираться в коде и использовать хуки, если они будут доступны в будущем.

Заключение

Как вы видите, взаимодействовать с REST API с помощью HTTP API WordPress запросто. Мы настоятельно рекомендуем попробовать поработать с данными инструментами, так как на данном этапе развитие WordPress происходит в направлении API, так что лучше разобраться во всем теперь, чем потом чувствовать себя отставшим от жизни.

Если вы поймете, что готовы к новой порции информации о HTTP, мы можем порекомендовать прочитать Руководство Джеймса Маршалла , в котором подробно говорится о HTTP глаголах, ресурсах, ошибках и иных важных вещах.

Источник: wpmudev.org

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *