Construirea unui API REST personalizat

29 sept. 2014, 11:14:11
Vizualizări: 14.5K
Voturi: 10

Am un site WordPress.org care preia input de la utilizatori, caută într-o bază de date personalizată și afișează rezultatele interogării. Acest lucru funcționează folosind clasa wpdb. Acum încerc să fac același lucru pentru o aplicație Android.

După cum am înțeles, construirea unui server RESTful este cea mai bună practică actuală pentru acest tip de scenariu. Am căutat câteva plugin-uri care m-ar putea ajuta și am găsit:

  1. json-rest-api - Se pare că acesta expune doar funcționalitățile de bază ale WordPress (adică postări, pagini, utilizatori etc.) și nu văd cum aș putea executa interogări personalizate pe tabele non-standard.

  2. Acest articol de blog menționează că wp mvc face exact ceea ce vreau, dar nu a fost actualizat de peste 2 ani, ceea ce îl face mai puțin atractiv.

  3. Există și Jetpack, dar din câte am văzut, json-rest-api este versiunea actualizată și pare să ofere doar funcționalități de bază.

Există vreo modalitate de a face aceste plugin-uri să funcționeze cu endpoint-uri custom? Sau există alte plugin-uri pe care nu le-am descoperit încă?

Dacă nu folosesc un plugin, presupun că ar trebui să dezvolt propria soluție. Pot face acest lucru de la zero (folosind wpdb, msqli sau alte metode), sau cu ajutorul unui API precum Restler.

Dacă dezvolt propria soluție, ar fi mai bine să creez un template în tema mea, să implementez funcționalitatea REST acolo și să atribui acel template unei pagini în dashboard? Sau ar fi mai bine să rulez un server separat pentru această funcționalitate?

Din câte văd, acestea sunt singurele mele opțiuni. Aș dori să știu care sunt cele mai bune practici recomandate pentru acest tip de situație. Mi-e greu să cred că nimeni altcineva nu a făcut acest lucru. Există alte opțiuni pe care le-am omis?

2
Comentarii

Cu ce ai ales să mergi în final? Încerc să creez rute/endpoint-uri personalizate pentru wp rest api și 1) documentația este groaznică 2) nu există niciun exemplu pe internet. Te rog spune-mi ce abordare ai ales!

Jacksonkr Jacksonkr
27 apr. 2015 19:34:18

Am decis să merg pe varianta de a-mi construi propriul API în afara Wordpress-ului, dar care să aibă acces la aceeași bază de date. Totuși, nu am ajuns să implementez asta, deoarece acesta era doar un proiect secundar și am fost prea ocupat cu alte lucruri :P. Dacă aș fi în locul tău, aș arunca o privire la framework-urile symfony2 sau laravel. Sunt foarte rapide și ușor de folosit pentru a avea ceva funcțional în scurt timp.

Yep_It's_Me Yep_It's_Me
28 apr. 2015 01:27:04
Toate răspunsurile la întrebare 3
3
15

TL;DR

Da, WordPress poate funcționa cu siguranță ca backend pentru o aplicație mobilă. Da, o pagină poate acționa ca un endpoint/interfață REST. Nu, un șablon de temă nu este locul potrivit pentru logica. Scrie-ți propriul plugin.


Indicații

Mi-e greu să cred că nimeni altcineva nu a făcut asta.

Eu, personal, am făcut-o. De mai multe ori. Și sunt aproape sigur că nu sunt singur. "Nimeni nu a scris extensiv despre asta pe bloguri" este probabil noțiunea mai corectă.

Dacă nu folosesc un plugin, presupun că ar trebui să o fac singur. Pot face asta de la zero (folosind wpdb, msqli sau ceva similar), sau cu ajutorul unei API precum Restler.

Nu cunosc "Restler" și asta este în afara domeniului acestui stack.
În ceea ce privește "folosirea wpdb, msqli sau altceva": Cu siguranță ai folosi wpdb pentru a salva datele (primite) în baza de date, dar nu este relevant pentru logica endpoint-ului.

