Création d'une API REST personnalisée


10

J'ai un site WordPress.org qui prend la saisie de l'utilisateur, recherche une base de données personnalisée et affiche les résultats de la requête. J'ai ce travail en utilisant la classe wpdb . Maintenant, j'essaie de faire fonctionner cela pour une application Android.

D'après ce que je comprends, la construction d'un serveur RESTful est la «meilleure pratique» actuelle pour ce genre de chose. J'ai cherché des plugins qui pourraient m'aider à le faire, et je suis tombé sur:

  1. json-rest-api - Il me semble que cela expose uniquement les fonctionnalités principales de WordPress (c'est-à-dire les publications, les pages, les utilisateurs, etc.) et je ne vois pas comment obtenir cela pour exécuter des requêtes personnalisées sur des tables non par défaut.

  2. Ce billet de blog dit que wp mvc fait exactement ce que je veux, sauf qu'il n'a pas été mis à jour depuis plus de 2 ans, ce qui exclut un peu cela.

  3. Il y a aussi Jetpack mais d'après ce que j'ai vu, json-rest-api est la version mise à jour de cela et il semble ne donner que des fonctionnalités de base.

Existe-t-il un moyen de faire fonctionner l'un de ces plugins pour des points de terminaison personnalisés? Ou y a-t-il d'autres plugins que je n'ai pas encore trouvés?

Si je n'utilise pas de plugin, je pense que je devrais rouler le mien. Je peux le faire à partir de zéro (en utilisant wpdb, msqliou quelque chose), ou avec l'aide d'une API telle que Restler .

Si je lance le mien, dois-je créer un modèle dans mon thème, y faire les choses REST et affecter ce thème à une page dans le tableau de bord? Ou serait-il préférable d'avoir un autre serveur fonctionnant séparément de WordPress pour cela?

Pour autant que je puisse voir, ce sont mes seules options. Je voudrais savoir quelles sont les meilleures pratiques recommandées pour ce genre de chose. J'ai du mal à croire que personne d'autre ne l'a fait. Y a-t-il des options que j'ai ignorées?


Avec quoi avez-vous fini? J'essaie de créer des routes / points de terminaison personnalisés pour l'api wp rest et 1) la documentation est terrible 2) il n'y a aucun exemple sur le Web. Faites-moi savoir quel itinéraire vous avez pris s'il vous plaît!
Jacksonkr

1
J'ai décidé de créer ma propre API en dehors de Wordpress, mais qui a accès à la même base de données. Mais je n'y suis jamais vraiment parvenu, car ce n'était qu'un projet parallèle et j'étais trop occupé avec d'autres choses: P. Si j'étais vous, j'examinerais les frameworks symfony2 ou laravel . Ils sont vraiment rapides et faciles à mettre en place.
Yep_It's_Me

Réponses:


15

TL; DR

Oui, WordPress peut certainement servir de backend pour une application mobile. Oui, une page peut agir en tant que point de terminaison / interface de repos. Non, un modèle de thème n'est pas le bon territoire pour la logique. Écrivez votre propre plugin.


Pointeurs

J'ai du mal à croire que personne d'autre ne l'a fait.

Pour ma part, j'ai. Plus d'une fois. Et je suis presque certain que je ne suis pas seul. «Personne n'a beaucoup blogué à ce sujet» est probablement la notion la plus correcte.

Si je n'utilise pas de plugin, je pense que je devrais rouler le mien. Je peux le faire à partir de zéro (en utilisant wpdb, msqli ou quelque chose), ou avec l'aide d'une API telle que Restler .

Je ne connais pas "Restler" et c'est de toute façon hors de portée sur cette pile.
En ce qui concerne "l'utilisation de wpdb, msqli ou quelque chose": vous utiliseriez certainement wpdbpour sauvegarder (recevoir) des données dans la base de données, mais cela n'est pas pertinent pour la logique du point final.

Un modèle de thème n'est pas ce que vous devriez examiner. Les thèmes sont destinés à une présentation visuelle. Un point de terminaison REST n'a pas du tout besoin d'une apparence visuelle.

Insérez le point de terminaison dans la page que vous souhaitez utiliser via un shortcode .

Demandez au gestionnaire de shortcode / rappel d'écouter HTTP POST ou GET et d'appeler la sauvegarde des données ou d'autres méthodes secondaires en conséquence.


Est-il judicieux d'utiliser WordPress comme point de terminaison / backend?

Ça dépend.
Si tout ce dont vous avez besoin est un point de terminaison pour enregistrer les données: Non. Le chargement du noyau entier juste pour enregistrer quelques lignes de code en utilisant wpdbne vaut pas la peine.
Si vous avez besoin d'un backend auquel vous pouvez vous connecter via un navigateur Web, qui peut afficher des données tabulaires, offrir des moyens de modifier ces données, peut-être même avec plusieurs niveaux d'accès / rôles et droits d'utilisateur, alors oui, cela a du sens.


3
Vraiment une bonne réponse +1.
gmazzap

2
Doublez ça. +1
kaiser

Merci pour la très bonne réponse! Donc, à partir de là, les deux options que j'ai sont: 1. écrire mon propre plugin; 2. rédigez un service distinct. Étant donné que tout ce dont j'ai besoin pour le point de terminaison, c'est de prendre quelques paramètres GET et de renvoyer un corps JSON, je pense que je devrais écrire mon propre service car "Charger le noyau entier juste pour enregistrer quelques lignes de code en utilisant wpdbne vaut pas la peine".
Yep_It's_Me

0

Le plugin API Endpoints devrait couvrir tous vos besoins, surtout si vous êtes familier avec MySQL. Vous feriez les étapes suivantes:

  1. Créez un nouveau modèle Twig, entrez votre requête MysQL pour récupérer les données de votre site WordPress et utilisez la syntaxe Twig pour sortir les données dans n'importe quel format. Par exemple, JSON.

  2. Créez un nouveau point de terminaison API, donnez-lui un nom et configurez-le pour utiliser le modèle Twig que vous avez créé à l'étape 1.

Une fois cela fait, répétez les étapes 1 et 2 pour chaque point de terminaison que vous souhaitez créer. Les points de terminaison API utilisent le système d'authentification WordPress standard, il serait donc préférable de créer un utilisateur distinct dans votre WordPress et d'utiliser son nom d'utilisateur / mot de passe pour accéder à vos points de terminaison api.


API Endpoints semble intéressant pour un de mes projets, mais il nécessite Twig Anything qui est presque impossible à obtenir car il nécessite une connexion à votre blog qui n'autorise pas les abonnements publics.
mettjus

Je réalise maintenant que ce n'est pas gratuit ...
mettjus

0

La nouvelle version de l'API WP REST est en version bêta, mais possède une assez bonne documentation sur la façon d'enregistrer des points de terminaison REST personnalisés. Il y a aussi un très petit texte expliquant comment cela pourrait être fait dans la version 1, que je vais essayer car la bêta n'est pas garantie d'être ou de rester stable. Je suppose que vous pouvez ensuite utiliser wpdb à partir des méthodes que vous enregistrez. En fait, j'utilise juste des trucs ACF et je les pré-dispose en objets dans mon php pour créer une belle page d'index multi-propriétés consultable / triable avec angularJS.

Comparaison entre WWP REST API 1 et 2 à partir de leurs documents

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.