Hypermedia som motoren for applikasjonstilstandOverskriften er en fornorskning av Fielding’s “Hypermedia as the engine of application state” og er nok det prinsippet som har størst sprik mellom utviklernes forståelse og den faktiske arkitekturen i webben. I et hypermedium som verdensveven er så er din www-browser en applikasjon. Browseren har en tilstand som beskrives kort og konsist ved hjelp av URI linja øverst. Hvis du velger deg et bokmerke og åpner en tradisjonell webside så får du opp denne siden. Alle andre kan gjøre det samme og vil se det samme som deg. Klikker du så på en lenke havner du gjerne på en ny side, og tilstanden til browseren er nå denne nye siden. Hypermedia driver applikasjonstilstanden din. Alle har vært borti søk hvor man POSTer formen til serveren. Resultatet er at URIen ikke gjenspeiler tilstanden til browseren. Man kan ikke sende URIen til noen andre, og man kan ikke lage noe bokmerke. Det bryter med idéen om at applikasjonstilstand (browser) styres av hypermedia (lenker til URIer). Eller for eksempel frames. Med en gang man lager en side med frames mister man dette aspektet ved hypermedia; det er vanskelig, om ikke umulig å komme tilbake til en side med frames, simpelthen fordi det bryter med web arkitekturen. Hypermedia er ikke lengre det som driver tilstanden; den driver flere mini-tilstander som hver har sin URI (og som gjerne snakker sammen). Det finnes andre mindre opplagte ting som gjør det vanskelig å holde applikasjonstilstand i URIen: Cookies. La oss si at vi ønsker en cookie som lagrer de sidene du har besøkt, og på bakgrunn av den kommer med forslag til sider du antakelig liker, som Amazon gjør. Du kan nå ikke lage noe bokmerke til en side med forslagene dine fordi andre folk har ikke denne cookien og får ikke samme tilstand som deg. Hadde man puttet historikken i URIene ville det vært no problemo fordi URIen ville inneholdt alt som trengs for å gi de samme forslagene. Noen browsere cacher sider i historikken og lar deg browse dem ved å trykke back-knappen. Noen cacher litt vel agressivt, noen gjør en conditional GET for å verifisere at innholdet er oppdatert. Hvis man har fått satt en cookie vil back-knappen vise deg nytt innhold—ikke det gamle! Cookies ødelegger også for proxy caching ved at responsen blir avhengig av hva man har satt i en spesiell cookie. Man kan fikse dette med Vary headere men det gjør at responsen blir avhengig av alle cookies og ikke den som forandret hvordan websiden så ut… Det er så lett å trå feil. Både for oss utviklere som lager CMSer osv, og for malverksutviklere som jobber i PHP, Ruby, JSP osv. Annonse | ||
Kommentarer
Åpenbart ingen som skjønte denne posten… Jeg får vel forsøke meg siden.
Apropos: Nei til sessions, fra irb.no.
Er den siden i en lukket sone? Får beskjed at jeg ikke har tilgang.
Den er kun synlig for medlemmer
Aida, sorry. Tenkte ikke over at det var en lukket sone.
Mye riktig i di tingene du poengterer her og dette er også områder hvor det syndes ganske mye. Mye fordi man rett og slett ikke tenker på dette når man gjør arkitektur av webapplikasjonen man skal lage. Det er lett å glemme.
Problemer med cookies og ting som settes i fra serversiden kan vi faktisk håndtere på enkle måter, men i den senere tid har teknologier som kun skjer i browseren begynt å snu opp ned på hvordan vi setter sammen websider. Jeg snakker om AJAX.
AJAX kan vi bildelig sett si er en sammling av “vinduer”. Altså man setter sammen mange “vindu” til et stort bilde, websiden, der hvert “vindu” henter data fra egne URL’er i bakgrunnen. Disse “vinduene” endrer seg da på basis av di valg man gjør i “vinduene”, men browseren står fortsatt på stedet hvil på samme URI. Å bookmarke en slik side byr på problemer samt at funksjonen til fremover og bakover knappen i browseren blir i mange tilfeller uvesentlig.
Slik jeg ser det så har det blitt en liten tendens i disse AJAX tider at man blitt litt blendet av AJAX sine muligheter slik at man faktisk har glemt endel av di gammle grunnleggende funksjonene i web.
Her er en god artikkel på problematikken rundt dette med AJAX