Un șablon de temă nu este ceea ce ar trebui să analizezi. Temele sunt concepute pentru prezentarea vizuală. Un endpoint REST nu are nevoie deloc de o prezentare vizuală.

Inserează endpoint-ul în pagina pe care vrei să o folosești pentru acest scop prin intermediul unui shortcode.

Fă ca handler-ul/callback-ul shortcode-ului să asculte fie după HTTP POST fie după GET și să invoce salvarea datelor sau alte metode secundare în consecință.


Are sens să folosești WordPress ca endpoint/backend?

Depinde.
Dacă tot ce ai nevoie este un endpoint pentru a salva date: Nu. Încărcarea întregului core doar pentru a salva câteva linii de cod folosind wpdb nu merită.
Dacă ai nevoie de un backend în care să te poți autentifica prin browser, care să poată afișa date tabelare, să ofere modalități de a modifica aceste date, poate chiar cu multiple niveluri de acces/roluri și drepturi ale utilizatorilor, atunci da, are sens.

29 sept. 2014 11:35:23
Comentarii

Răspuns foarte bun +1.

gmazzap gmazzap
29 sept. 2014 12:23:37

Susțin dublu. +1

kaiser kaiser
29 sept. 2014 12:47:37

Mulțumesc pentru răspunsul extrem de util!

Deci, din cele spuse, am două opțiuni: 1. să scriu propriul meu plugin; 2. să scriu un serviciu separat.

Deoarece tot ce trebuie să facă endpoint-ul este să primească câțiva parametri GET și să returneze un corp JSON, cred că ar fi mai bine să scriu un serviciu separat pentru că "Încărcarea întregului nucleu doar pentru a economisi câteva linii de cod folosind wpdb nu merită efortul".

Yep_It's_Me Yep_It's_Me
30 sept. 2014 03:14:07
2

Plugin-ul API Endpoints ar trebui să acopere toate nevoile dumneavoastră, în special dacă sunteți familiarizat cu MySQL. Pașii pe care trebuie să-i urmați sunt următorii:

  1. Creați un nou șablon Twig, introduceți interogarea MySQL pentru a prelua datele de pe site-ul dumneavoastră WordPress și folosiți sintaxa Twig pentru a afișa datele în orice format dorit, de exemplu JSON.

  2. Creați un nou punct final API, dați-i un nume și configurați-l să utilizeze șablonul Twig creat la pasul 1.

Odată finalizat, repetați pașii 1 și 2 pentru fiecare punct final API pe care doriți să-l creați. API Endpoints utilizează sistemul standard de autentificare WordPress, așadar este recomandat să creați un utilizator separat în WordPress și să utilizați numele de utilizator/parola acestuia pentru a accesa punctele finale API.

7 aug. 2015 16:45:30
Comentarii

API Endpoints pare interesante pentru un proiect al meu, dar necesită Twig Anything, care este aproape imposibil de obținut, deoarece necesită autentificare pe blogul tău, care nu permite înscrieri publice.

mettjus mettjus
13 sept. 2015 12:58:27

Am realizat acum că nu este gratuit...

mettjus mettjus
13 sept. 2015 13:00:36
0

Noua versiune a WP REST API este în Beta, dar are o documentație destul de bună despre cum să înregistrezi endpoint-uri REST personalizate. Există, de asemenea, o scurtă mențiune despre cum se putea face în versiunea 1, pe care o voi încerca, deoarece versiunea beta nu este garantată să fie sau să rămână stabilă. Presupun că ai putea folosi wpdb din interiorul metodelor pe care le înregistrezi. De fapt, eu folosesc doar funcționalități ACF și le preprocesez în obiecte în PHP pentru a crea o pagină de index cu mai multe proprietăți, căutabilă/sortabilă, folosind AngularJS.

Comparație între WP REST API 1 și 2 din documentația lor

2 mar. 2016 19:43:59