Gyakorlat – Logika hozzáadása a függvényalkalmazáshoz
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.
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.
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.
A Sablon kiválasztása területen válassza a HTTP-eseményindítót.
Select Create. A HttpTrigger1 a HttpTrigger1 függvénypanelen jön létre és jelenik meg.
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.
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.
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.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.
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.
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.
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, futtassacURL
a parancssorból. A PowerShell rendelkezik curl paranccsal, de az Invoke-WebRequest aliasa, amely nem ugyanaz, mintcURL
a .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étertname=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
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.
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.
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>
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.
- Hozzáadott egy
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.
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 } ] }
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.
A Kimenet lapon látható, hogy az állapotmező helyesen lett hozzáadva az egyes értékekhez.
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.