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

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

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

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

Что такое 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.

Удостоверьтесь, что вы используете свой собственный маркер в первой строке. Вторая строка декодирует тело ответа, поэтому мы можем использовать массив. "Пины" хранятся в $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.

Кэширование 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_request() — это обобщенная функция, которую вы можете использовать с любым HTTP глаголом.

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

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

Заключение

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

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

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

Вам понравился материал?

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

Такой e-mail уже зарегистрирован. Воспользуйтесь формой входа или введите другой.

Вы ввели некорректные логин или пароль

Извините, для комментирования необходимо войти.

1 комментарий

сначала новые
по рейтингу сначала новые по хронологии
Ульяна

https://wpcafe.org/anketa-wordpress-guru/ Почему эта страница пуста?