WordPress REST API – грандиозная инициатива, имеющая вид функционального плагина; эта инициатива была разработана специально для ядра WordPress. Однако она может показаться несколько запутанной и сложной простым пользователям. Давайте посмотрим на то, что собой представляет данный проект, почему он так важен, и как принять в нем участие.
WordPress REST API – самый волнующий проект для платформы с тех пор, как появились произвольные типы записей в WordPress 2.9 и 3.0. Я действительно так считаю.
Проект постоянно обновляется, дорабатывается, он пока еще не привязан к определенному релизу ядра, поэтому очень сложно понять, что вообще он собой представляет.
Давай поговорим о том, что собой представляет новый API, почему он так важен, а также ответим на некоторые важные вопросы, связанные с API.
- Что такое JSON REST API?
- JSON: JavaScript Object Notation
- REST: Representational State Transfer
- Что такое WordPress REST API?
- Как можно использовать WordPress REST API?
- WordPress как приложение
- Произвольные админки WordPress
- Интеграция с приложениями
- Когда WordPress REST API появится в ядре?
- Следите за разработкой
- Улучшения, которые появятся в новой версии
- Участники WordPress REST API
- Основы использования WordPress REST API
Что такое JSON REST API?
Давайте сначала дадим определение акронимам. Это может показаться утомительным для опытных разработчиков, однако это – хороший способ настроиться на нужный лад.
API: Application Program Interface (интерфейс программирования приложений)
API – это достаточно широкий термин. Любая программа – API. Если у вас имеется некоторый вид конструкции в языке программирования (к примеру, в PHP), и конструкция позволяет выполнять задачи программирования, то в таком случае можно смело говорить об API.
Давайте в качестве примера возьмем произвольные типы записей. В WordPress имеется API произвольных типов записей. В действительности это просто большой участок кода, который упрощает выполнение сложных задач. С помощью данного API вы можете создать новые типы контента (которые будут отвечать структуре записей и страниц), с помощью нескольких строк кода.
Команда разработчиков создала программный интерфейс, чтобы сделать это возможным. Это – самое простое, дилетантское определение API.
JSON: JavaScript Object Notation
JSON – это предпочтительный формат структурирования данных, чтобы эти данные впоследствии могли быть считаны разными приложениями. Вы можете создать форматированные данные с помощью JSON в одном языке программирования и считывать их в другом. JSON напоминает XML, однако выглядит более универсальным по сравнению с ним.
JSON делает возможным взаимодействие между WordPress и мобильными приложениями, поскольку JSON – общий для них формат данных, т.е. вы можете, к примеру, создавать данные на стороне WordPress и передавать их в JSON, чтобы их можно было считать уже на стороне мобильного приложения. Такие отношения можно выстроить не только между WordPress и мобильными приложениями; эти отношения могут быть самыми разными, что делает все более реалистичной фразу «Wordpress – платформа для мобильных приложений».
JSON выглядит ужасно, если вы взглянете на его «сырые данные». К примеру, сайт Post Status обладает включенным WordPress REST API, поэтому, если вы перейдете по адресу https://poststatus.com/wp-json/posts, вы увидите все последние записи в формате JSON. Для человеческого глаза это не слишком привлекательно, но вот для языка программирования это вполне красиво.
REST: Representational State Transfer
REST API – это архитектурное предпочтение. Большинство REST API, включая WP REST API, основаны на HTTP. Это означает, что основные действия REST API – это HTTP-действия: POST, GET, PUT, DELETE.
Таким образом, с помощью REST API мы можем считывать данные и управлять ими по HTTP.
Wikipedia объясняет RESTful API гораздо лучше, чем я; вот основное определение:
Различные API, которые придерживаются архитектурных ограничений REST, обычно называют RESTful. RESTful API, основанные на HTTP, определяются при помощи следующих аспектов:
- Базовый URI; к примеру, http://example.com/resources/
- Internet media type (медиа-тип) для данных. Обычно используется JSON, но могут применяться и другие валидные медиа-типы (к примеру, XML, Atom, микроформаты, изображения и т.д.)
- Стандартные HTTP-методы (GET, PUT, POST, DELETE)
- Гипертекстовые ссылки, указывающие на состояние
- Гипертекстовые ссылки, указывающие на связанные ресурсы
Эти ограничения являются стандартами для работы с RESTful API. В моем случае я использую WP API и Mailchimp API. Взаимодействие с любым из них практически аналогично, поскольку они имеют похожие ограничения.
Что такое WordPress REST API?
Теперь, когда мы знаем, что собой представляет JSON REST API, мы можем лучше определить, что собой представляет WordPress REST API.
WordPress REST API – это общий интерфейс данных и программирования, который позволяет считывать и записывать информацию в WordPress через разные приложения. Теперь разработчикам, которые нацелены на работу с WordPress, не понадобится углубленно разбираться в WP.
Как можно использовать WordPress REST API?
Разработчики смогут выполнять практически все функции управления данными и считывания данных, которые возможны в PHP, воспользовавшись новым API. Что это означает? Это означает многое.
Благодаря JSON API, фронтэнд WordPress можно «отвязать» от WordPress. К примеру, разработчики могут попросту обойти механизм шаблонов WordPress, используя API. Они могут даже хранить бэкэнд WordPress и фронтэнд сайта в разных стеках сервера, поскольку считывать данные можно при помощи API.
Есть уже много сайтов, которые делают это. Некоторые из них используют произвольные API, созданные самостоятельно, в то время как остальные используют новый WordPress REST API. Давайте обсудим несколько примеров:
- New York Times используют WordPress REST API для самых разных вещей. Они в состоянии использовать API в комбинации со своей собственной CMS. Они могут легко получать данные WordPress для размещения их на главной странице и в других участках сайта. Также они используют REST API для прямых трансляций с разных событий.
- Bloomberg Politics используют WordPress для публикации материалов, однако если вы посмотрите на фронтэнд, вы никогда об этом не догадаетесь. Я не думаю, что они используют официальный WordPress REST API, однако, в принципе, возможно все.
- Mashable используют WordPress для публикации материалов, однако их фронтэнд не напоминает WordPress. Они тоже используют произвольную реализацию, на которую они перешли еще до того, как официальный REST API был выпущен.
Эти три сайта используют REST API во фронтэнде. Однако приложения могут выходить далеко за рамки этих примеров.
WordPress как приложение
Если вам интересен реальный пример, вы можете посмотреть презентацию K. Adam White с WordCamp San Francisco 2014, в которой он рассказывает о том, как его команда использовала WordPress в качестве CMS для приложения node.js. Презентация раскрывает тот потенциал применения API, о котором я говорил.
Изучить готовый репозиторий ExpressPress, который Адам отметил в своей презентации – значит получить полезный опыт.
Произвольные админки WordPress
Администрирование WordPress не обязательно должно проходить через админку WordPress. С помощью REST API вы можете создавать, редактировать и удалять контент абсолютно любым способом.
С помощью API можно легко создавать произвольные панели администрирования. Это позволит разработчикам проектировать удобный процесс управления для разных приложений.
К примеру, WordPress.com уже использует свой собственный REST API, чтобы создать уникальный администраторский опыт взаимодействия для блоговых платформ.
Другие сервисы, как, к примеру, Happy Tables, также имеют произвольные панели администратора WordPress. В будущем создавать такие админки станет еще проще, поскольку REST API вынесет всю существующую в WordPress функциональность в API, и разработчикам уже не понадобится раз за разом создавать колесо.
Интеграция с приложениями
Также WordPress сможет проще взаимодействовать с разными приложениями. Раньше приложения, взаимодействующие с WordPress, использовали для этого XML-RPC. Благодаря REST API выросла возможность надежного выполнения комплексных функций. Можно будет очень легко создать мобильное приложение, которое сможет не только читать данные WordPress, но и создавать, редактировать, а также удалять эти данные.
Мобильное приложение может быть написано на любом языке, будь то Objective-C, Swift и т.д., и взаимодействовать с WordPress.
Пример такого подхода в действии – AppPresser. AppPresser — это фреймворк разработки приложений, который интегрируется с WordPress REST API для простого создания приложений WordPress.
Однако вы не ограничены только лишь созданием приложений с помощью инструментов, таких как AppPresser. Люди могут иметь одну область хранения данных (WordPress), на основе которой будет функционировать и сайт, и приложение. Кроме того, приложения могут соединяться с базой данной WordPress напрямую через API.
В последующие несколько лет мы увидим десятки разных WordPress-приложений и панелей администрирования. Возможно, мы даже столкнемся с целыми стартапами, основанными на создании WordPress-приложений.
WordPress может предоставить превосходный фундамент для управления пользователями, управления контентом, и многого другого – снижая объем работ, которые необходимо выполнить разным стартапам при создании прототипа мобильного приложения. REST API показывает, что мобильное приложение может выглядеть как угодно; можно использовать такой инструмент, как WordPress, чтобы реализовать многочисленные внутренние связи.
Когда WordPress REST API появится в ядре?
REST API находится в процессе активной разработки.
REST API не был намечен на определенный релиз, хотя он официально поддерживает модель «возможностей как плагинов». Скорее всего, REST API войдет в ядро WordPress в 2015 году, где-то между WordPress 4.3 и WordPress 4.5. Думаю, что скорее в 4.5, поскольку перед добавлением надо будет провести его всестороннее тестирование.
Следите за разработкой
Если вы хотите следить за разработкой WordPress REST API, вы можете пойти следующими путями.
Знайте, что новая главная версия находится в процессе разработки, поэтому есть определенное несоответствие между 1.1.x и грядущей версией в плане информации, кода и документации. Новая версия – и значительно реструктуризированная – уже примерно 7 месяцев находится в разработке.
Официальная страница плагина WordPress.org тесно синхронизирована с последним релизом 1.x, хотя и отстает от нескольких коммитов. Плагин создал Райан Маккью, который является руководителем проекта и основным автором плагина.
WP API Github – страница, где идет активное отслеживание ошибок, управление версиями и обработка релизов. API имеет свой собственный аккаунт на Github, а также несколько смежных репозиториев.
Чтобы понять состояние WP REST API, надо мыслить в терминах версий Develop, Master, and Stable.
- Репозиторий плагина WordPress.org – это Stable версия WP API.
- Мастер-ветвь Github – это бета-версия следующего релиза
- Develop-ветвь Github – это все активные разработки
Если вы используете REST API в продакшне, вы должны использовать только версию WordPress.org. Версии Master и Development могут использоваться только для тестирования и разработки.
Улучшения, которые появятся в новой версии
Долгий цикл разработки новой версии REST API объясняется тем, что была запланирована масштабная реконструкция проекта.
Основываясь на обратной связи и реальных случаях использования, команда смогла выявить необходимые улучшения, которые надо внедрить.
В этой версии придут многочисленные изменения, среди которых особо следует отметить следующие:
- Будут добавлены новые функции, которые позволят регистрировать произвольные конечные точки с пространствами имен и версиями. Рейчел Бейкер показал Gist с примерами таких конечных точек. Это означает, что темы и плагины смогут расширять API, увеличивая его мощь.
- В новой версии будет добавлено создание комментариев и обработка редактирования
- Команда также работает над поддержкой конечных точек опций, чтобы можно было просматривать, редактировать и создавать общие опции сайта, т.е. полное управление сайтом можно будет проводить при помощи API.
Изменения в текущем цикле разработки заняли много времени и потребовали некоторых серьезных архитектурных изменений, однако они позволят добиться долгосрочных преимуществ.
Участники WordPress REST API
Вообще, в проект REST API на Github внесли свой вклад 49 участников. Однако среди них есть важные люди, которые занимаются активным продвижением проекта.
- Райан Маккью. Райан – главный руководитель проекта, он обычно контролирует выход новых версий. Все началось с его проекта на Google Summer of Code. Он работает на Human Made в основном над проектом Happy Tables.
- Рейчел Бейкер. Рейчел – это руководитель проекта, и он отвечает за основную разработку, а также за обучение и продвижение. Он работает на 10up как старший веб-инженер.
- Дэниэл Баххубер. Дэниэл участвует в ежедневных обсуждениях, и также делает активные коммиты в проект. Он работает на себя и является временным техническим директором в Fusion.
- Джо Хойл. Джо участвует в ежедневных обсуждениях, и также делает активные коммиты в проект. Он является соучредителем Human Made.
Помимо них, есть еще около 400 человек, которые посещают канал #core-restapi в Slack. Все они заслуживают продолжительных оваций.
Основы использования WordPress REST API
Новый API подойдет людям, которые знакомы с другими REST API. Однако, если вы плохо знакомы с этими вещами, то в таком случае даже с документацией вы можете запутаться. Я знаю, о чем говорю.
Первое, что надо учесть – планируете ли вы только считывать данные или считывать и записывать. Если вы считываете данные со своего собственного сайта и используете их на том же самом сайте, вам не нужно беспокоиться об аутентификации. Если вы меняете, добавляете или удаляете данные, то в таком случае вы должны пройти аутентификацию на сайте, чтобы вносить изменения.
Давайте рассмотрим несколько простых примеров считывания данных с помощью GET.
URL для получения контента с сайта Post Status будет выглядеть следующим образом:
https://poststatus.com/wp-json/posts
Чтобы получить контент с параметрами WP_Query, вам нужно использовать следующее:
https://poststatus.com/wp-json/posts?filter[posts_per_page]=2&filter[order]=ASC
Чтобы получить контент произвольного типа записей, вы должны ввести следующее:
https://poststatus.com/wp-json/posts?type[]=poststatus_org
Чтобы получить контент произвольного типа записей с теми же самыми параметрами WP_Query, вы должны ввести следующее:
https://poststatus.com/wp-json/posts?type[]=poststatus_org&filter[posts_per_page]=2&filter[order]=ASC
Перейдя по этим URL, вы увидите JSON-данные. Попробуйте ввести какой-нибудь из этих URL в браузер, чтобы увидеть возвращенные данные.
Способ получения этих данных напоминает использование WP_Query в стандартном цикле WordPress. Если вы не определите параметры, то в таком случае будут использовать стандартные значения WP_Query.
Эти URL возвращают данные, однако, естественно, вам нужно будет получать эти данные программно. Вы можете сделать это в WordPress-сборке (или вне ее) при помощи двух общих методов: PHP и AJAX.
Обработка данных будет напоминать обработку любых других JSON-данных. Естественно, вы можете запрашивать не только записи, но я просто хотел показать базовую концепцию.
API позволяет вам управлять всем, чем угодно: записями, страницами, произвольными типами записей, пользователями, медиафайлами, таксономиями и даже общими данными сайта.
Источник: poststatus.com
Скаждым днем все больше и больше убеждаюсь в пассивности платных движков а wp бесплатен и постоянно растет
Себя убедить не так уж и сложно. Но всё же надо постараться не заметить два крупных проекта рунетовского масштаба, которые растут, как на дрожжах. :-)
Он бесплатен, но на нем многие бизнес делают. А по поводу темы — с безопасностью непонятно. Ничего про авторизацию не написали. Хотя конечно все там есть.
Как я понял, REST API уже есть в wordpress, раз на нем работают какие-то проекты. Речь идет о выходе глобального обновления. Спасибо за подробный обзор! Не совсем понимаю — к чему использовать сторонний движок для трансляции постов с wordpress через API? Какие для этого могут быть причины? Это я про expresspress
Пока в ядре нет. Буду только рассматривать его введение в ядро. Пока что это — отдельный плагин.
Используют другие движки по разным причинам. Удобно вытаскивать данные с WP-сайта в разные приложения.
Спасибо за статью. Не так много информации в рунете про это. Можно ли с помощью WP REST API работать не только с вордпрессовскими таблицами в БД, но и создавать свои таблицы?
Все, что хранится в стандартной базе данных WordPress, может быть доступно через WP REST API. Если имеются произвольные таблицы, то и маршруты нужно будет писать произвольные.
Здравствуй Дмитрий! Признаюсь, что мало чего понял из этой статьи :) Или я невнимательно читал или я просто тупой! Но у меня к тебе такой вопрос, надеюсь что сможешь помочь…
Вчера я обратил внимание на то, что в вебмастере Яндекса отображается несколько исключённых ссылок (то есть, ссылки, которые Яндекс исключил, так как они выдают ошибку 404)
Вот одна из них — igorchernomoretz.com/wp-json/oembed/1.0/embed?url=http%3A%2F%2Figorchernomoretz.com%2Fkak-sdelat-samomu-banner-online.html&format=xml
Остальные идентичные этой.
Я так понял, что это как раз то, о чём ты писал в статье: wp-json
Вопрос, почему они выдают ошибку 404?
Заранее спасибо
Да, эти ссылки появились из-за введения WP REST API.
Как их удалить, описывается в этой статье: http://wordpress.stackexchange.com/questions/211467/remove-json-api-links-in-header-html
Огромное спасибо!
Дима, а почему ты не удалил? Я проверил и увидел, что у тебя присутствуют ссылки wp-json
Мне это не так принципиально.
То есть если вы не используете REST API для своих нужд, то его лучше заглушить.
Странно, что движок WordPress до сих пор «не дорос» до такой элиментарщины, как блокировать лишние ненужные админу сайта функции типа этого апи и вариантов RSS цекбоксвами из админки.
Откулючить этот мусор можно добавив следующие строки в functions.php вашей темы
// Отключаем сам REST API
add_filter(‘rest_enabled’, ‘__return_false’);
// Отключаем фильтры REST API
remove_action( ‘xmlrpc_rsd_apis’, ‘rest_output_rsd’ );
remove_action( ‘wp_head’, ‘rest_output_link_wp_head’, 10, 0 );
remove_action( ‘template_redirect’, ‘rest_output_link_header’, 11, 0 );
remove_action( ‘auth_cookie_malformed’, ‘rest_cookie_collect_status’ );
remove_action( ‘auth_cookie_expired’, ‘rest_cookie_collect_status’ );
remove_action( ‘auth_cookie_bad_username’, ‘rest_cookie_collect_status’ );
remove_action( ‘auth_cookie_bad_hash’, ‘rest_cookie_collect_status’ );
remove_action( ‘auth_cookie_valid’, ‘rest_cookie_collect_status’ );
remove_filter( ‘rest_authentication_errors’, ‘rest_cookie_check_errors’, 100 );
// Отключаем события REST API
remove_action( ‘init’, ‘rest_api_init’ );
remove_action( ‘rest_api_init’, ‘rest_api_default_filters’, 10, 1 );
remove_action( ‘parse_request’, ‘rest_api_loaded’ );
// Отключаем Embeds связанные с REST API
remove_action( ‘rest_api_init’, ‘wp_oembed_register_route’ );
remove_filter( ‘rest_pre_serve_request’, ‘_oembed_rest_pre_serve_request’, 10, 4 );
remove_action( ‘wp_head’, ‘wp_oembed_add_discovery_links’ );
// если собираетесь выводить вставки из других сайтов на своем, то закомментируйте след. строку.
remove_action( ‘wp_head’, ‘wp_oembed_add_host_js’);
Здравствуй Voldemar. Спасибо за код.
А как узнать, отключилось ли Rest Ip? Когда я открываю исходный код страницы, то до сих пор фигурирует ссылка с WP-JSON
А зачем отключать? если им не пользоваться — ресурсы не расходуются, ну и пусть себе висит. Зачем обычному пользователю забивать голову ненужными настройками?
Добрый день. Подскажите, как удалить теги при выводе контента статьи через API?
Здравствуйте. Смотрите здесь, может быть, чем-то поможет https://wordpress.org/support/topic/html-tags-in-content
привет что то изменилось после анонса в 2015?
Если только новые конечные точки появились.