У PHP є кілька способів відправити HTTP запит, в WordPress тільки один. Але цей один спосіб включає в себе всі варіанти підтримувані PHP - це і є API, це стандарт і це зручно!
Коротке знайомство з HTTP API
Для зовсім новачків, мабуть варто пояснити, що таке HTTP запит. Це запит браузера до сервера, або одного сервера до іншого, де відбувається такий діалог:
- Привіт сервер, можеш мені показати файл: file.html?
- Вітання! Можу, ось він.
Виглядає такий діалог ось так (тільки на місці клієнта в даному випадку виступає наш сервер, який робить запит на інший сервер):
При створенні 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: