Budowanie niestandardowego interfejsu API REST

10

Mam witrynę WordPress.org, która pobiera dane od użytkowników, przeszukuje niestandardową bazę danych i wyświetla wyniki zapytania. Mam to działa przy użyciu klasy wpdb . Teraz próbuję uruchomić to dla aplikacji na Androida.

Z tego, co rozumiem, budowanie serwera RESTful jest obecnie „najlepszą praktyką” w tego typu sprawach. Szukałem wtyczek, które mogłyby mi to pomóc, i natknąłem się na:

  1. json-rest-api - Wydaje mi się, że ujawnia to tylko podstawową funkcjonalność WordPressa (tj. posty, strony, użytkowników itp.) i nie widzę, jak to zrobić, aby wykonywać niestandardowe zapytania w tabelach innych niż domyślne.

  2. Ten post na blogu mówi, że wp mvc robi dokładnie to, co chcę, z wyjątkiem tego, że nie było aktualizowane od ponad 2 lat, więc to trochę wyklucza.

  3. Istnieje również Jetpack, ale z tego, co widziałem, json-rest-api jest zaktualizowaną wersją tego i wydaje się, że zapewnia również podstawową funkcjonalność.

Czy istnieje sposób, aby jedna z tych wtyczek działała dla niestandardowych punktów końcowych? Czy są jeszcze inne wtyczki, których jeszcze nie znalazłem?

Jeśli nie użyję wtyczki, myślę, że musiałbym sam wyrzucić. Można to zrobić zarówno od podstaw (za pomocą wpdb, msqlilub czegoś), lub za pomocą interfejsu API, takich jak Restler .

Jeśli wykonam rzut własny, czy powinienem utworzyć szablon w moim motywie, wykonaj tam czynności REST i przypisz ten motyw do strony w panelu? Czy może lepiej byłoby mieć inny serwer działający osobno dla WordPress?

O ile widzę, to moje jedyne opcje. Chciałbym wiedzieć, jakie są zalecane najlepsze praktyki w tego typu sprawach. Trudno mi uwierzyć, że nikt inny tego nie zrobił. Czy są jakieś opcje, które przeoczyłem?

Tak, to ja
źródło
Z czym się skończyłeś? Próbuję utworzyć niestandardowe trasy / punkty końcowe dla interfejsu API wp odpoczynek i 1) dokumentacja jest okropna 2) w sieci jest zero przykładów. Daj mi znać, jaką trasę wybrałeś!
Jacksonkr
1
Zdecydowałem się na budowę własnego API poza Wordpress, ale ma on dostęp do tej samej bazy danych. Tak naprawdę nigdy się tym nie zajmowałem, ponieważ był to tylko poboczny projekt i byłem zbyt zajęty innymi rzeczami: P. Gdybym był tobą, rzuciłbym okiem na frameworki symfony2 lub laravel . Naprawdę szybko i łatwo można coś uruchomić.
Yep_It's_Me

Odpowiedzi:

15

TL; DR

Tak, WordPress z pewnością może działać jako backend dla aplikacji mobilnej. Tak, strona może działać jako spoczynkowy punkt końcowy / interfejs. Nie, szablon motywu nie jest właściwym terytorium dla logiki. Napisz własną wtyczkę.


Wskaźniki

Trudno mi uwierzyć, że nikt inny tego nie zrobił.

Ja, na przykład, mam. Więcej niż raz. I jestem prawie pewien, że nie jestem sam. „Nikt nie pisał o tym na blogach” to prawdopodobnie bardziej poprawne pojęcie.

Jeśli nie użyję wtyczki, myślę, że musiałbym sam wyrzucić. Mogę to zrobić od zera (za pomocą wpdb, msqli lub czegoś) lub za pomocą interfejsu API, takiego jak Restler .

Nie znam „Restlera”, który i tak nie mieści się w tym stosie.
Jeśli chodzi o „korzystanie z wpdb, msqli lub coś”: z pewnością użyłbyś wpdbdo zapisania (odebranych) danych w bazie danych, ale nie dotyczy to logiki punktu końcowego.

