Создание собственного REST API
У меня есть сайт на WordPress.org, который принимает пользовательский ввод, ищет в собственной базе данных и отображает результаты запроса. Сейчас это работает с использованием класса wpdb. Теперь я пытаюсь сделать то же самое для Android-приложения.
Насколько я понимаю, создание RESTful сервера — это текущая "лучшая практика" для таких задач. Я изучил несколько плагинов, которые могут помочь в этом:
json-rest-api — Похоже, что этот плагин предоставляет только базовый функционал WordPress (записи, страницы, пользователи и т.д.), и я не вижу, как заставить его выполнять кастомные запросы к нестандартным таблицам.
Эта статья в блоге утверждает, что wp mvc делает именно то, что мне нужно, но он не обновлялся более 2 лет, что делает его малопригодным.
Есть также Jetpack, но насколько я понял, json-rest-api — это обновленная версия, и он тоже предоставляет только базовый функционал.
Есть ли способ заставить любой из этих плагинов работать с кастомными конечными точками? Или есть другие плагины, которые я еще не нашел?
Если не использовать плагины, мне придется разрабатывать собственное решение. Я могу сделать это с нуля (используя wpdb
, msqli
или что-то подобное) или с помощью API, такого как Restler.
Если я буду разрабатывать собственное решение, стоит ли создавать шаблон в моей теме, делать REST-функционал там и назначать этот шаблон странице через админку? Или лучше запустить отдельный сервер независимо от WordPress?
Насколько я вижу, это все мои варианты. Хотелось бы узнать рекомендуемые лучшие практики для таких случаев. Мне трудно поверить, что никто больше не сталкивался с подобным. Есть ли варианты, которые я упустил?
Кратко
Да, WordPress определенно может выступать в качестве бэкенда для мобильного приложения. Да, страница может служить REST-эндпоинтом / интерфейсом. Нет, шаблон темы — не подходящее место для такой логики. Создайте собственный плагин.
Подсказки
Мне трудно поверить, что никто этого не делал.
Лично я делал. Не один раз. И почти уверен, что не один такой. Более точное утверждение — "об этом мало кто писал в блогах".
Если я не использую плагин, придется писать свой. Я могу сделать это с нуля (используя wpdb, msqli или что-то подобное) или с помощью API, например Restler.
Я не знаю "Restler", и это выходит за рамки данного обсуждения.
Что касается "использования wpdb, msqli или чего-то подобного": вы, конечно, можете использовать wpdb
для сохранения (полученных) данных в базу, но это не относится к логике эндпоинта.
Шаблон темы — не то, что вам нужно. Темы предназначены для визуального представления. REST-эндпоинту вообще не нужен визуальный интерфейс.
Добавьте эндпоинт на нужную страницу с помощью шорткода.
Пусть обработчик шорткода / коллбэк слушает либо HTTP POST, либо GET, и в зависимости от этого вызывает сохранение данных или другие вторичные методы.
Имеет ли смысл использовать WordPress в качестве эндпоинта / бэкенда?
Зависит от ситуации.
Если вам нужен только эндпоинт для сохранения данных: Нет. Загружать весь движок только чтобы сохранить пару строк кода через wpdb
— не стоит.
Если вам нужен бэкенд, в который можно входить через браузер, который может отображать табличные данные, предлагать способы их изменения, возможно, даже с разными уровнями доступа / ролями пользователей и правами, тогда да, это имеет смысл.

Спасибо за действительно отличный ответ!
Исходя из этого, у меня есть два варианта: 1. написать собственный плагин; 2. создать отдельный сервис.
Поскольку все, что нужно моей конечной точке - это принимать несколько GET-параметров и возвращать JSON-ответ, я думаю, мне стоит создать отдельный сервис, потому что "Загружать все ядро только для того, чтобы сэкономить несколько строк кода с помощью wpdb
, не стоит того".

Плагин API Endpoints должен покрыть все ваши потребности, особенно если вы знакомы с MySQL. Вам нужно выполнить следующие шаги:
Создайте новый Twig Template, введите ваш MySQL запрос для получения данных с вашего WordPress сайта и используйте синтаксис Twig для вывода данных в любом формате, например, JSON.
Создайте новый API endpoint, дайте ему имя и настройте его для использования Twig Template, который вы создали в шаге 1.
После завершения повторите шаги 1 и 2 для каждого endpoint, который вы хотите создать. API Endpoints использует стандартную систему аутентификации WordPress, поэтому лучше всего создать отдельного пользователя в вашем WordPress и использовать его имя пользователя/пароль для доступа к вашим API endpoints.

Новая версия WP REST API находится в бета-тестировании, но уже имеет довольно хорошую документацию о том, как регистрировать пользовательские REST-эндпоинты. Также есть небольшое упоминание о том, как это можно было сделать в версии 1, что я и собираюсь попробовать, поскольку бета-версия не гарантирует стабильности. Я предполагаю, что затем можно использовать wpdb внутри регистрируемых методов. Я, собственно, просто использую ACF и предварительно обрабатываю данные в объекты в своем PHP-коде, чтобы создать удобную страницу индекса с несколькими свойствами, поддерживающую поиск и сортировку, с использованием AngularJS.
