Sąžiningas vidurys — hibridas perkelia mainus
Tikros sistemos dažnai nori abiejų — be-būsenės patikros masto ir atšaukimo saugumo. Tad jos stato hibridą, o sąžininga pastebėti, ką hibridas iš tikrųjų kainuoja.
Trumpaamžis prieigos žetonas + ilgaamžis atnaujinimo žetonas. Įprastas produkcijos modelis:
- Prieigos žetonas (JWT), gyvenantis minutes. Jis tikrinamas be būsenos, lygiai kaip Pica, ir pridedamas prie kiekvieno API skambučio. Kadangi jis taip greitai baigiasi, pavogtas naudingas tik trumpai.
- Atnaujinimo žetonas, gyvenantis savaites, laikomas serveryje (lentelėje) ir keičiamas į šviežią prieigos žetoną, kai senasis baigiasi.
Dabar gali „atšaukti": ištrink atnaujinimo žetoną. Pavogtas prieigos žetonas vis dar veikia — bet tik iki galiojimo pabaigos, po minučių, ir jo niekada negalima atnaujinti. Apribojai žalą be duomenų bazės nuskaitymo kiekvienai užklausai.
Bet pažiūrėk, kas ką tik įvyko. Kad atgautų atšaukimą, hibridas iš naujo įvedė serverio būseną — atnaujinimo žetonų lentelę — būtent tai, ko JWT turėjo leisti išvengti. Jis nepabėgo nuo mainų; jis juos perkėlė: be būsenos karštame kelyje (kiekvienas API skambutis), su būsena šaltame kelyje (retas atnaujinimas). Tai tikrai geras inžinerinis pasirinkimas — jis deda kaštą ten, kur pigiausia — bet tai ne nemokami pietūs. Atšaukiamumo-prieš-be-būseniškumą mainai niekada nedingsta. Jie tik persikelia.
Kuri yra tikroji pamoka ir priežastis, kodėl pastatei dvi pilnas programas, o ne perskaitei vieną tinklaraščio įrašą: nėra universalaus atsakymo, tik atsakymas kontekstui ir kaštas, kurį gali įvardyti. Mobili programa, kalbanti su horizontaliai plečiamu API, linksta į be būsenos ir priima silpną atšaukimą (arba prideda atnaujinimo žetonus, kad šiek tiek atgautų). Serveryje atvaizduojama programa su duomenų baze kelyje ima serverio sesijas ir momentinį atšaukimą už nuskaitymo, kurį jau mokėjo, kainą.
Ši pamoka egzistuoja tik todėl, kad abi programos egzistuoja. Jei kursas būtų pastatęs tik Pica, „tiesiog naudok sesijas" būtų žodžiai. Jei būtų pastatęs tik SignFlow, „tiesiog naudok JWT" būtų žodžiai. Pastatei abu, atsitrenkei į sieną, į kurią atsitrenkia kiekvienas, ir dabar gali pasirinkti — ir apginti pasirinkimą — kad ir ką statytum toliau.