2005-04-18

GET/POST -symmetria ja hierarkiset URL:ät

Eräs web-sovellusten peruspiirteistä on, että monella GET-metodia käyttävällä kyselyllä on POST-metodia käyttävä vastineensa. Kun tämän symmetrian tiedostaa, voi sitä alkaa hyödyntää omassa kehitystyössään.

Perinteisen web-sovelluksen, millä tässä yhteydessä tarkoitetaan Ajaxiin perustumatonta sovellusta, tulisi toimia seuraavasti:

URL tunnistaa tietyn kohteen, esimerkiksi verkkosivun, viestin keskustelussa tai postauksen blogissa. Selain hakee tämän kohteen käyttäjän nähtäväksi GET-metodia käyttävillä kyselyillä. Selain lähettää tätä kohdetta koskevat muutokset POST-metodia käyttävillä kyselyillä.

Sekä GET- että POST-kyselyn yhteydessä pitää tehdä samankaltaisia asioita. Yksi näistä on pääsyntarkistus, toinen takaisin palaavan sivun muodostaminen (ellei takaisin sitten palauteta uudelleenohjausta).

Tästä syystä osoittautuu todennäköisesti hyödylliseksi, että GET- ja POST-kyselyillä on suurelta osin yhteinen koodipolku. En pari vuotta sitten ymmärtänyt tätä kunnolla ja siksi eräässä järjestelmässä GET- ja POST-kyselyiden käsittely tapahtuu eri koodipoluilla ja siksi koodia toistetaan usein turhan paljon.

Toinen hyvä käytäntö on, että URL:t muodostavat hierarkian. Esimerkiksi osoitteen polkuosa siis menisi näin:

/forums/
/forums/42/
/forums/42/24/
/forums/42/24/edit

Näitä olisikin erittäin järkevä käsitellä myös koodissa hierarkiana, eli vaikkapa pääsyntarkistuksen tapauksessa aluksi tutkitaan, onko pääsyoikeutta keskustelualueille. Seuraavaksi katsotaan, löytyykö oikeus alueelle 42 ja sitten viestiin 24 ja lopuksi mietitään, onko käyttäjällä oikeutta viestin 24 muokkaamiseen. Koodipolku kulkee siis alaspäin kohti muokkaamista, eikä hyppää suoraan muokkaamiseen, josta pitää muistaa tehdä muut tarkistukset. Tässäkin tein aikanaan virheen.

Oma lukunsa sitten on, miten nämä käytänteet sitten kussakin ohjelmointikielessä toteuttaa siististi ja hyvää ohjelmointitapaa noudattaen.