Gyakorlat – Logika hozzáadása a függvényalkalmazáshoz

Befejeződött

A sebességváltós példát folytatva hozzáadjuk a hőmérséklet-szolgáltatáshoz szükséges logikát. Egészen pontosan egy HTTP-kéréstől fogunk adatokat kapni.

Funkciókövetelmények

Először meg kell határoznunk a logikánk néhány követelményét:

  • A 0 és 25 fok közötti hőmérsékleteket okként kell megjelölni.
  • A 25 és 50 fok között mért hőmérsékleteket ÓVATOSAN kell megjelölni.
  • Az 50 feletti közötti hőmérsékleti értékek VESZÉLY jelöléssel rendelkezzenek.

Függvény hozzáadása a függvényalkalmazáshoz

Ahogy az előző leckében is ismertettük, az Azure olyan sablonokat biztosít, amelyek segítenek a függvények létrehozásában. Ebben a leckében a HttpTrigger sablont használja a hőmérsékleti szolgáltatás implementálásához.

  1. Az előző gyakorlatban üzembe helyezte a függvényalkalmazást, és megnyitotta azt. Ha még nincs megnyitva, a Kezdőlapon a Minden erőforrás lehetőséget választva nyithatja meg, majd a függvényalkalmazást kiválasztva, amely az escalator-functions-xxx névvel van elnevezve.

  2. A Függvényalkalmazás képernyő Függvények lapján válassza a Létrehozás lehetőséget az Azure Portalon. Megjelenik a Függvény létrehozása panel.

  3. A Sablon kiválasztása területen válassza a HTTP-eseményindítót.

  1. Select Create. A HttpTrigger1 a HttpTrigger1 függvénypanelen jön létre és jelenik meg.

  2. A bal oldali Fejlesztőeszközök menüben válassza a Kód + Teszt lehetőséget. Megnyílik a kódszerkesztő, amely megjeleníti a függvény index.js kódfájljának tartalmát. A létrehozott HTTP-sablon alapértelmezett kódja az alábbi kódrészletben jelenik meg.

    module.exports = async function (context, req) {
        context.log('JavaScript HTTP trigger function processed a request.');
    
        const name = (req.query.name || (req.body && req.body.name));
        const responseMessage = name
            ? "Hello, " + name + ". This HTTP triggered function executed successfully."
            : "This HTTP triggered function executed successfully. Pass a name on the query string or in the request body for a personalized response.";
    
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: responseMessage
        };
    }
    

    A függvény azt várja, hogy a név a HTTP-kérelem lekérdezési sztringen keresztül vagy a kérelem törzsének részeként legyen átadva. A függvény a Hello, name (Hello, <név>) üzenet visszaküldésével válaszol. Ez a HTTP-aktivált függvény sikeresen végrehajtotta a műveletet.

    A forrásfájl legördülő listájában válassza a function.json lehetőséget a függvény konfigurációjának megtekintéséhez, amelynek az alábbi kódhoz hasonlóan kell kinéznie.

    {
      "bindings": [
        {
          "authLevel": "function",
          "type": "httpTrigger",
          "direction": "in",
          "name": "req",
          "methods": [
            "get",
            "post"
          ]
        },
        {
          "type": "http",
          "direction": "out",
          "name": "res"
        }
      ]
    }
    

    Ez a konfigurációs fájl deklarálja, hogy a függvény akkor fut, amikor HTTP-kérést kap. A kimeneti kötés deklarálja, hogy a válasz HTTP-válaszként lesz elküldve.

  1. A Sablon részletei szakasz Új függvény mezőjébe írja be a DriveGearTemperatureService nevet. Hagyja meg az engedélyezési szintet függvényként, majd válassza a Létrehozás lehetőséget a függvény létrehozásához. Megjelenik a DriveGearTemperatureService függvény Áttekintés panelje.

  2. A Függvény menüben válassza a Kód + Teszt lehetőséget. Megnyílik a kódszerkesztő a run.ps1 kódfájl tartalmával. A sablon által generált alapértelmezett kód a következő kódrészletben látható.

    using namespace System.Net
    
    # Input bindings are passed in via param block.
    param($Request, $TriggerMetadata)
    
    # Write to the Azure Functions log stream.
    Write-Host "PowerShell HTTP trigger function processed a request."
    
    # Interact with query parameters or the body of the request.
    $name = $Request.Query.Name
    if (-not $name) {
        $name = $Request.Body.Name
    }
    
    $body = "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
    
    if ($name) {
        $body = "Hello, $name. This HTTP triggered function executed successfully."
    }
    
    # Associate values to output bindings by calling 'Push-OutputBinding'.
    Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
        StatusCode = [HttpStatusCode]::OK
        Body = $body
    })
    

    A függvény egy név átadására vár a HTTP-kérés lekérdezési sztringjén keresztül vagy a kérés törzsének részeként. A HTTP-függvényeknek a kimeneti kötésben történő írással kell választ létrehozniuk, amit a PowerShell Functions Push-OutputBinding parancsmagjával végeznek el. Ez a függvény a Hello($name) üzenetet adja vissza, amely visszaköszön a kérésben elküldött névre.

  3. A forrás legördülő listában válassza a function.json lehetőséget a függvény konfigurációjának megtekintéséhez, amelynek az alábbihoz hasonlóan kell kinéznie.

    {
      "bindings": [
        {
          "authLevel": "function",
          "type": "httpTrigger",
          "direction": "in",
          "name": "Request",
          "methods": [
            "get",
            "post"
          ]
        },
        {
          "type": "http",
          "direction": "out",
          "name": "Response"
        }
      ]
    }
    

    Ez a konfiguráció azt deklarálja, hogy a függvény akkor fut, ha HTTP-kérést kap. A kimeneti kötés deklarálja, hogy a válasz HTTP-válaszként lesz elküldve.

