Filip Herudek

Vývojářský blog Filipa Herudka



Podle kategorie

Azure functions–http trigger

Filip Herudek       18.04.2017       Azure       10441 zobrazení

V minulých dílech jsme si popsali základy Azure Functions, jak funkci vytvořit nebo třeba jak pracovat s bloby jako vstupními či výstupními parametry. V tomto článku se podíváme na to, jak volat funkcí pomocí http požadavku.

http trigger

Microsoft nedávno přepracoval uživatelské rozhraní pro správu functions, ale nic zásadního se nezměnilo. Pro tvorbu funkce s http triggerem zle využít předpřipravenou šablonu jako u celé řady dalších případů. Vybereme HttpTrigger-CSharp, zobrazí se formulář pro vyplnění detailů funkce. Za povšimnutí stojí authorization level, který určuje, kdo může funkci volat. V případě “function” je potřeba při volání přiložit function key, v případě “admin” je vyžadován master key. Pro jednoduchost vybereme možnost “anonymous”, kdy se není třeba pro volání nijak autorizovat.

image

Je vygenerován následující kód. Metoda Run přijímá parametr typu HttpRequestMessage.

using System.Net;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");

    // parse query parameter
    string name = req.GetQueryNameValuePairs()
        .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
        .Value;

    // Get request body
    dynamic data = await req.Content.ReadAsAsync<object>();

    // Set name to query string or body data
    name = name ?? data?.name;

    return name == null
        ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
        : req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
}

Funkce se snaží přečíst parameter “name” předaný v URL nebo těle požadavku a vrátí pozdrav nebo upozornění, že jméno nebylo vyplněno. Pro testování funkce může posloužit panel “Test”, který je součástí editoru.

image

My si z funkce uděláme jednoduché API pro kalkulačku. Nejprve je potřeba upravit několik nastavení na záložce “Integrate”, konkrétně náš http trigger. V prvním kroku ponecháme jedinou povolenou http metodu pouze GET. V druhém kroku upravíme “Route template” na hodnotu “calculate/add/{numberOne}/{numberTwo}”. Tím upravíme URL, na které je funkce dostupná a zároveň pomocí složených závorek řekneme, že očekáváme dva parametry.

image

Jakmile se vrátíme do editoru funkce, všimněte si, že v otevřeném test panelu přibyly oba dva paremetry – numberOne a numberTwo. Nyní přepíšeme funkci tak, aby sčítala dva parametry.

using System.Net;

public static HttpResponseMessage Run(HttpRequestMessage req, int numberOne, int numberTwo, TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");
    log.Info("Input parameters");
    log.Info($"Number one: {numberOne}");
    log.Info($"Number two: {numberTwo}");

    var result = new ResultStruct
    {
        NumberOne = numberOne,
        NumberTwo = numberTwo,
        Result =numberOne + numberTwo 
    };
    return req.CreateResponse(HttpStatusCode.OK, result);
    
}

struct ResultStruct
{
    public int NumberOne {get; set;}
    public int NumberTwo{get; set;}
    public int Result{get; set;}
}

Protože v metodě Run nezůstane v našem případě žádné asynchronní volání, tak změníme návratový typ na HttpResponseMessage a odebereme klíčové slovo async. Rozšíříme vstupní parametry o int numberOne, respektive int numberTwo. Functions nám parametry naplní na základě volání funkce. Následný kód je velice jednoduchý. Nejdříve zalogujeme vstupní parametry, pak naplníme strukturu, kterou pošleme na výstup. Výsledkem bude následující json.

{
    "NumberOne": 5,
    "NumberTwo": 2,
    "Result": 7
}

Když máme funkci vyzkoušenou, tak ještě přidáme jednoduchou autorizaci. Na záložce Integrate změníme Authorization level na “Function”. Samotná autorizace je jednoduchá, stačí do URL přidat parameter code. Klíč je k dispozici na záložce manage po kliknutí na odkaz Click to show. Klíčů je možno vytvořit víc, nezávisle je na sobě odebírat atd.

Funkci vyzkoušime volat z REST konzole v prohlížeči (libovolný plugin poslouží, já používám RestMan pro Operu). URL adresu funkce získáme velice jednoduše, stačí v pravém horním rohu editoru kliknout na odkaz Get function URL, který vrátí URL včetně vloženého klíče. URL stačí zkopírovat do konzole. Pokud smažeme parametr code, celkem očekávaně funkce vrátí kód 401, unauthorized. Po vrácení klíče na své místo se vrátí validní výsledek. Druhou alternativou pro autorizaci je vytvoření hlavičky “x-functions-key” obsahující klíč. Výsledek pak může vypadat přibližně takto:

image

Závěr

Tentokrát jsme si ukázali, jak vytvořit funkci, která je k dispozici pomocí http volání a může sloužit jako část našeho API. Vytvořili jsme velice jednoduchou funkci, která slouží k demonstraci možností předávání vstupních parametrů pomocí url, generování výstupu ve formátu json a autorizaci pomocí klíče. Příště se zaměříme na to, jak zapojit functions do DevOps.

 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

 

Nový příspěvek

 

Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback