Bölüm 7: Ana uygulama API'si uç noktası

Önceki bölüm: Ana uygulama başlangıç kodu

API için /api/v1/getcode uygulama URL yolu, alfasayısal kod ve zaman damgası içeren bir JSON yanıtı oluşturur.

İlk olarak, @app.route dekoratörü Flask'e get_code işlevinin /api/v1/getcode URL'sine yönelik istekleri işlediğini söyler.

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

Ardından uygulama, URL'si number_urliçinde bulunan üçüncü taraf API'sini çağırır ve üst bilgiye, anahtar kasasından aldığı erişim anahtarını ekler.

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

Örnek üçüncü taraf API, Azure İşlevleri'nin sunucusuz ortamına dağıtılır. Üst bilgideki x-functions-key özelliği, Azure İşlevleri'nin bir erişim anahtarının üst bilgide görünmesini nasıl beklediğidir. Daha fazla bilgi için bkz. Azure İşlevleri HTTP tetikleyicisi - Yetkilendirme anahtarları. API'yi çağırma herhangi bir nedenle başarısız olursa kod bir hata iletisi ve durum kodu döndürür.

API çağrısının başarılı olduğunu ve sayısal bir değer döndürdüğünü varsayarsak, uygulama bu sayıyı ve bazı rastgele karakterleri (kendi random_char işlevini kullanarak) kullanarak daha karmaşık bir kod oluşturur.

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()) }

Buradaki code değişkeni, kod değerini ve zaman damgasını içeren uygulamanın API'sinin tam JSON yanıtını içerir. Örnek bir yanıt {"code":"ojE-161-pTv","timestamp":"2020-04-15 16:54:48.816549"}olabilir.

Ancak bu yanıtı döndürmeden önce Kuyruk istemcisinin send_message yöntemini kullanarak depolama kuyruğuna bir ileti yazar:

queue_client.send_message(code)

return jsonify(code)

Kuyruk iletilerini işleme

Kuyrukta depolanan iletiler Azure portalı üzerinden, Azure CLI komutuyla az storage message get veya Azure Depolama Gezgini ile görüntülenebilir ve yönetilebilir. Örnek depo, uygulama uç noktasından kod istemek ve ardından ileti kuyruğuna bakmak için bir betik (test.cmd ve test.sh) içerir. az storage message clear komutunu kullanarak kuyruğu temizlemeye ilişkin bir betik de vardır.

Normalde, bu örnekteki gibi bir uygulama, daha fazla işlem için kuyruktan iletileri zaman uyumsuz olarak çeken başka bir işleme sahip olur. Daha önce belirtildiği gibi, bu API uç noktası tarafından oluşturulan yanıt, iki öğeli kullanıcı kimlik doğrulaması ile uygulamanın başka bir yerinde kullanılabilir. Bu durumda, uygulamanın kodu belirli bir süre sonra (örneğin 10 dakika) geçersiz kılması gerekir. Bu görevi gerçekleştirmenin basit bir yolu, kullanıcı oturum açma yordamı tarafından kullanılan geçerli iki öğeli kimlik doğrulama kodlarını içeren bir tablo tutmaktır. Daha sonra uygulama aşağıdaki mantıkla (sahte kodda) basit bir kuyruk izleme işlemine sahip olur:

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)

Bu sahte kod, send_message yönteminin isteğe bağlı visibility_timeout parametresini kullanır ve bu parametre, iletinin kuyrukta görünmeden önce geçmesi gereken saniye sayısını belirtir. Varsayılan zaman aşımı sıfır olduğundan başlangıçta API uç noktası tarafından yazılan iletiler kuyruk izleme işlemine hemen görünür hale gelir. Sonuç olarak, bu işlem bunları hemen geçerli kod tablosunda depolar. İşlem, zaman aşımıyla aynı iletiyi yeniden kuyruğa alır, böylece kodu 10 dakika sonra yeniden alır ve bu noktada tablodan kaldırır.

Azure İşlevleri'nde ana uygulama API'si uç noktasını uygulama

Bu makalede daha önce gösterilen kod, API uç noktasını oluşturmak için Flask web çerçevesini kullanır. Flask'in bir web sunucusuyla çalışması gerektiğinden, bu tür kodun Azure App Service'e veya bir sanal makineye dağıtılması gerekir.

Alternatif dağıtım seçeneği, Azure İşlevleri'nin sunucusuz ortamıdır. Bu durumda, tüm başlangıç kodu ve API uç noktası kodu, bir HTTP tetikleyicisine bağlı olan aynı işlev içinde yer alır. App Service'de olduğu gibi, kodunuz için ortam değişkenleri oluşturmak işlev uygulaması ayarlarını kullanırsınız.

Uygulamanın daha kolay hale gelen bir parçası da Kuyruk Depolama ile kimlik doğrulamasıdır. Kuyruğun URL'sini ve kimlik bilgisi nesnesini kullanarak bir QueueClient nesnesi almak yerine, işlev için bir kuyruk depolama bağlaması oluşturursunuz. Bağlama, arka planda tüm kimlik doğrulamasını işler. Böyle bir bağlama ile işlevinize parametre olarak kullanıma hazır bir istemci nesnesi verilir. Daha fazla bilgi ve örnek kod için bkz. Azure İşlevleri Azure Kuyruk Depolama'ya Bağlama.

Sonraki adımlar

Bu öğreticide, uygulamaların yönetilen kimlik kullanarak diğer Azure hizmetleriyle kimlik doğrulamasını ve uygulamaların üçüncü taraf API'ler için gerekli diğer gizli dizileri depolamak için Azure Key Vault'ı nasıl kullanabileceğini öğrendiniz.

Burada Azure Key Vault ve Azure Depolama ile aynı desen diğer tüm Azure hizmetleri için geçerlidir. Önemli adım, azure portalında veya Azure CLI aracılığıyla ilgili hizmetin sayfasında uygulama için doğru rolü atamanızdır. (Bkz. Azure rollerini atamak). Diğer erişim ilkelerini yapılandırmanız gerekip gerekmediğini görmek için hizmet belgelerini gözden geçirmeyi unutmayın.

Yerel geliştirme için kullandığınız tüm hizmet sorumlularına aynı rolleri ve erişim ilkelerini atamanız gerektiğini unutmayın.

Kısacası, bu kılavuzu tamamladıktan sonra, bilgilerinizi istediğiniz sayıda diğer Azure hizmetlerine ve herhangi bir sayıda diğer dış hizmete uygulayabilirsiniz.

Bu öğreticide ele alınmayan konulardan biri kullanıcıların kimlik doğrulamasıdır. Web uygulamalarının bu alanını keşfetmek için Uçtan uca kimlik doğrulaması ve yetkilendirme ile başlayın, ardından Azure App Service'de devam edin.

Ayrıca bkz.