Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

Odpalování akcí měnících data odkazem

09.29 - 16. listopadu 2009 | Webdesign

V RESTové architektuře webu byste neměli odpalovat akce, které mění data, pomocí odkazů. Měli byste tak činit pomocí sloves HTTP protokolu (PUT, POST, DELETE). Přejdu fakt, že dnešní prohlížeče znají jen sloveso POST a ostatní musíte simulovat pomocí XHR. Stejně se dostanete do situací, kdy potřebujete nějakou akci měnící data odpalít odkazem.

Abych pro příklad nemusel chodit daleko, vezmu si hlasování k akcím na Tropu. U každé akce se můžete vyjádřit k tomu, zda na akci půjdete, možná se ukážete nebo nepůjdete. Pokud je uživatel nepřihlášený, vidí pod názvem akce tři ikonky s počtem hlasů. Po přihlášení se stanou aktivními a lze s nimi hlasovat. Původně byla tato „tlačítka“ pouhými odkazy na akci, která hlasování zpracovávala. Jenže po tom, co jsem pouštěl některé spidery, začaly přibývat hlasy.

Tím se dostáváme k praktickému důsledku porušení doporučení z prvního odstavce. Problém jsem nakonec vyřešil následujícím vzorem: Do stránky jsem přidal formuláře, které bezpečným způsobem odpalují akce měnící data. Každý formulář má své id. Odkazy, které původně vedly na akce měnící data, nyní odkazují na id jednotlivých formulářů a mají třídu form-submit. Jednoduchý jQuery kód pak projde tyto odkazy a na click jim naváže submit odkazovaného formuláře a ten pak schová.

Stránka vypadá pořád stejně, chová se stejně, ale dělá to jinak. Pokud nemá uživatel povolený JavaScript, tak se po kliknutí na ikonku dostane na správný formulář, který musí odeslat stiskem tlačítka submit. Funkčnost tak zůstává přístupná i bez JavaScriptu. Zároveň nehrozí, že by došlo k nechtěné aktivaci akce nějakým spiderem, který si ošahává odkazy na stránce.

Snad se bude hodit i vám.

Autor: Aleš Roubíček | Přidej komentář | Delicious | Digg | FriendFeed | Facebook | Linkuj! | Jagg

Komentáře RSS

  1.  

    Radek

    15.05 - 16. listopadu 2009 | #

    Hezky. Kolega @kolman implementoval podobné řešení u nás před 14 dny.

    Jak jste na tom s podporou mobilních zařízení? Mix: Mobile Web Sites with ASP.NET MVC and the Mobile Browser Definition File je u nás teď klíčový článek.

  2.  

    Aleš Roubíček

    15.47 - 16. listopadu 2009 | #

    [1] Radek: Zatím to není aktuální téma, ale také se mi to řešení líbilo. :)

  3.  

    Jakub Kulhan

    18.47 - 16. listopadu 2009 | #

    V čem je řešení popsané v článku lepší, než tam ten formulář dát rovnou?

    <form method="post" action="…">
     <input type="submit" name="prijdu" value="Ano">
     <input type="submit" name="prijdu" value="Možná">
     <input type="submit" name="prijdu" value="Ne">
    </form>

    Nebrat prosím rýpavě, možná mi nějaké nuance unikají.

  4.  

    Aleš Roubíček

    19.50 - 16. listopadu 2009 | #

    [3] Jakub Kulhan: třeba kvůli stylování a input type="image" mi nepřijde jako nejlepší řešení.

  5.  

    petr snobelt

    16.07 - 11. ledna 2010 | #

    [4] Aleš Roubíček: Dá se použít tag button a ten jde stylovat dobře.

Místo pro tvůj názor

Povinné je jméno a komentář, z e-mailu se rozpoznají Gravatary.
Komentář je formátován pomocí Texy! syntaxu.
Například: **tučný text**, *kurzíva*, "text odkazu":adresa.
Internetové adresy jsou převáděny na odkazy.
Na komentáře se můžete odkazovat pomocí [číslo komentáře].

Nový komentář