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 fok feletti hőmérsékleteket veszélyként kell megjelölni.

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őn, a Függvények lapon a Létrehozás alatt az Azure portálon, válassza a Függvény létrehozása lehetőséget. 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 , és válassza a Tovább lehetőséget.

  1. Hagyja a függvény nevétHttpTrigger1 és az engedélyezési szintetfügvényként, majd válassza a Létrehozás opciót. A HttpTrigger1 függvény létrejön, és megjelenik a HttpTrigger1 függvény panelen.

  2. Válassza a Kód + Teszt fület. Megnyílik a kódszerkesztő, amely megjeleníti a függvényindex.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, <név> üzenet visszaküldésével válaszol, visszhangozva a kéréssel küldött nevet. 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 szakaszban, a Függvény neve mezőben adja meg a DriveGearTemperatureService nevet. Hagyja meg az engedélyezési szintetfü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 egy parancssori eszköz, amellyel fájlokat küldhet vagy fogadhat. 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 a _master (Gazdagépkulcs) hivatkozást az URL-cím végén található Másolás vágólapra ikonra kattintva. Ezt a hivatkozást a Jegyzettömbben vagy egy hasonló alkalmazásban tárolhatja későbbi használatra.

    Képernyőkép az Azure Portalról, amelyen a függvényszerkesztő látható, kiemelve a Függvény URL-címének lekérése gombot.

  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. Amikor létrehoz egy függvényt, ki kell választania az engedélyezési szintet. Alapértelmezés szerint a szint Függvény értékre van állítva, amelyhez függvényspecifikus API-kulcs szükséges. Beállíthatja azt is, hogy a 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énykulcsok megkereséséhez nyissa meg a Kód + Teszt menüt a függvény nevének (például HttpTriger1) kiválasztásával az Áttekintés menü Függvények lapján. Ezután válassza a Függvénykulcsok lapot.

  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 a Jegyzettömbben vagy egy hasonló alkalmazásban későbbi használatra.

    Képernyőkép a Függvénykulcsok panelről, amelyen a feltárt függvénykulcs van kiemelve.

  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 Content-Type típusú application/json 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ényünknek küldött kérelemtörzsre. A tömb neve kissé eltérhet a JavaScript vagy a PowerShell esetében, de a tömb minden bejegyzése azonosítóval, időbélyegzővel és hőmérsékletsel rendelkezik.

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

Cserélje le a függvény alapértelmezett kódját a következő kódra, amely megvalósítja az üzleti logikát.

A HttpTrigger1 függvénypanelen nyissa meg a 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.

Az üzleti logika tesztelése

A tesztelési/futtatási funkciót a Developer>Code + Test használatával fogjuk alkalmazni a függvény teszteléséhez.

  1. A Kód + Teszt lapon válassza a Tesztelés/Futtatás lehetőséget. 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
            }
        ]
    }
    

Nyissa meg a run.ps1 fájlt, és cserélje le a tartalmat 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 tesztelési/futtatási funkciót a Developer>Code + Test használatával fogjuk alkalmazni a függvény teszteléséhez.

  1. A Kód + Teszt lapon válassza a Tesztelés/Futtatás lehetőséget. 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
            }
        ]
    }
    
  1. 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 úszó részén (ha még nem nyitotta meg). Az alábbi képen egy példaválasz látható a kimeneti panelen és a Naplók panel üzenetei között.

    Képernyőkép az Azure-függvényszerkesztőről, amelyen a Tesztelés és a Naplók lap látható.

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