WordPress-kehityksessä törmää ennemmin tai myöhemmin hetkeen, jolloin pitäisi koskea tiedostojärjestelmään. Kirjoittaa tiedosto. Lukea tiedosto. Päivittää tiedosto. Ja juuri siinä kohtaa moni kehittäjä tekee klassisen PHP-refleksin:
file_put_contents() ja menoksi.
Teknisesti toimii. Arkkitehtuurisesti… ei aina.
WordPress Filesystem API on WordPressin oma abstraktiokerros tiedostojärjestelmän käsittelyyn. Se ei ole olemassa siksi, että core-kehittäjät olisivat päättäneet tehdä elämästä monimutkaisempaa. Se on olemassa, koska web-palvelinympäristöt ovat kaoottisia, epäyhtenäisiä ja toisinaan suorastaan eksistentiaalisen epäluotettavia.
Filesystem API on WordPressin tapa sanoa:
“Emme luota siihen, että tiedostojärjestelmä toimii kuten odotat.”
Miksi suora tiedostokäsittely ei riitä?
PHP:n perusfunktiot olettavat tietynlaisen ympäristön:
-
oikeat käyttöoikeudet
-
suora levyaccess
-
ei erikoisia hosting-rajoitteita
Todellisuus WordPress-maailmassa:
-
FTP-only -hosting
-
omituiset permissionit
-
container-ympäristöt
-
read-only -tiedostojärjestelmät
-
SELinux-iloittelut
Suora tiedostokäsittely toimii täydellisesti omalla kehityskoneella ja hajoaa asiakkaan tuotantopalvelimella kuin posliinikuppi betonilattialla.
Filesystem API ratkaisee tämän abstraktiolla.
Filesystem API:n perusidea
Filesystem API ei käsittele tiedostoja suoraan. Se delegoi.
WordPress valitsee ympäristön perusteella sopivan metodin:
-
Direct (suora levyaccess)
-
FTP
-
FTPS
-
SSH2
Koodi ei muutu. Toteutus muuttuu.
Tämä on klassinen ohjelmistoarkkitehtuurin temppu: erotetaan “mitä tehdään” ja “miten tehdään”.
Kehittäjän näkökulmasta
Kun käytät Filesystem APIa, et sano:
“Kirjoita tämä tiedosto levylle.”
Sanot:
“WordPress, hoida tämä tavalla, joka toimii tässä ympäristössä.”
Se on käytännössä portability-kerros.
Filesystem API:n käyttö käytännössä
Filesystem API:n käyttö sisältää aina pienen seremonian. Tämä ei ole sattumaa – kyse on turvallisuudesta ja yhteensopivuudesta.
Tyypillinen virta:
-
Pyydä Filesystem-objekti
-
WordPress varmistaa käyttöoikeudet
-
Filesystem-metodi valitaan
-
Operaatiot suoritetaan
Tärkeä pointti: Filesystem API voi vaatia käyttäjältä tunnistetietoja.
Ei bugi. Feature.
Jos WordPress tarvitsee FTP-yhteyden, sen on saatava tunnukset.
Miksi tämä tuntuu joskus kömpelöltä?
Koska olemme tottuneet suoraan kontrolliin.
Suora PHP-ajattelu:
-
kutsu funktiota
-
tiedosto syntyy
Filesystem API -ajattelu:
-
pyydä abstraktiokerrosta
-
odota mahdollisia tunnuskyselyitä
-
käsittele useita toteutuspolkuja
Se tuntuu hitaammalta, raskaammalta, byrokraattisemmalta.
Mutta se toimii ympäristöissä, joissa suora levyaccess ei ole mahdollista.
Ja WordPress elää juuri tällaisissa ympäristöissä.
Filesystem API ja turvallisuus
Filesystem API ei ole vain yhteensopivuuskerros. Se on myös turvakerros.
Se auttaa:
-
käyttöoikeuksien hallinnassa
-
virheiden käsittelyssä
-
ympäristöriippuvuuksien abstrahoinnissa
Suora tiedostokäsittely voi:
-
epäonnistua hiljaisesti
-
rikkoa permissionit
-
ohittaa WordPressin logiikan
Filesystem API toimii WordPressin ekosysteemin sisällä.
Se kunnioittaa järjestelmän sääntöjä.
Direct vs FTP: näkymätön ero
Kun kaikki toimii, Filesystem API käyttää usein Direct-metodia. Tämä näyttää identtiseltä suoran PHP:n kanssa.
Mutta kun Direct ei ole mahdollinen…
WordPress vaihtaa strategiaa.
Tämä on Filesystem API:n suurin vahvuus. Koodi ei tarvitse if-helvettiä:
“Jos FTP-ympäristö → tee näin…”
WordPress hoitaa tämän.
Yleisimmät käyttötapaukset
Filesystem API on erityisen hyödyllinen:
-
lisäosien päivityksissä
-
teemojen päivityksissä
-
cache-tiedostojen kirjoituksessa
-
dynaamisessa tiedostogeneroinnissa
-
export/import -toiminnoissa
Erityisesti tilanteissa, joissa koodi päätyy tuntemattomiin hosting-ympäristöihin.
Eli käytännössä aina.
Klassiset kompastuskivet
Filesystem API -ongelmat eivät yleensä ole API-ongelmia, vaan odotusongelmia.
Esimerkiksi:
-
oletetaan Direct-access
-
ei käsitellä virhetiloja
-
ei ymmärretä credential-flow’ta
-
kirjoitetaan väärään hakemistoon
Filesystem API ei ole “vain file wrapper”. Se on järjestelmä.
Ja järjestelmät vaativat ajattelumallin muutoksen.
Filesystem API ja arkkitehtuurinen ajattelu
Filesystem API on hyvä muistutus yhdestä tärkeästä periaatteesta:
Ympäristö ei ole vakio.
Web-kehityksessä tämä on lähes universaali totuus. Filesystem API sisäänrakentaa tämän epävarmuuden WordPressiin.
Se ei oleta. Se adaptoituu.
Ja se on harvinaisen kypsä design-valinta alustalta, jota joskus syytetään vanhanaikaisuudesta.
Lopuksi: Filesystem API ei ole ylimääräinen kerros
Filesystem API voi tuntua turhalta lisätyöltä.
Kunnes se pelastaa projektin.
Se on infrastruktuurikerros, joka ratkaisee ongelmia, joita ei näe kehitysympäristössä. Se on WordPressin tapa selviytyä villissä hosting-ekosysteemissä.
Filesystem API ei ole monimutkaisuutta monimutkaisuuden vuoksi.
Se on realismia.
Web ei ole laboratorio. Web on viidakko.
Ja Filesystem API on WordPressin machete.