A függvény tesztelése

Tipp.

A cURL fájlok küldésére vagy fogadására használható parancssori eszköz. Része a Linux, macOS és Windows 10 rendszernek, és a többi operációs rendszer többségéhez is letölthető. A cURL számos protokollt támogat, köztük sok más mellett a következőket: HTTP, HTTPS, FTP, FTPS, SFTP, LDAP, TELNET, SMTP, POP3. További információk az alábbi hivatkozásokra kattintva érhetők el:

A függvény teszteléséhez küldjön egy HTTP-kérést a függvény URL-címére a cURL használatával a parancssoron.

  1. Bontsa ki a Naplók keretet az eseményindító függvény paneljének alján. Válassza a Fájlrendszernaplók lehetőséget a Naplók keret tetején található legördülő listában. A naplókeretnek percenként el kell kezdenie a nyomkövetési értesítéseket.

  2. A függvény végponti URL-címének megkereséséhez a parancssávon válassza a Függvény URL-címének lekérése lehetőséget az alábbi képen látható módon. Mentse ezt a hivatkozást az URL-cím végén található Másolás a vágólapra ikon kiválasztásával. Ezt a hivatkozást Jegyzettömb vagy hasonló alkalmazásban tárolhatja későbbi használatra.

    Screenshot of the Azure portal showing the function editor, with the Get function URL button highlighted.

  3. Nyisson meg egy parancssort, és futtassa a cURL parancsot, hogy HTTP-kérést küldjön a függvény URL-címére. Ne feledje, hogy az előző lépésben másolt URL-címet használja.

    curl "<your-https-url>"
    

    Tipp.

    Előfordulhat, hogy az URL-címet idézőjelekbe kell tördelnie, hogy elkerülje az URL-cím speciális karaktereivel kapcsolatos problémákat.
    Ha Windows rendszeren van, futtassa cURL a parancssorból. A PowerShell rendelkezik curl paranccsal, de az Invoke-WebRequest aliasa, amely nem ugyanaz, mint cURLa .

    A válasznak az alábbihoz hasonlóan kell kinéznie.

    This HTTP triggered function executed successfully. Pass a name on the query string or in the request body for a personalized response.
    

    Most adjon meg egy nevet a kérelemben. Ehhez hozzá kell adnia egy, az URL-címhez elnevezett name lekérdezési sztringparamétert. Az alábbi példa hozzáadja a lekérdezési sztring paramétert name=Azure.

    curl "<your-https-url>&name=Azure"
    

    A válasznak az alábbihoz hasonlóan kell kinéznie.

    Hello, Azure. This HTTP triggered function executed successfully.
    

    A függvény sikeresen végrehajtotta a elemet, és visszaadta a kérésben átadott nevet.

Biztonságos HTTP-eseményindítók

A HTTP-triggerekkel API-kulcsokkal blokkolhatja az ismeretlen hívókat, ha kulcsra van szükség a kérés részeként. A hitelesítés szintjét Ön választja ki a függvény létrehozásakor. Alapértelmezés szerint függvényre van állítva, amelyhez függvényspecifikus API-kulcs szükséges. Beállíthatja azt is, hogy Rendszergazda globális főkulcsot használjon, vagy névtelenként jelezze, hogy nincs szükség kulcsra. A hitelesítési szintet a függvény tulajdonságai között is módosíthatja a létrehozás után.

