Keskustelu:Idempotenssi

Viimeisin kommentti: 14 vuotta sitten käyttäjältä Ephief aiheessa HTTP:n GET ja POST

HTTP:n GET ja POST muokkaa

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
Palaa sivulle ”Idempotenssi”.