Більше результатів...

Загальні селектори
Тільки точні збіги
Шукати у заголовках
Шукати у контенті
Вибір типів постів
Фільтрувати за категоріями
FAQ
Hostenko
Натхнення
Відео уроки
Новини
Плагіни
Теми
Уроки
Хакі

REST API набирає своєї популярності з шаленою швидкістю, і це не дарма. Він зручний у використанні та надає простий і зрозумілий інтерфейс для таких сервісів як Twitter, MailChimp та GitHub.

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

inet.ws - Powerful VPS Hosting в США, Canada, UK та DE!

Як працювати з WordPress HTTP API

Дивіться також:

У цій статті ми покажемо вам, що це таке, як він працює, і де ви можете його використовувати.

Що таке HTTP API?

Ми не дуже здивуємо вас, якщо скажемо, що HTTP API — це спосіб надсилати та отримувати повідомлення, використовуючи протокол HTTP. Ваш браузер посилає та отримує HTTP повідомлення весь час, саме таким способом ви завантажуєте будь-яку веб-сторінку. Через API REST, 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 для видалення поста. Ця функція може бути дуже корисною для великих веб-сайтів із власною системою керування мобільних додатків.

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

Давайте надішлемо простий запит GET для тестування. Це можна зробити за допомогою функції wp_remote_get()яка приймає два параметри. Перший параметр це повний URL ресурсу, другий масив варіантів, який ми можемо використовувати для уточнення деталей.

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

Цей код отримуватиме домашню сторінку Google. Якщо ви скинете значення $ тест — що є відповіддю, яку відправляє Google назад — ви повинні побачити всі включені елементи.

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

Відповідь (відповідь) містить статус-код та фрази, які ви бачили на сторінках 404 помилок, 500 помилок сервера або 301 та 302 редиректів. У W3.org є усі коди помилок HTTP. Дуже розумний ресурс, на який варто звернути увагу, якщо ви хочете з'ясувати, що означає певна помилка.

Тіло (тіло) містить відповідь і, як правило, саме тут потрібно шукати всю основну інформацію. У цьому випадку ми отримуємо HTML - повну HTML адресу домашньої сторінки Google. Працюючи з REST API, це вже стандартна практика: отримати закодований рядок даних JSON. Іноді від API надходитиме запит на додавання певного рядка в тіло під час відправки запиту.

Розділ печиво міститиме всі 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 з Домашні офіси.

Як працювати з WordPress HTTP API

Переконайтеся, що ви використовуєте свій власний маркер у першому рядку. Другий рядок декодує тіло відповіді, тому ми можемо використовувати масив. "Піни" зберігаються в $pins['data']тому ми просто пройшлися циклом за позиціями і вивели їх у вигляді списку

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

На цьому етапі у багатьох можуть виникнути проблеми. Як мінімум тому, що для аутентифікації потрібна одна додаткова дія та, як правило, деякі заголовки.

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

Обов'язково читайте документацію

Саме через невиконання цього пункту ви можете зробити свою першу помилку. Звичайно, якщо ви вже справжній професіонал у роботі REST API, ви можете одразу перейти до розділу Authentication і просто його переглянути.

Але тоді є велика ймовірність, що ви пропустите наступний рядок:

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
inet.ws - Powerful VPS Hosting в США, Canada, UK та DE!
Олексій Шевченко
редактор wpcafe
Вивчає сайтобудування з 2008 року. Практикуючий вебмайстер, що спеціалізується на створенні сайтів WordPress. Задати питання Олексію можна на https://profiles.wordpress.org/wpthemeus/

Коментарі до запису: 1

Вікторія:

Добрий день. Є магазин на wordpress wooc, у нас постало завдання передавати дані замовлення з кошика постачальнику методом get. Ніколи цього не робили, хоча магазини розробляємо)) Хотіли самі розібратися, але, мабуть, щось не розуміємо. Будь ласка, напишіть на імейл. Дякую.

Додати коментар або відгук