Szablon motywu nie jest tym, na co powinieneś spojrzeć. Motywy są przeznaczone do prezentacji wizualnej. Punkt końcowy REST wcale nie wymaga wyglądu.

Wstaw punkt końcowy na stronie, której chcesz użyć, za pomocą krótkiego kodu .

Niech moduł obsługi krótkiego kodu / oddzwonienie nasłuchuje HTTP POST lub GET i odpowiednio wywołuje zapisywanie danych lub inne metody wtórne.


Czy warto używać WordPressa jako punktu końcowego / zaplecza?

To zależy.
Jeśli wszystko, czego potrzebujesz, to punkt końcowy do zapisywania danych: Nie. Ładowanie całego rdzenia tylko w celu zapisania kilku wierszy kodu za pomocą wpdbnie jest tego warte.
Jeśli potrzebujesz backendu, do którego można się zalogować za pomocą przeglądarki internetowej, która może wyświetlać dane tabelaryczne, oferować sposoby zmiany tych danych, może nawet przy wielu poziomach dostępu / rolach użytkowników i prawach, to tak, to ma sens.

Johannes Pille
źródło
3
Naprawdę dobra odpowiedź +1.
gmazzap
2
Podwój to. +1
kaiser
Dzięki za naprawdę świetną odpowiedź! Tak więc od tego mam dwie opcje: 1. Napisz własną wtyczkę; 2. Napisz oddzielną usługę. Ponieważ wszystko, co muszę zrobić, to wziąć kilka parametrów GET i zwrócić ciało JSON, myślę, że powinienem napisać własną usługę, ponieważ „Ładowanie całego rdzenia tylko w celu zapisania kilku wierszy kodu wpdbnie jest tego warte”.
Yep_It's_Me
0

Wtyczka API Endpoints powinna zaspokoić wszystkie Twoje potrzeby, szczególnie jeśli znasz MySQL. Wykonaj następujące kroki:

  1. Utwórz nowy szablon Twig, wprowadź zapytanie MysQL, aby pobrać dane z witryny WordPress i użyj składni Twig, aby wyprowadzić dane w dowolnym formacie. Na przykład JSON.

  2. Utwórz nowy punkt końcowy interfejsu API, nadaj mu nazwę i skonfiguruj go, aby używał szablonu Twig utworzonego w kroku 1.

Po zakończeniu powtórz kroki 1 i 2 dla każdego punktu końcowego, który chcesz utworzyć. Punkty końcowe API używają standardowego systemu uwierzytelniania WordPress, dlatego najlepiej byłoby utworzyć osobnego użytkownika w WordPress i użyć jego nazwy użytkownika / hasła, aby uzyskać dostęp do punktów końcowych interfejsu API.

Meglio
źródło
Punkty końcowe API wyglądają interesująco dla mojego projektu, ale wymagają Twig Anything, co jest prawie niemożliwe do uzyskania, ponieważ wymaga zalogowania się na Twoim blogu, który nie zezwala na publiczne subskrypcje.
mettjus
Teraz zdałem sobie sprawę, że to nie jest darmowe ...
mettjus
0

Nowa wersja WP REST API jest w wersji Beta, ale ma dość dobrą dokumentację dotyczącą rejestracji niestandardowych punktów końcowych REST. Jest też bardzo mała informacja o tym, jak można to zrobić w wersji 1, którą zamierzam wypróbować, ponieważ nie gwarantuje się, że beta będzie stabilna. Zakładam, że możesz użyć wpdb z zarejestrowanych metod. Właściwie używam tylko plików ACF i przejmuję je do obiektów w moim php, aby stworzyć ładną, przeszukiwalną / sortowalną stronę indeksu z wieloma właściwościami z angularJS.

Porównanie między WWP REST API 1 i 2 z ich dokumentów

Kyle Zimmer
źródło