Cum să eliminați rutele și punctele finale ale API-ului REST WordPress implicit
Publicat: 2018-07-31WordPress REST API a fost introdus în nucleu în versiunea 4.7 (Vaughan) în decembrie 2016. Ca orice altă modificare semnificativă adusă nucleului WP, a fost aprig dezbătută (în momentul de față, iulie 2018, Gutenberg este subiectul unei astfel de dezbateri/ controversă). Până la urmă, nu s-a întâmplat nimic. Celor cărora nu le păsa de API-ul REST încă nu le pasă. Cei cărora le pasă au făcut niște aplicații, integrări, plugin-uri și alte proiecte interesante.
Când API-ul #wordpress REST era îmbinat în v4.7 de bază, oamenii s-au speriat! La fel cum se sperie atunci când are loc vreo schimbare. Până la urmă, totul merge bine.
CLICK PENTRU A TWETEȘi în timp ce suntem pe tema proiectelor cool. Știți că cele mai de succes încep cu o pagină în curând? Și în multe cazuri, este o pagină care va veni în curând, care a fost creată folosind pluginul Coming Soon & Maintenance Mode.
Acest plugin vine cu un generator de drag-and-drop, peste 170 de teme, cea mai bună configurare SEO din clasă, servicii de răspuns automat și de e-mail și multe alte caracteristici care vă vor permite să creați pagina perfectă care va urma în câteva minute. Și pe lângă toate acestea, pluginul este integrat cu Depositphotos, ceea ce înseamnă că puteți găsi cele mai bune imagini direct din plugin. Dar în cazul în care nu sunteți fan al colecției de oferte Depositphotos, Yay Images este, de asemenea, o sursă excelentă de conținut stoc.
Dar destule despre asta, să revenim la subiectul nostru principal, API-ul REST.
Ne pasă de API-ul REST și îl folosim atunci când construim SaaSe-uri bazate pe WP. Este stabil, rapid, ușor de lucrat, se potrivește perfect în WP și în majoritatea cazurilor este bine documentat. Dacă nu știi ce este API-ul REST, probabil că aceasta nu este postarea pentru tine, dar verifică ce este API-ul REST (video și text) și poate o vei folosi în următorul tău proiect.
Traseu? Punct final? Nu este totul la fel?
Nu, nu este la fel. Diferența este subtilă pentru majoritatea oamenilor și folosesc termenii rută și punct final în mod interschimbabil, dar nu este atât de complicat. Ruta este mai mult sau mai puțin URL-ul. Este „numele” folosit pentru a accesa un punct final. Pe o singură rută, puteți avea mai multe puncte finale, deoarece punctul final pe care îl utilizați depinde de tipul de solicitare HTTP pe care îl utilizați. GET
, POST
, PUT
sau DELETE
pot servi și de obicei au scopuri diferite. Accesând yoursite.com/wp-json/v2/posts/1 prin GET
veți obține detalii pentru postarea cu ID-ul #1. Utilizarea DELETE
pe aceeași rută va apela un punct final diferit (sau o funcție, dacă doriți) care șterge acea postare. Manualul oficial REST API conține mai multe informații despre acest subiect, așa că consultați-vă pentru detalii.
Rutele și punctele finale #wordpress REST API nu sunt aceleași lucruri! O rută este „numele” folosit pentru a accesa un punct final. O singură rută este de obicei asociată cu mai multe puncte finale.
CLICK PENTRU A TWETEDe ce aș elimina punctele finale sau rutele implicite ale API-ului WP REST?
După cum am discutat în articolul despre eliminarea regulilor implicite de rescriere – există o sută de motive pentru care un dezvoltator WordPress ar face acest lucru.
„Va face WordPress mai rapid, deoarece nu trebuie să analizeze toate acele puncte finale.” este încă ceva cu care nu sunt de acord și cred că câștigul va fi mai mic de o milisecundă, dar nu poate strica.
Vă place să păstrați lucrurile curate și, din moment ce nu utilizați API-ul REST, de ce aveți rute API? Sigur, are sens. Dar, în acest caz, utilizați un plugin pentru a dezactiva complet API-ul REST.
Și apoi există motivul pentru care dezactivăm rutele (și punctele finale) implicite. Folosim în mare măsură punctele finale personalizate API REST, dar nu avem nevoie de cele implicite. Prin urmare, este bine să păstrați lucrurile slabe și curate. De asemenea, nu poate afecta securitatea, deoarece expunem mai puține bucăți de date lumii exterioare dure.
Arată-mi punctele finale implicite API
Referința punctului final este disponibilă în manualul REST API. Mai mult sau mai puțin orice parte de date care este disponibilă publicului va fi disponibilă și prin API-ul REST. Un exemplu de solicitare către demo.wp-api.org/wp-json/wp/v2/posts va afișa zece postări în format JSON. Dacă doriți o versiune care poate fi citită de om a acelui răspuns, va trebui să decodați răspunsul JSON. Același lucru este valabil și pentru pagini, categorii și alte structuri de date. Structura datelor și punctele finale sunt foarte asemănătoare, după cum puteți vedea dacă răsfoiți referința.
Cealaltă modalitate de a vedea rutele implicite este să adăugați acest cod în fișierul functions.php
al temei dvs. și apoi să deschideți site-ul site.com/wp-json/. Activați link-uri frumoase dacă nu ați făcut-o deja.
add_filter( 'rest_endpoints', 'show_default_endpoints' ); function show_default_endpoints( $endpoints ) { var_export( array_keys( $endpoints ) ); die; }
Afișează cele 31 de puncte finale REST implicite. Numărul este, desigur, susceptibil să se schimbe pe măsură ce sunt adăugate noi funcționalități de bază. Și va fi diferit dacă aveți pluginuri care adaugă puncte finale personalizate.
Eliminarea punctelor finale implicite
Codul de mai sus necesită o modificare minimă. Returnează o matrice goală și toate punctele finale au dispărut.
add_filter( 'rest_endpoints', 'remove_default_endpoints' ); function remove_default_endpoints( $endpoints ) { return array( ); }
„Toate punctele finale” include și punctele finale personalizate, așa că este înțelept să nu le ștergeți. Iată o modalitate simplă de a-i menține activi:
add_filter( 'rest_endpoints', 'remove_default_endpoints_smarter' ); function remove_default_endpoints_smarter( $endpoints ) { $prefix = 'your_custom_endpoint_prefix'; foreach ( $endpoints as $endpoint => $details ) { if ( !fnmatch( '/' . $prefix . '/*', $endpoint, FNM_CASEFOLD ) ) { unset( $endpoints[$endpoint] ); } } return $endpoints; }
Doar sări peste punctele finale cu prefixul personalizat și păstrați-le în matrice. Nu uitați să returnați matricea.
Personalizarea prefixului URL REST
Punctele finale personalizate, deși sunt personalizate, folosesc același prefix ca și punctele finale implicite. Arata ca mysite.com/wp-json/custom-endpoint/. Poate că ți se pare urât sau nu-ți plac lucrurile implicite. Schimbarea acesteia este o chestiune de o linie de cod. În scopuri de testare, plasați codul de mai jos în functions.php
ale temei și, după salvare, deschideți Tabloul de bord – Setări – Legături permanente pentru a șterge regulile de rescrie.
add_filter( 'rest_url_prefix', 'rest_url_prefix' ); function rest_url_prefix( ) { return 'api'; }
Cu filtrul deasupra punctelor finale va fi mysite.com/api/custom-endpoint/ iar deschiderea vechii URL mysite.com/wp-json/custom-endpoint/ va produce o eroare 404.
Asigurați-vă că includeți un număr de versiune în punctele finale personalizate, deoarece un prefix nu este adăugat automat de WP. Un prefix al numărului de versiune asigură că modificările pe viitor nu distrug clienții care folosesc punctele finale vechi. Doar includeți prefixul versiunii atunci când apelați register_rest_route()
pentru a obține ceva de genul mysite.com/api/v1/custom-endpoint/ și păstrați toate punctele finale în spatele acelui „v1”, astfel încât să puteți avea „v2” etc mai târziu.
Testează-ți modificările
Eliminarea sau modificarea rutelor și punctelor finale API REST nu va face nicio diferență pe 98% dintre site-urile WP. "De ce?" – Pentru că nu folosesc deloc API-ul REST. Dar dacă ai dvs. o face, vă rugăm să vă asigurați că testați aplicațiile conectate, deoarece, la fel ca în toate, schimbările pot distruge lucrurile. Și este mai bine să vezi un bug azi decât mâine.