Учебник о том, как заставить WordPress REST API работать с Node.js

Получение тысяч результатов в Google — это здорово, но ситуация усложняется, когда найденные вами посты устарели. Это случилось со мной недавно, когда я пытался заставить свое приложение Node.js работать с WP REST API. Я надеюсь, что этот пост не устареет слишком быстро, и вы найдете его полезным.

Моя задача была простой — создать сайт на WordPress и добавить новый пост с помощью Node.js. Вот что я узнал, получив так много ошибок 401.

Текущая ситуация

Я пишу этот пост через несколько дней после выхода WP 6.0. Я знал, что он имеет хорошую поддержку REST API, начиная с версии 5.6, поэтому интеграция должна быть относительно простой. В версии 5.6 команда WordPress добавила встроенный параметр «Пароль приложения», поэтому я решил, что не буду использовать и сторонние плагины для аутентификации. Кроме того, я использую базовую node-fetch для выполнения POST-запроса без каких-либо пакетов интеграции WP из npm.

Установка и настройка WordPress

Во-первых, нам нужен экземпляр WP и SSL-сертификат.

Без SSL пароль приложения может быть увиден злоумышленником в вашей сети или в сети между вашим сайтом и авторизованным приложением.
https://make.wordpress.org/core/ 05.11.2020/application-passwords-integration-guide/

Параметр «Без пароля приложения SSL» отключен. Когда SSL будет готов и наш веб-сайт будет обслуживаться через HTTPS, мы можем создать новый пароль приложения (для этого я буду использовать «AP») в разделе «Пользователи».

Прежде всего, что такое АП? Это пароль, созданный только для запросов REST. Он может иметь собственное имя и может быть удален в любой момент. Его можно использовать без ущерба для ваших реальных учетных данных WordPress.

И вот первая вводящая в заблуждение часть. Вы создаете новую точку доступа под определенным профилем пользователя — в моем случае admin, и даете ей имя. В течение многих часов я думал, что имя и сгенерированный пароль — это мои новые учетные данные для запросов API. К сожалению, имя пароля предназначено только для вас и в REST-запросах оно не играет никакой роли.

Логин, который вы будете использовать в запросах, — это ваш основной логин WordPress, а не предоставленное имя пароля.

И это единственное, что вам нужно сделать в панели управления WordPress. Я нашел так много устаревших ресурсов, в которых упоминалось, что мне нужно отредактировать файл .htaccess или установить плагин Basic Authentication (который не обновлялся целую вечность) или какие-то другие сторонние плагины.
Нет, для базовая аутентификация, вам нужны только SSL и AP.

Node.js

Тут тоже много не надо. Если у вас новейший Node.js, вам даже не нужно устанавливать node-fetch, так как он уже встроен в Node.js.

Все ваши URL-адреса запросов начинаются с:

https://your-website/wp-json

Подробнее об этом можно прочитать в документации.

После установки node-fetch и импорта его в файл мой код для создания нового поста выглядел так:

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

Здесь нужно помнить несколько вещей:

  1. Ваша конечная точка WP должна быть HTTPS.
  2. Тело запроса должно соответствовать типу содержимого.
  3. Я использую Buffer для логина и пароля, так как считаю, что это самый надежный способ справиться с этим.

Вот как получить все сообщения:

Заключение

Я не хотел использовать node-wp-api, так как он может мне не подойти в будущем — с интеграциями WooComerce и ACF. Мне нужен был чистый опыт работы с WP и JS.

С текущей версией WordPress и Node.js установить соединение очень просто, даже без дополнительных JS-фреймворков.

Многие темы на StackOverflow устарели из-за недавних изменений в WordPress и Node.js.

Удачного кодирования!

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Посетите наш Community Discord и присоединитесь к нашему Коллективу талантов.