Создание собственного REST API

29 сент. 2014 г., 11:14:11
Просмотры: 14.5K
Голосов: 10

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

Насколько я понимаю, создание RESTful сервера — это текущая "лучшая практика" для таких задач. Я изучил несколько плагинов, которые могут помочь в этом:

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

  2. Эта статья в блоге утверждает, что wp mvc делает именно то, что мне нужно, но он не обновлялся более 2 лет, что делает его малопригодным.

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

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

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

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

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

2
Комментарии

Что ты в итоге выбрал? Я пытаюсь создать пользовательские маршруты/эндпоинты для wp rest api и 1) документация ужасна 2) в интернете нет ни одного примера. Дай знать, какой путь ты выбрал, пожалуйста!

Jacksonkr Jacksonkr
27 апр. 2015 г. 19:34:18

Я решил создать свой API вне Wordpress, но с доступом к той же базе данных. Однако я так и не дошел до этого, так как это был побочный проект, и я был слишком занят другими делами :P. Если бы я был на твоем месте, я бы посмотрел в сторону фреймворков symfony2 или laravel. С ними можно очень быстро и легко что-то запустить.

Yep_It's_Me Yep_It's_Me
28 апр. 2015 г. 01:27:04
Все ответы на вопрос 3
3
15

Кратко

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


Подсказки

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

Лично я делал. Не один раз. И почти уверен, что не один такой. Более точное утверждение — "об этом мало кто писал в блогах".

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

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

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

Добавьте эндпоинт на нужную страницу с помощью шорткода.

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


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

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

29 сент. 2014 г. 11:35:23
Комментарии

Очень хороший ответ +1.

gmazzap gmazzap
29 сент. 2014 г. 12:23:37

Поддерживаю вдвойне. +1

kaiser kaiser
29 сент. 2014 г. 12:47:37

Спасибо за действительно отличный ответ!

Исходя из этого, у меня есть два варианта: 1. написать собственный плагин; 2. создать отдельный сервис.

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

Yep_It's_Me Yep_It's_Me
30 сент. 2014 г. 03:14:07
2

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

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

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

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

7 авг. 2015 г. 16:45:30
Комментарии

API Endpoints выглядит интересно для моего проекта, но требует Twig Anything, который практически невозможно получить, так как требуется вход в ваш блог, а публичная подписка не разрешена.

mettjus mettjus
13 сент. 2015 г. 12:58:27

Теперь я понял, что это не бесплатно...

mettjus mettjus
13 сент. 2015 г. 13:00:36
0

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

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

2 мар. 2016 г. 19:43:59