Создание пользовательского REST API

10

У меня есть сайт WordPress.org, который принимает пользовательский ввод, выполняет поиск в пользовательской базе данных и отображает результаты запроса. У меня это работает с использованием класса wpdb . Теперь я пытаюсь заставить это работать для приложения для Android.

Из того, что я понимаю, создание сервера RESTful является текущей «лучшей практикой» для такого рода вещей. Я посмотрел на некоторые плагины, которые могут помочь мне сделать это, и я столкнулся:

  1. json-rest-api - мне кажется, что это раскрывает только основные функциональные возможности WordPress (т. е. посты, страницы, пользователи и т. д.), и я не вижу, как заставить это выполнять пользовательские запросы к таблицам, отличным от стандартных.

  2. В этом посте говорится, что wp mvc делает именно то, что я хочу, за исключением того, что он не обновлялся более 2 лет, так что это вроде бы исключает.

  3. Существует также Jetpack, но, как я видел, json-rest-api является обновленной версией этого, и он, похоже, дает только основные функции.

Есть ли способ заставить любой из этих плагинов работать для пользовательских конечных точек? Или есть другие плагины, которые я еще не нашел?

Если я не использую плагин, я думаю, что мне придется свернуть свой собственный. Я могу сделать это либо с нуля (используя wpdb, msqliили что-то), либо с помощью API, таких как Рестлер .

Если я сверну свой собственный, должен ли я создать шаблон в моей теме, есть ли там материал REST и назначить эту тему странице в панели инструментов? Или было бы лучше иметь другой сервер, работающий отдельно от WordPress для этого?

Насколько я вижу, это мои единственные варианты. Я хотел бы знать, каковы рекомендуемые лучшие практики для такого рода вещей. Мне трудно поверить, что никто другой не сделал этого. Есть ли варианты, которые я упустил?

Yep_It's_Me
источник
С чем ты в конечном итоге пошел? Я пытаюсь создать пользовательские маршруты / конечные точки для wp rest api и 1) документация ужасна 2) в интернете нет примеров. Дайте мне знать, какой маршрут вы выбрали, пожалуйста!
Джексонкр,
1
Я решил создать собственный API вне Wordpress, но у него есть доступ к той же базе данных. На самом деле я никогда не удосужился, так как это был просто побочный проект, и я был слишком занят другими вещами: P. На вашем месте я бы заглянул в рамки symfony2 или laravel . Они действительно быстрые и легкие, чтобы что-то запустить и запустить.
Yep_It's_Me

Ответы:

15

TL; DR

Да, WordPress, безусловно, может выступать в качестве бэкенда для мобильного приложения. Да, страница может действовать как конечная точка / интерфейс отдыха. Нет, шаблон темы не подходит для логики. Напишите свой собственный плагин.


указатели

Мне трудно поверить, что никто другой не сделал этого.

Я, например, есть. Больше чем единожды. И я почти уверен, что я не одинок. «Никто не писал об этом широко», вероятно, является более правильным понятием.

Если я не использую плагин, я думаю, что мне придется свернуть свой собственный. Я могу сделать это либо с нуля (используя wpdb, msqli или что-то еще), либо с помощью API, такого как Restler .

Я не знаю «Рестлера», и это все равно выходит за рамки этого стека.
Что касается «использования wpdb, msqli или чего-то»: вы наверняка будете использовать wpdbдля сохранения (получения) данных в базе данных, но это не имеет отношения к логике конечной точки.

Шаблон темы - это не то, что вы должны изучить. Темы предназначены для визуального представления. Конечная точка REST вообще не нуждается в визуальном представлении.

Вставьте конечную точку на страницу, которую вы хотите использовать для нее с помощью шорткода .

Сделайте так, чтобы обработчик шорткода / обратный вызов прослушивали HTTP POST или GET и вызывали сохранение данных или другие вторичные методы соответственно.


Имеет ли смысл использовать WordPress в качестве конечной точки / бэкэнда?

По-разному.
Если все, что вам нужно, это конечная точка для сохранения данных: Нет. Загрузка всего ядра только для того, чтобы сохранить несколько строк кода с помощью wpdb, не стоит.
Если вам нужен бэкэнд, в который можно войти через веб-браузер, который может отображать табличные данные, предлагать способы изменения указанных данных, возможно, даже с несколькими уровнями доступа / ролями и правами пользователя, тогда да, это имеет смысл.

Йоханнес Пилле
источник
3
Действительно хороший ответ +1.
gmazzap
2
Удвой это. +1
кайзер
Спасибо за действительно отличный ответ! Исходя из этого, у меня есть два варианта: 1. написать свой собственный плагин; 2. написать отдельный сервис. Поскольку все, что мне нужно, чтобы сделать конечную точку, это взять несколько параметров GET и вернуть тело JSON, я думаю, что мне следует написать свой собственный сервис, потому что «Загрузка всего ядра просто для того, чтобы сохранить несколько строк кода с использованием wpdb, не стоит».
Yep_It's_Me
0

Плагин API Endpoints должен покрывать все ваши потребности, особенно если вы знакомы с MySQL. Вы бы сделали следующие шаги:

  1. Создайте новый шаблон Twig, введите свой запрос MysQL для извлечения данных с вашего сайта WordPress и используйте синтаксис Twig для вывода данных в любом формате. Например, JSON.

  2. Создайте новую конечную точку API, дайте ей имя и настройте ее для использования шаблона Twig, созданного на шаге 1.

После этого повторите шаги 1 и 2 для каждой конечной точки, которую вы хотите создать. Конечные точки API используют стандартную систему аутентификации WordPress, поэтому было бы лучше создать отдельного пользователя в вашем WordPress и использовать его имя пользователя / пароль для доступа к вашим конечным точкам API.

Meglio
источник
Конечные точки API выглядят интересными для моего проекта, но для них требуется Twig Anything, который практически невозможно получить, поскольку для этого требуется вход в ваш блог, который не допускает общедоступных подписок.
mettjus
Теперь я понял, что это не бесплатно ...
mettjus
0

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

Сравнение между WWP REST API 1 и 2 из их документов

Кайл Циммер
источник