Mivel a függvény létrehozásakor a függvényt adta meg, a HTTP-kérés elküldésekor meg kell adnia a kulcsot. Elküldheti a lekérdezési sztring paraméterként.code Vagy használja az előnyben részesített metódust, és adja át http-fejlécként.x-functions-key

  1. A függvény és a főkulcsok megkereséséhez a Függvényalkalmazás menü Fejlesztőeszközök területén válassza a Függvénykulcsok lehetőséget. Megnyílik a függvény Függvénykulcsok panelje.

  2. Alapértelmezés szerint a függvénykulcs értéke rejtett. Az alapértelmezett függvénykulcs értékének megjelenítése az Érték megjelenítése gombra kattintva. Másolja az Érték mező tartalmát a vágólapra, majd tárolja ezt a kulcsot Jegyzettömb vagy egy hasonló alkalmazásban későbbi használatra.

    Screenshot showing the Function Keys pane with the revealed function key highlighted.

  3. Ha a függvényt a függvénykulcs használatával szeretné tesztelni, nyisson meg egy parancssort, és futtassa a cURL parancsot, hogy HTTP-kérést küldjön a függvény URL-címére. Cserélje le <your-function-key> a mentett függvénykulcs-értékre, és cserélje le <your-https-url> a függvény URL-címére.

    curl --header "Content-Type: application/json" --header "x-functions-key: <your-function-key>" --request POST --data "{\"name\": \"Azure Function\"}" <your-https-url>
    
  4. Tekintse át a cURL parancsot, és ellenőrizze, hogy a következő értékekkel rendelkezik-e:

    • Hozzáadott egy application/json típusú Content-Type fejlécértéket.
    • Átadta a függvénykulcsot, mint az x-functions-key fejlécértéket.
    • POST kérést használt.
    • Átadta az Azure-függvényt a függvény URL-címével.
  5. Ellenőrizze a naplókat.

    A Code + Test panelnek meg kell nyitnia egy munkamenetet, amely megjeleníti a naplófájl kimenetét (győződjön meg arról, hogy a Fájlrendszernaplók ki van jelölve a Naplók panel tetején található legördülő menüben). A naplófájl a kérés állapotával frissül, amelynek így kell kinéznie:

```output
2022-02-16T22:34:10.473 [Information] Executing 'Functions.HttpTrigger1' (Reason='This function was programmatically called via the host APIs.', Id=4f503b35-b944-455e-ba02-5205f9e8b47a)
2022-02-16T22:34:10.539 [Information] JavaScript HTTP trigger function processed a request.
2022-02-16T22:34:10.562 [Information] Executed 'Functions.HttpTrigger1' (Succeeded, Id=4f503b35-b944-455e-ba02-5205f9e8b47a, Duration=114ms)
```
```output
2022-02-16T21:07:11.340 [Information] INFORMATION: PowerShell HTTP trigger function processed a request.
2022-02-16T21:07:11.449 [Information] Executed 'Functions.DriveGearTemperatureService' (Succeeded, Id=25e2edc3-542f-4629-a152-cf9ed99680d8, Duration=1164ms)
```

Üzleti logika hozzáadása a függvényhez

Adja hozzá a logikát a függvényhez, hogy ellenőrizze a kapott hőmérséklet-értékeket, és állítsa be az egyes hőmérséklet-értékek állapotát.

A függvény hőmérsékletmérési eredményekből álló tömböt vár. Az alábbi JSON-kódrészlet egy példa a függvénynek küldött kérések törzsére. Minden reading bejegyzés rendelkezik azonosítóval, időbélyeggel és egy hőmérsékletértékkel.

{
    "readings": [
        {
            "driveGearId": 1,
            "timestamp": 1534263995,
            "temperature": 23
        },
        {
            "driveGearId": 3,
            "timestamp": 1534264048,
            "temperature": 45
        },
        {
            "driveGearId": 18,
            "timestamp": 1534264050,
            "temperature": 55
        }
    ]
}

Az üzleti logika implementálásához cserélje le a függvény alapértelmezett kódját a következő kódra.

A HttpTrigger1 függvénypanelen nyissa meg az index.js fájlt, és cserélje le a következő kódra. A módosítás elvégzése után a parancssávon válassza a Mentés lehetőséget a fájl frissítéseinek mentéséhez.

