Construyendo una API REST personalizada
Tengo un sitio en WordPress.org que recibe entrada de usuarios, busca en una base de datos personalizada y muestra los resultados de la consulta. Esto ya funciona usando la clase wpdb. Ahora estoy intentando que funcione para una aplicación Android.
Por lo que entiendo, construir un servidor RESTful es la 'mejor práctica' actual para este tipo de cosas. He investigado algunos plugins que podrían ayudarme a hacer esto, y me he encontrado con:
json-rest-api - Me parece que esto solo expone la funcionalidad central de WordPress (es decir, entradas, páginas, usuarios, etc.) y no veo cómo hacer que ejecute consultas personalizadas en tablas no predeterminadas.
Esta publicación de blog dice que wp mvc hace exactamente lo que quiero, excepto que no se ha actualizado en más de 2 años, así que eso lo descarta.
También está Jetpack pero por lo que he visto, json-rest-api es la versión actualizada de esto y parece que solo ofrece funcionalidad básica también.
¿Hay alguna forma de hacer que alguno de estos plugins funcione para endpoints personalizados? ¿O hay otros plugins que no he encontrado todavía?
Si no uso un plugin, supongo que tendría que desarrollar el mío. Puedo hacer esto desde cero (usando wpdb
, msqli
o algo similar), o con la ayuda de una API como Restler.
Si desarrollo el mío, ¿debería crear una plantilla en mi tema, hacer lo relacionado con REST ahí y asignar ese tema a una página dentro del panel de control? ¿O sería mejor tener otro servidor ejecutándose separado de WordPress para esto?
Hasta donde puedo ver, estas son mis únicas opciones. Me gustaría saber cuáles son las mejores prácticas recomendadas para este tipo de cosas. Me cuesta creer que nadie más haya hecho esto. ¿Hay alguna opción que haya pasado por alto?
TL;DR
Sí, WordPress puede actuar como backend para una aplicación móvil. Sí, una página puede funcionar como endpoint/interfaz REST. No, una plantilla de tema no es el lugar adecuado para la lógica. Crea tu propio plugin.
Puntos clave
Me cuesta creer que nadie más haya hecho esto.
Yo, personalmente, lo he hecho. Más de una vez. Y estoy casi seguro de no ser el único. "Nadie ha blogueado extensamente sobre ello" probablemente sea la noción más correcta.
Si no uso un plugin, supongo que tendría que desarrollarlo yo mismo. Puedo hacerlo desde cero (usando wpdb, msqli o similar), o con la ayuda de una API como Restler.
No conozco "Restler" y eso está fuera del alcance en este contexto.
En cuanto a "usar wpdb, msqli o similar": Ciertamente usarías wpdb
para guardar datos (recibidos) en la base de datos, pero no es relevante para la lógica del endpoint.
Una plantilla de tema no es lo que deberías considerar. Los temas están destinados a presentación visual. Un endpoint REST no necesita apariencia visual.
Inserta el endpoint en la página que quieras usar mediante un shortcode.
Haz que el manejador/callback del shortcode escuche HTTP POST o GET e invoque el guardado de datos u otros métodos secundarios según corresponda.
¿Tiene sentido usar WordPress como endpoint/backend?
Depende.
Si solo necesitas un endpoint para guardar datos: No. Cargar todo el core solo para ahorrar unas líneas de código usando wpdb
no vale la pena.
Si necesitas un backend con acceso vía navegador, que muestre datos tabulados, permita modificarlos, quizá con múltiples niveles de acceso/roles de usuario, entonces sí tiene sentido.

¡Gracias por la respuesta excelente!
Entonces, de acuerdo a eso, mis dos opciones son: 1. escribir mi propio plugin; 2. escribir un servicio separado.
Como todo lo que necesito que haga el endpoint es tomar unos parámetros GET y devolver un cuerpo JSON, creo que debería escribir mi propio servicio porque "Cargar todo el núcleo solo para ahorrar unas líneas de código usando wpdb
no vale la pena".

El plugin API Endpoints debería cubrir todas tus necesidades, especialmente si estás familiarizado con MySQL. Deberías seguir los siguientes pasos:
Crear una nueva plantilla Twig, ingresar tu consulta MySQL para obtener datos de tu sitio WordPress y utilizar la sintaxis de Twig para mostrar los datos en cualquier formato. Por ejemplo, JSON.
Crear un nuevo endpoint API, asignarle un nombre y configurarlo para que utilice la plantilla Twig que creaste en el paso 1.
Una vez hecho esto, repite los pasos 1 y 2 para cada endpoint que desees crear. API Endpoints utiliza el sistema de autenticación estándar de WordPress, por lo que sería ideal crear un usuario separado en tu WordPress y utilizar su nombre de usuario/contraseña para acceder a tus endpoints API.

Los puntos finales de la API parecen interesantes para un proyecto mío, pero requieren Twig Anything, que es casi imposible de obtener ya que requiere iniciar sesión en tu blog, el cual no permite suscripciones públicas.

La nueva versión de WP REST API está en Beta, pero tiene una documentación bastante buena sobre cómo registrar endpoints REST personalizados. También hay una pequeña nota sobre cómo se podría hacer en la versión 1, que voy a probar ya que la beta no está garantizada que sea o permanezca estable. Supongo que luego podrías usar wpdb desde dentro de los métodos que registres. En realidad, solo estoy usando cosas de ACF y preprocesándolas en objetos en mi PHP para crear una bonita página de índice con múltiples propiedades que sea buscable/ordenable con AngularJS.
