Uważajcie na Foxhound – pierwszy motyw oparty na REST API trafił do oficjalnego repozytorium

Foxhound

Jestem wielkim fanem REST API w WordPressie. Jak już wielokrotnie pisałem, otwiera to przed tym CMSem zupełnie nowe możliwości i pozwoli wykorzystywać go w projektach, do których teoretycznie wcale się on nie nadaje.

Do przewidzenia było, że REST API zostanie wykorzystany również przez twórców motywów – i rzeczywiście, bardzo szybko powstało kilka takich tworów, które na szczęście nigdy nie stały się niczym więcej niż ciekawym eksperymentem. Teraz jednak sytuacja się zmieniła, ponieważ pierwszy motyw oparty całkowicie na REST API trafił do oficjalnego repozytorium WordPressa. Tworzy to niebezpieczny dla użytkowników tego CMSa precedens: do zaufanego repozytorium trafia motyw, który nie spełnia podstawowych wymagań narzuconych (słusznie zresztą) autorom przez zespół weryfikujący motywy. Wymagania te miały między innymi zapewniać kompatybilność ze wszystkimi poprawnie napisanymi wtyczkami – czyli coś, co w przypadku tego motywu jest po prostu niemożliwe.

Motyw, o którym mowa, nazywa się Foxhound i jest minimalistycznym, całkiem przyjemnym wizualnie motywem blogowym. Został stworzony z wykorzystaniem frameworka React i jest oczywiście „aplikacją jednostronicową” (Single Page Application).

Podstawy, czyli jak działa REST API

Jeśli już wiesz jak działa REST API, to możesz spokojnie pominąć tę część wpisu.

REST API to mechanizm (interfejs), który pozwala na dostęp do różnych danych znajdujących się w udostępniającym go systemie. W naszym przypadku chodzi oczywiście o WordPressa, z którego przez REST API możemy odczytywać na przykład treść wpisów czy stron, a posiadając odpowiednie uprawnienia również tę treść modyfikować.

Jedną z głównych zalet REST API jest fakt, że interfejs udostępnia „czyste” dane (a nie – jak w przypadku zwykłej strony – kod HTML odpowiedzialny za ich prezentację), dzięki czemu pobieramy tylko to, co jest niezbędne. Pobierając na przykład wpis otrzymujemy jego tytuł, adres URL, treść, datę publikacji, identyfikator autora i kilka mniej ważnych informacji, a to wszystko w formacie JSON (przykład). Od nas zależy, co z tymi danymi dalej zrobimy: możemy je zaprezentować na stronie albo w aplikacji mobilnej, ale możemy też wykorzystać je w zupełnie innym miejscu.

Jak działają motywy wykorzystujące REST API

Motywy korzystające z REST API (takie jak omawiany tutaj motyw Foxhound) są jednostronicowymi aplikacjami, które do generowania kodu HTML strony wykorzystują JavaScript (najczęściej w połączeniu z jakimś frameworkiem, na przykład React, AngularJS czy Vue.js). Ich „jednostronicowość” polega na tym, że gdy przechodzimy na kolejne podstrony serwisu (np. ze strony głównej na stronę wpisu), nie następuje przeładowanie strony, a jedynie „podmiana” jej zawartości. Wszystko to dzieje się po stronie przeglądarki – skrypt JavaScript pobiera dane z REST API i generuje z nich kod HTML, który wyświetla przeglądarka. Świetnie to widać na wersji demonstracyjnej motywu Foxhound.

Jak nietrudno zauważyć, przechodzenie pomiędzy podstronami jest niesamowicie szybkie. Dzieje się tak dlatego, że przeglądarka nie musi za każdym razem ładować całej strony (dokument HTML, skrypty JavaScript, arkusze stylów CSS, obrazki itp.) od nowa – ładowane są tylko dane z REST API. Oczywiście w normalnej sytuacji skryptów i arkuszy stylów nie trzeba za każdym razem pobierać z serwera, bo są one przechowywane w cache przeglądarki, ale mimo to przeglądarka musi je załadować, a następnie wykonać rendering całej strony.

Wady motywów wykorzystujących REST API

Oczywiście byłoby zbyt różowo, gdyby takie podejście do tworzenia stron internetowych miało same zalety.

Przede wszystkim takie strony nie działają jeśli w przeglądarce jest wyłączony JavaScript. O ile ludzi, którzy wyłączają w przeglądarce JavaScript, jest niewielu, o tyle możemy mieć problem z różnego rodzaju robotami, które zwykle (chociaż nie zawsze) nie wykonują w ogóle kodu JavaScript. Wyjątkiem jest robot Google, który potrafi interpretować kod JavaScript.

Tutaj jednak pojawia się kolejny problem – robot Google nie będzie czekał na dane, które strona doczytuje z REST API, co w efekcie spowoduje, że pobierze on pustą stronę. Czyli mówiąc krótko, takie strony nie są poprawnie indeksowane przez Google. Jeśli ktoś nie wierzy, to niech sprawdzi jak Google widzi demo motywu Foxhound (polecam obejrzenie kopii jakiejś podstrony w wersji tekstowej). Oczywiście istnieją na to sposoby, takie jak renderowanie stron po stronie serwera (Server-Side Rendering), ale nie jest to coś, czym mógłby i chciałby zajmować się przeciętny użytkownik WordPressa.

Kolejną wadą tego typu motywów są problemy z kompatybilnością z wtyczkami. Nie będą działać praktycznie żadne wtyczki, które dodają jakiś kod do strony. Nie ma oczywiście najmniejszych szans, aby z tego typu motywem działały bardziej rozbudowane rozszerzenia, takie jak na przykład WooCommerce. Moim zdaniem spokojnie można przyjąć, że z takim motywem większość wtyczek nie będzie działać poprawnie.

Do czego w takim razie może służyć REST API?

Jak już napisałem na wstępie, jestem wielkim fanem REST API. Miałem przyjemność pracować przy projektach, w których dzięki niemu wykorzystywano WordPressa w sposób naprawdę nietypowy. Nie ma problemu, aby z tego CMSa zrobić na przykład panel zarządzania treścią dla aplikacji mobilnej.

Na „zwykłych” stronach REST API również daje sporo możliwości. Ułatwia na przykład pobieranie danych do jakichś mniej istotnych fragmentów strony (np. lista popularnych wpisów) czy budowę mechanizmu doładowywania wpisów bez konieczności przeładowywania strony. Jednak w mojej opinii budowanie całych stron w oparciu o motyw pobierający dane z REST API nie jest dobrym pomysłem.

Bezpośredni link