7. rész: Fő alkalmazás API-végpont

Előző rész: Fő alkalmazás indítási kódja

Az alkalmazás URL-címe /api/v1/getcode az API-hoz létrehoz egy JSON-választ, amely alfanumerikus kódot és időbélyeget tartalmaz.

Először a @app.route dekoratőr tájékoztatja a Flaskot, hogy a get_code függvény kezeli az /api/v1/getcode URL-címére irányuló kérelmeket.

@app.route('/api/v1/getcode', methods=['GET'])
def get_code():

Ezután az alkalmazás meghívja a harmadik féltől származó API-t, amelynek URL-címe number_urltalálható, és megadja a fejléc kulcstartójából lekért hozzáférési kulcsot.

headers = {
    'Content-Type': 'application/json',
    'x-functions-key': access_key
    }

r = requests.get(url = number_url, headers = headers)

if (r.status_code != 200):       
    return "Could not get you a code.", r.status_code

A példa harmadik féltől származó API az Azure Functions kiszolgáló nélküli környezetében van üzembe helyezve. A fejléc x-functions-key tulajdonsága az, ahogyan az Azure Functions elvárja, hogy egy hozzáférési kulcs megjelenjen a fejlécben. További információ: Azure Functions HTTP-eseményindító – Engedélyezési kulcsok. Ha az API meghívása bármilyen okból meghiúsul, a kód hibaüzenetet és állapotkódot ad vissza.

Feltételezve, hogy az API-hívás sikeres, és numerikus értéket ad vissza, az alkalmazás összetettebb kódot hoz létre ezzel a számmal és néhány véletlenszerű karakterrel (saját random_char függvény használatával).

data = r.json()
chars1 = random_char(3)
chars2 = random_char(3)
code_value = f"{chars1}-{data['value']}-{chars2}"
code = { "code": code_value, "timestamp" : str(datetime.utcnow()) }

Az code változó az alkalmazás API-jának teljes JSON-válaszát tartalmazza, amely tartalmazza a kód értékét és az időbélyeget. Példaként {"code":"ojE-161-pTv","timestamp":"2020-04-15 16:54:48.816549"}választ adnánk.

Mielőtt azonban visszaadja ezt a választ, egy üzenetet ír a tárolási üzenetsorba a Queue-ügyfél send_message metódusával:

queue_client.send_message(code)

return jsonify(code)

Üzenetsor feldolgozása

Az üzenetsorban tárolt üzenetek megtekinthetők és kezelhetők az Azure Portalon, az Azure CLI paranccsal az storage message get vagy az Azure Storage Explorerrel. A mintaadattár tartalmaz egy szkriptet (test.cmd és test.sh), amely kódot kér le az alkalmazásvégpontról, majd ellenőrzi az üzenetsort. Létezik egy szkript is, amellyel törölheti az üzenetsort a az storage message clear paranccsal.

Az ebben a példában szereplő alkalmazáshoz hasonló alkalmazásoknak általában van egy másik folyamata, amely aszinkron módon lekéri az üzeneteket az üzenetsorból további feldolgozás céljából. Ahogy korábban említettük, az API-végpont által generált válasz az alkalmazás más részein is használható kéttényezős felhasználói hitelesítéssel. Ebben az esetben az alkalmazásnak érvénytelenítenie kell a kódot egy bizonyos idő elteltével, például 10 perc elteltével. Ennek a feladatnak egy egyszerű módja az érvényes kétfaktoros hitelesítési kódokból álló tábla fenntartása, amelyet a felhasználói bejelentkezési eljárás használ. Az alkalmazás ezután egy egyszerű üzenetsor-figyelő folyamattal rendelkezik a következő logikával (pszeudokódban):

pull a message from the queue and retrieve the code.

if (code is already in the table):
    remove the code from the table, thereby invalidating it
else:
    add the code to the table, making it valid
    call queue_client.send_message(code, visibility_timeout=600)

Ez a pszeudokód a send_message metódus opcionális visibility_timeout paraméterét használja, amely megadja, hogy hány másodpercig láthatóvá válik az üzenet az üzenetsorban. Mivel az alapértelmezett időtúllépés nulla, az API-végpont által eredetileg írt üzenetek azonnal láthatók lesznek az üzenetsor-figyelési folyamat számára. Ennek eredményeképpen a folyamat azonnal az érvényes kódtáblában tárolja őket. A folyamat az időtúllépéssel ismét várólistára állítja ugyanazt az üzenetet, így 10 perccel később ismét megkapja a kódot, és ekkor eltávolítja azt a táblából.

A fő alkalmazás API-végpontjának implementálása az Azure Functionsben

A cikkben korábban bemutatott kód a Flask webes keretrendszer használatával hozza létre az API-végpontját. Mivel a Flasknak webkiszolgálóval kell futnia, az ilyen kódot üzembe kell helyezni az Azure App Service-ben vagy egy virtuális gépen.

Alternatív üzembe helyezési lehetőség az Azure Functions kiszolgáló nélküli környezete. Ebben az esetben az összes indítási kód és az API-végpontkód ugyanabban a függvényben található, amely egy HTTP-eseményindítóhoz van kötve. Az App Service-hez hasonlóan függvényalkalmazás beállításaival környezeti változókat hozhat létre a kódhoz.

A megvalósítás egyik egyszerűbb része a Queue Storage hitelesítése. Ahelyett, hogy egy QueueClient objektumot szerez be az üzenetsor URL-címével és egy hitelesítési objektummal, létrehoz egy üzenetsor-tároló kötést a függvényhez. A kötés kezeli az összes hitelesítést a színfalak mögött. Ilyen kötés esetén a függvény paraméterként egy használatra kész ügyfélobjektumot kap. További információ és példakód: Azure Functions csatlakoztatása az Azure Queue Storage.

Következő lépések

Ebből az oktatóanyagból megismerhette, hogyan hitelesíthetők az alkalmazások más Azure-szolgáltatásokkal felügyelt identitással, és hogyan tárolhatják az alkalmazások az Azure Key Vaultot a külső API-khoz szükséges titkos kulcsok tárolására.

Az Azure Key Vault és az Azure Storage esetében itt bemutatott minta az összes többi Azure-szolgáltatásra vonatkozik. A legfontosabb lépés, hogy a megfelelő szerepkört rendelje hozzá az alkalmazáshoz az adott szolgáltatás oldalán az Azure Portalon vagy az Azure CLI-n keresztül. (Lásd: Azure-szerepkörök hozzárendelése). Ellenőrizze a szolgáltatás dokumentációját, hogy konfigurálnia kell-e más hozzáférési szabályzatokat.

Ne feledje, hogy ugyanazokat a szerepköröket és hozzáférési szabályzatokat kell hozzárendelnie minden olyan szolgáltatásnévhez, amelyet helyi fejlesztéshez használ.

Röviden, az útmutató elvégzése után a tudását bármilyen számú más Azure-szolgáltatásra és bármilyen más külső szolgáltatásra alkalmazhatja.

Az oktatóanyag nem foglalkozik a felhasználók hitelesítésével. Kezdje a felhasználók végponttól végpontig történő hitelesítésével és engedélyezésével az Azure App Service-ben a webalkalmazások ezen területének megismeréséhez.

Lásd még: