Požadavek rand
Účel a dopady
Vygeneruje jedno nebo více kryptograficky náhodných čísel podle zadaného rozsahu/velikosti a vrátí je v odpovědi. Požadavek nemá žádné vedlejší účinky – nic nezapisuje do databáze ani do session.
Dostupnost, kontext, oprávnění apod.
- Dostupné každému přihlášenému uživateli bez zvláštního oprávnění.
- Na rozdíl od požadavků jako
sql-query/actionnení zpracovánírandpodmíněno stavem obálkové transakce (transactional/avoidTran); požadavek se provede vždy.
XML požadavek (syntax + popis)
<request>
<rand
output="{string}"
from="{number}"
to="{number}"
repeat="{number}"
unique="{bool}"
size="{string}"
/>
</request>
Parametry a pravidla (atributy, potomci)
output- Formát vrácené hodnoty - Určuje, jak je vygenerované číslo zapsáno v odpovědi. (typ: enum; nepovinný; výchozí:plain; povolené hodnoty:base64,hex,plain– jakákoli jiná/neznámá hodnota i chybějící atribut se tiše chová jakoplain)from- Počátek rozsahu - Dolní mez rozsahu vracených čísel, včetně. (typ: number; nepovinný; výchozí:0; hodnota, kterou se nepodaří převést na celé číslo, se chová jako neuvedená)to- Konec rozsahu - Horní mez rozsahu vracených čísel, včetně. (typ: number; nepovinný; výchozí:0; hodnota, kterou se nepodaří převést na celé číslo, se chová jako neuvedená)repeat- Počet vygenerovaných čísel - Kolikrát se má číslo vygenerovat. (typ: number; nepovinný; výchozí:1; neplatná hodnota se chová jako neuvedená)unique- Vynutit unikátnost - Vygenerovaná čísla se nesmí v rámci jednoho požadavku opakovat. Server porovnává hodnotu s doslovným řetězcem"true"(po převodu na malá písmena). (typ: bool; nepovinný; výchozí:false)size- Velikost čísla v bajtech - Alternativa k zadání rozsahu přesfrom/to. Buď jedno z předdefinovaných slov, nebo číslo bajtů. (typ: string; nepovinný; výchozí:2bajty přioutput="plain"/neuvedenémoutput, jinak32bajtů; povolené hodnoty:short,ushort,int,uint,long,ulong, nebo libovolné celé číslo bajtů)
Požadavek nemá žádné potomky.
Význam předdefinovaných slov u size
Slova jsou napojena na velikosti typů použitého překladu na serveru, nikoli na nativní velikost long/unsigned long v jazyce C na této platformě:
short→ 2 bajty (číslo je interpretováno jako znaménkové)ushort→ 2 bajty (bez znaménka)int→ 4 bajty (znaménkové)uint→ 4 bajty (bez znaménka)long→ 8 bajtů, tedy stejně jakolong long(znaménkové) – ne 4 bajty, jak by odpovídalo nativnímulongna Windowsulong→ 8 bajtů, tedy stejně jakounsigned long long(bez znaménka)
Je-li size číslo, které se nepodaří rozpoznat jako žádné z výše uvedených slov, převede se přímo na počet bajtů; nepodaří-li se ho převést na číslo, uplatní se výchozí hodnota podle output popsaná výše.
Závislosti a vedlejší chování
- Je-li
fromvětší nežto, server je před generováním prohodí. - Je-li zadán platný rozsah (
fromrůzné odto), server tímto rozsahem přepočítá a přepíše efektivnísizepodle počtu bitů potřebných k zápisu rozsahu – zadánísizespolečně s rozsahem tedysizenepoužije v původní podobě, protože ho rozsah přepíše. - Přesáhne-li takto určená velikost čísla 8 bajtů a
outputje (výchozí)plain, server formát potichu přepne nabase64, protože desítkový zápis takto velkého čísla by nebyl smysluplný. unique="true"bez zadaného rozsahu prakticky vždy skončí chybou. Kontrola kapacity porovnávárepeatsto - from, je-li rozsah zadán; bez rozsahu (fromrovnoto, včetně výchozího stavu bez atributů) vychází kapacita nulová, takže jakýkolirepeat≥ 1 sunique="true"bez rozsahu vede k chyběNeplatne pouziti atributu unique. Kontrola navíc vyžaduje, aby efektivní velikost čísla byla nejvýše 8 bajtů – protounique="true"selže i s rozsahem, pokudsize/outputvede k číslu většímu než 8 bajtů (např. výchozí velikost 32 bajtů probase64/hexbez explicitníhosize).- Je-li požadavek zadán zcela bez atributů, vygeneruje se jedno desítkové číslo o velikosti 2 bajty, tedy z rozsahu
<0; 65536).
Příklady požadavku
(Zatím bez ověřeného příkladu.)
Zpracování a vedlejší účinky
- Pro každé z
repeatopakování server vygeneruje náhodné bajty (randomize); je-li zadán rozsah, hodnota se do něj promítne modulem a přiunique="true"se opakovaně generuje, dokud není získána dosud nepoužitá hodnota. - Formát textové reprezentace hodnoty ve
<value>odpovídáoutput: desítkové číslo (se znaménkem, je-li číslo záporné nebo byl použit znaménkový klíčsize), base64, nebo hexadecimální zápis.
XML odpověď (syntax + popis)
<response>
<rand
type="ok"
>
<value>{string}</value> *
</rand>
</response>
Uzel value nemá žádné atributy a obsahuje jen textovou hodnotu vygenerovaného čísla. Počet uzlů value odpovídá repeat.
Příklady odpovědi
(Zatím bez ověřeného příkladu.)
Chyby a reakce
<rand status="error" detail="Neplatne pouziti atributu unique"/>– nesplněna podmínka kapacity prounique="true"popsaná výše.- Pozor na název atributu chyby: na rozdíl od úspěšné odpovědi, která používá
type="ok", chybová odpověď používástatus="error"(netype="error"). Výraz pro identifikaci chyb v odpovědi serveru je tedyrand[@status='error'], nerand[@type='error'], jak uváděla starší dokumentace. - Jde o jedinou chybovou větev tohoto požadavku; je vždy sebeuzavírající, bez vnořeného uzlu
error.
Související požadavky
- uuid – další generátor hodnot ve stejné skupině požadavků.