V dnešním digitálním světě je hladké a intuitivní uživatelské prostředí klíčem k úspěchu každé webové aplikace. Důležitou součástí této zkušenosti je poskytnout uživatelům snadný přístup k různým zdrojům – ať už jde o dokumenty, obrázky nebo jiné typy dat. Aby to bylo možné, musí váš server efektivně spravovat a poskytovat různé formáty obsahu.
S novou funkcí serveru REST společnosti 4D je nyní správa poskytování různorodého obsahu jednodušší než kdykoli předtím. Dříve mohl server REST vracet pouze skalární data, data entit nebo data pro výběr entit. Nyní může přímo dodávat úplný webový obsah – obsah připravený pro zpracování prohlížečem.
Stahování souborů nebo přijímání binárních dat ze serveru REST je nyní díky nové třídě OutgoingMessage jednoduché. Díky ní můžete snadno přizpůsobit odpovědi svým potřebám.
Přečtěte si, jak může třída OutgoingMessage vylepšit vaši aplikaci!
Třída HDI_OutGoingMessageClass
volání exponované funkce na serveru REST
Rychlá připomínka: Funkce datového modelu ORDA a singletonové funkce jsou volatelné jako rozhraní REST API. Pro osvěžení paměti se podívejte na tento příspěvek na blogu a na tento příspěvek.
Až dosud mohl server REST vracet různé typy výsledků – skaláry, entity nebo výběry entit – zabalené v objektu pomocí vlastnosti result.
Příklad:
Toto je funkce getSomeInfo() na třídě Datastore.
exposed Function getSomeInfo() : Text
return "This is the info"
A zde je výsledek získaný při jejím volání s požadavkem /rest/$catalog/getSomeInfo:
{
"result": "This is the info"
}
V takových funkcích nelze používat příkazy 4D Webu, proto je zde nová funkce OutgoingMessage třída přichází s velkou výhodou.
Nová třída OutgoingMessage
Funkce datového modelu ORDA a singletony mohou nyní vracet instanci objektu této nové třídy OutgoingMessage třídy.
S takovými objekty pracuje přímo každý prohlížeč jako s webovým obsahem.
Koncovým uživatelům tak můžete nabídnout funkce, jako je stahování souborů a obrázků a příjem libovolného typu obsahu prostřednictvím prohlížeče.
Toto je reprezentace JSON takové instance objektu třídy OutgoingMessage třídy.
příklad
V tomto příkladu je ve třídě Datastore implementována funkce getFile(). Jejím účelem je vrátit soubor testFile.pdf jako odpověď na požadavek.
Instance objektu třídy OutgoingMessage třídy je vytvořena.
Tělo obsahuje binární obsah souboru testFile.pdf a hlavičku označující, že je nastaven typ obsahu.
exposed onHTTPGet Function getFile() : 4D.OutgoingMessage
var $result:=4D.OutgoingMessage.new()
var $file:=File("/RESOURCES/testFile.pdf")
$result.setBody($file.getContent()) // This is binary content
$result.setHeader("Content-Type"; "application/pdf")
return $result
Na adrese OutgoingMessage třída obsahuje tři vlastnosti, které je třeba vyplnit podle vlastních potřeb:
- hlavičku: Nastavte libovolnou hlavičku HTTP, kterou je klient povinen zpracovávat (např. content-type pro označení typu obsahu těla).
- body: nastavte obsah, který chcete odeslat jako odpověď na požadavek. Může to být řetězec nebo blob (např. soubor, dokument nebo obrázek jako binární obsah).
- status: v tomto případě je třeba zadatstav: Nastavte libovolný stavový kód HTTP podle výsledku provedeného požadavku. Klient tak získá informaci o tom, jak požadavek proběhl (např. stav 403, pokud byl požadavek odmítnut). Výchozí hodnota je 200.
N.B. Vlastnosti body a status lze ovlivnit pomocí operátoru := nebo pomocí odpovídajícího parametru. setBody() / setStatus() funkcí.
usnadnit volání funkcí na rest serveru
nové klíčové slovo onHTTPGet pro funkce
Dosud se volání funkcí ( tříd datového modelu ORDA a singletonů) prostřednictvím serveru REST muselo provádět pomocí slovesa POST. To bylo provedeno z bezpečnostních důvodů, aby se zabránilo spuštění citlivého kódu prostřednictvím tak jednoduché akce, jako je kliknutí na odkaz.
Protože POST ne vždy vyhovuje uživatelskému prostředí, které chcete nabídnout, lze tyto funkce volat také pomocí slovesa GET , tj. volat je zadáním adresy URL v prohlížeči.
Použijte nové onHTTPGet K tomu slouží klíčové slovo. Pokud je toto klíčové slovo použito na funkci, je tato funkce rovněž volatelná pomocí slovesa GET!
příklad
exposed onHTTPGet Function getSomeInfo() : 4D.OutgoingMessage
N.B. Protože tento typ volání je snadno nabízená akce, musí vývojář zajistit, aby v takových funkcích nebyly prováděny žádné citlivé akce.
předávání parametrů
Parametry lze funkci předat pomocí parametru $params (musí být uzavřeny v kolekci).
příklad
V tomto příkladu je volána funkce getThumbnail() datové třídy Products (pro získání miniatury fotografie daného produktu).
Obdrží název výrobku a požadovanou šířku + délku.
IP:port/rest/Products/getThumbnail?$params='["Yellow Pack",200,200]'
Další informace o odesílání parametrů při volání funkce najdete v dokumentaci.
Kompletní příklad
Zde je případ použití tohoto příkladu: koncovému uživateli je nabídnut odkaz ke stažení uživatelské příručky vybraného výrobku s několika dostupnými formáty.
Požadavek za odkazem je následující: IP:port/rest/Products/getUserManual?$params='[1, „pdf“]‘
Jako parametr je předáno id vybraného produktu (1) a požadovaný formát (pdf).
Zavolá se funkce getUserManual() datové třídy Products. Jako parametr obdrží id výrobku a formát.
Je načten odpovídající dokument. Jeho binární obsah je vložen jako tělo do odpovědi s odpovídajícím typem obsahu.
exposed onHTTPGet Function getUserManual($productId : Integer; $type : Text) : 4D.OutgoingMessage
var $file : 4D.File
var $response:=4D.OutgoingMessage.new()
var $doc:="/RESOURCES/User manuals/product_"+String($productId)
Case of
: ($type="pdf")
$file:=File($doc+".pdf")
$response.setBody($file.getContent()) // This is binary content
$response.setHeader("Content-Type"; "application/pdf")
: ($type="jpeg")
$file:=File($doc+".jpeg")
$response.setBody($file.getContent()) // This is binary content
$response.setHeader("Content-Type"; "image/jpeg")
End case
return $response
Zde je scénář přehrávaný v prohlížeči:
Vyzkoušejte si to sami
Stáhněte si HDI a prozkoumejte tuto novou funkci a podívejte se do dokumentace, kde najdete další podrobnosti o používání funkce OutgoingMessage ve svých webových aplikacích.