Keskustelu:Idempotenssi

Wikipediasta
Siirry navigaatioon Siirry hakuun

HTTP:n GET ja POST[muokkaa wikitekstiä]

Hä, mitä tekemistä GET ja POST pyynnöillä on tämän asian kanssa. Viimeinen kappale ihan päätön. Kyllä GET pyyntö voi palauttaa eri kerroilla ihan eri lopputuloksen. Voit esimerkiksi katsoa palauttaako http://www.yle.fi joka päivä saman lopputuloksen. Kommentin jätti 212.246.252.173 (keskustelu – muokkaukset)

Poistin koko kappaleen, koska se pikemminkin sekoitti kuin selvensi asiaa. Myös matriiseja koskeva teksti oli täysin käsittämätön, korjailin sitä hiukan. --Jmk 25. syyskuuta 2009 kello 11.17 (EEST)[vastaa]
Lisäsin kappaleen takaisin lähteen kera. Kyse on siis siitä, miten HTTP-protokolla on alun perin suunniteltu/määritelty, ei siitä, miten sitä nykyään useimmiten käytetään. //Ephief 25. syyskuuta 2009 kello 11.27 (EEST)[vastaa]
Lähteessä asia mainitaan huomattavasti rajatummin: ... (aside from error or expiration issues) the side-effects ... is the same ... – Eli ensinnäkin kyse on HTTP-pyynnön sivuvaikutuksista (side-effects) eikä esim. YLEn etusivun sisällöstä (kyllä se saa muuttua), ja toiseksi expiration issues saa muuttaa tilannetta. Jos haluat palauttaa kappaleen, korjaisitko sen samalla lähteen mukaiseksi. --Jmk 25. syyskuuta 2009 kello 12.27 (EEST)[vastaa]
Lähteen kohdasta 9.1.1.: "In particular, the convention has been established that the GET and HEAD methods SHOULD NOT have the significance of taking an action other than retrieval. These methods ought to be considered "safe". [...] Naturally, it is not possible to ensure that the server does not generate side-effects as a result of performing a GET request; [...] The important distinction here is that the user did not request the side-effects, so therefore cannot be held accountable for them." Toisin sanoen, HTTP:n GET-metodi saisi (käyttäjän näkökulmasta) vain hakea tietoa, ei muuttaa sivuston tilaa. YLE-esimerkissä se tarkoittaa sitä, että URI:lla www.yle.fi on tietyllä ajanhetkellä joku tila, jota kyseiseen URIin tehty HTTP:n GET-metodikutsu ei saisi muuttaa. Toki sivuston tila muuttuu, kun sinne lisätään vaikkapa uusi uutinen, mutta jälleen lisäyksen jälkeen "syntynyt" sivuston tila ei saisi muuttua GET:llä. (Uutisen lisääminen voisi tapahtua esim. POST-metodilla, joka ei ole idempotentti.) Mutta toki tämä on vain tämmöistä "akateemista" keskustelua, sillä käytännössähän erittäin monien sivustojen tilaa pystyy muuttamaan HTTP:n GET-metodilla. //Ephief 25. syyskuuta 2009 kello 14.03 (EEST)[vastaa]
Ensinnäkin huomautan, että idempotenssi ei sinänsä tarkoita, että pyyntö ei saisi muuttaa sivuston tilaa. Saa muuttaa, mutta sitten uusi samanlainen pyyntö ei saisi enää muuttaa tilaa muuksi. (GET-metodia voi koskea lisää suosituksia, mutta tässä artikkelissa on kysymys nimenomaan idempotenssista eikä GET-metodin mahdollisista muista ominaisuuksista.) Toiseksi: artikkelin kappale "saman pyynnön suorittamisen pitäisi tuottaa aina sama tulos" ei selitä asiaa kunnolla. Se antaa tosiaan ymmärtää, että GET-metodinkutsun pitäisi huomennakin antaa "sama tulos" kuin tänään. Tätä ei edes RFC vaadi, kuten aivan oikein itsekin toteat. Joten: haluaisitko muotoilla kappaleen uudelleen lähteen mukaiseksi ja ei-harhaanjohtavaksi, vai otetaanko se kokonaan pois? --Jmk 25. syyskuuta 2009 kello 14.12 (EEST)[vastaa]
Ymmärrän nyt, mitä tarkoitat. Olisiko asia nyt riittävän selvästi ilmaistu? //Ephief 25. syyskuuta 2009 kello 14.34 (EEST)[vastaa]
Tuo on huomattavasti parempi. Kiitos! Vähän tosin vielä mietityttää, meneekö jollain lukijalla GET-esimerkin takia sekaisin idempotenssi (= monen pyynnön sivuvaikutus sama kuin yhden pyynnön) ja "ei sivuvaikutuksia ollenkaan". Jos HTTP-esimerkkiä halutaan, olisiko DELETE-metodi turvallisempi esimerkki? Siitä on helppo ymmärtää, että sivuvaikutuksia saa olla ja on tarkoituskin olla, mutta että pyynnön toistaminen ei enää muuta tilaa enempää (= idempotenssi). (Ongelmana tietysti on, että DELETE ei liene lukijalle niin tuttu kuin GET.) --Jmk 25. syyskuuta 2009 kello 14.39 (EEST)[vastaa]
Lisäsin toiseksi esimerkiksi DELETE-metodin (mutta en poistanut GET-metodia). Ehkä se nyt olisi hyvä? --Jmk 25. syyskuuta 2009 kello 14.45 (EEST)[vastaa]
Hyvä lisäys! Nyt asia lienee riittävän selvästi ilmaistu. Ja pysyypähän artikkelilla edes joku lähde ;) //Ephief 25. syyskuuta 2009 kello 14.50 (EEST)[vastaa]