module.exports = function (context, req) {
    context.log('Drive Gear Temperature Service triggered');
    if (req.body && req.body.readings) {
        req.body.readings.forEach(function(reading) {

            if(reading.temperature<=25) {
                reading.status = 'OK';
            } else if (reading.temperature<=50) {
                reading.status = 'CAUTION';
            } else {
                reading.status = 'DANGER'
            }
            context.log('Reading is ' + reading.status);
        });

        context.res = {
            // status: 200, /* Defaults to 200 */
            body: {
                "readings": req.body.readings
            }
        };
    }
    else {
        context.res = {
            status: 400,
            body: "Please send an array of readings in the request body"
        };
    }
    context.done();
};

A hozzáadott logika egészen egyszerű. Átvezetjük a tömböt, és a hőmérsékleti mező értéke alapján beállítjuk az állapotot OK, FIGYELEM vagy VESZÉLY értékként. Végül visszaküldjük a tömböt a minden bejegyzéshez hozzáadott állapotmezővel együtt.

Figyelje meg az Log utasításokat, amikor kibontja a naplókat a panel alján. A függvény futtatásakor ezek az utasítások üzeneteket adnak hozzá a Naplók ablakban.

Nyissa meg a run.ps1 fájlt, és cserélje le a tartalmát a következő kódra. A módosítás elvégzése után a parancssávon válassza a Mentés lehetőséget a fájl frissítéseinek mentéséhez.

using namespace System.Net

param($Request, $TriggerMetadata)

Write-Host "Drive Gear Temperature Service triggered"

$readings = $Request.Body.Readings
if ($readings) {
    foreach ($reading in $readings) {
        if ($reading.temperature -le 25) {
            $reading.Status = "OK"
        }
        elseif ($reading.temperature -le 50) {
            $reading.Status = "CAUTION"
        }
        else {
            $reading.Status = "DANGER"
        }

        Write-Host "Reading is $($reading.Status)"
    }

    $status = [HttpStatusCode]::OK
    $body = $readings
}
else {
    $status = [HttpStatusCode]::BadRequest
    $body = "Please send an array of readings in the request body"
}

Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = $status
    Body = $body
})

A hozzáadott logika egészen egyszerű. Átvezetjük a tömböt, és a hőmérsékleti mező értéke alapján beállítjuk az állapotot OK, FIGYELEM vagy VESZÉLY értékként. Végül visszaküldjük a tömböt a minden bejegyzéshez hozzáadott állapotmezővel együtt.

Jegyezze fel a Write-Host parancsmaghoz intézett hívásokat. A függvény futtatásakor ezek az utasítások üzeneteket adnak hozzá a Naplók ablakban.

Az üzleti logika tesztelése

A Függvény teszteléséhez a Developer>Code + Test tesztelési/futtatási funkcióját fogjuk használni.

  1. A Bevitel lapon cserélje le a Szövegtörzs szövegdoboz tartalmát a következő kódra a mintakérés létrehozásához.

    {
        "readings": [
            {
                "driveGearId": 1,
                "timestamp": 1534263995,
                "temperature": 23
            },
            {
                "driveGearId": 3,
                "timestamp": 1534264048,
                "temperature": 45
            },
            {
                "driveGearId": 18,
                "timestamp": 1534264050,
                "temperature": 55
            }
        ]
    }
    
  2. Válassza a Futtatás lehetőséget. A Kimenet lapon megjelenik a HTTP-válaszkód és a tartalom. A naplóüzenetek megtekintéséhez nyissa meg a Naplók lapot a panel alsó részén (ha még nem nyitotta meg). Az alábbi ábrán egy példa látható a kimeneti panelen megjelenő válaszra, és a Naplók panelen látható üzenetekre.

    Screenshot of the Azure function editor, with the Test and Logs tabs showing.

    A Kimenet lapon látható, hogy az állapotmező helyesen lett hozzáadva az egyes értékekhez.

  3. A bal oldali Fejlesztőeszközök menüben válassza a Figyelés lehetőséget, ha látni szeretné, hogy a kérés az Alkalmazás Elemzések lett naplózva. Megjelenik a Monitor panel a függvényhez.

    A panel Meghívások lapja az egyes függvényhívások hívási nyomkövetéseit jeleníti meg. Válassza ki az egyik meghívás Dátum (UTC) értékét, és tekintse meg a függvény végrehajtásának részleteit.