Wordpress http api - документація, секрети і тонкощі простими словами

У PHP є кілька способів відправити HTTP запит, в WordPress тільки один. Але цей один спосіб включає в себе всі варіанти підтримувані PHP - це і є API, це стандарт і це зручно!

Коротке знайомство з HTTP API

Для зовсім новачків, мабуть варто пояснити, що таке HTTP запит. Це запит браузера до сервера, або одного сервера до іншого, де відбувається такий діалог:

  1. Привіт сервер, можеш мені показати файл: file.html?
  2. Вітання! Можу, ось він.

Виглядає такий діалог ось так (тільки на місці клієнта в даному випадку виступає наш сервер, який робить запит на інший сервер):

Wordpress http api - документація, секрети і тонкощі простими словами

При створенні HTTP запитів в PHP, як правило використовуються один з варіантів: бібліотека cURL або вбудовані в PHP потоки (streams). Щоб спростити і стандартизувати різні способи відправки запитів, з версії 2.7. в WordPress з'явився клас WP_Http. який і ліг в основу HTTP API.

З версії WP 4.6 ядро ​​WP_Http повністю замінили PHP бібліотекою Requests for PHP і тепер всі запити виконуються через неї. Вищезазначені класи WP_Http_Curl і WP_Http_Streams вже не використовуються. Таким чином, технічно HTTP API WordPress кардинально змінився, але залишився колишньому зовні: все працює як і працювало. Також, з впровадженням бібліотеки Requests очікуються нові можливості, деякі з них вже з'явилися (нечутливі до регістру заголовки, підтримка міжнародних доменів на зразок böcean.ch), а інші (паралельні запити) з'являться в наступних релізах і поки можливі лише з використанням бібліотеки Requests безпосередньо.

Застаріло з WP 4.6. WP_Http визначає тип транспорту, і викликає інший клас відповідає цьому типу. Викликаний клас створює сам запит. За замовчуванням в WordPress два таких класу, для різних типів: WP_Http_Curl і WP_Http_Streams

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

Ще один плюс HTTP API в тому, що ми маємо єдиний стандарт вказуються даних, при роботі з різними типами транспортування запитів, тобто ми завжди вказуємо однакові параметри і передаємо їх в функцію HTTP API, а клас вже вибирає відповідний тип транспорту, наприклад cURL, змінює наші параметри під зрозумілі для поточного типу транспорту, і відправляє запит.

HTTP API WordPress сьогодні - це повноцінне API, в якому враховано багато дрібниці і виправлені сотні помилок. Також слід зауважити, що до версії WP 4.4 HTTP API значно відрізнявся від того який він зараз, тому деякі моменти з цього мануала можуть не працювати на версіях до 4.4.

Майже всі можливості транспорту, можна змінювати через опції або фільтри. Наприклад, через фільтр http_api_transports можна додати ще один, свій клас транспорту. Або через установку констант в файл wp-config.php можна включити режим проксі:

Щоб розібратися, як працює проксі дивіться клас WP_HTTP_Proxy<>

Ну, і нарешті, HTTP API можна без особливих зусиль розширити, для роботи з Twitter API, Google Maps API і т.д.

Функції HTTP API і відправка запиту

Використовувати HTTP API дуже просто, для цього існують спеціальні функції API:

Надсилання запитів: