Bagikan melalui


Bagian 7: Titik akhir API aplikasi utama

Bagian sebelumnya: Kode startup aplikasi utama

Jalur URL aplikasi /api/v1/getcode untuk API menghasilkan respons JSON yang berisi kode alfanumerik dan tanda waktu.

Pertama, dekorator @app.route memberi tahu Flask bahwa fungsi get_code menangani permintaan ke URL /api/v1/getcode.

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

Selanjutnya, aplikasi memanggil API pihak ketiga, URL yang ada di number_url, menyediakan kunci akses yang diambilnya dari brankas kunci di header.

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

Contoh API pihak ketiga disebarkan ke lingkungan tanpa server Azure Functions. Properti x-functions-key di header adalah bagaimana Azure Functions mengharapkan kunci akses muncul di header. Untuk informasi selengkapnya, lihat pemicu Azure Functions HTTP - Kunci otorisasi. Jika memanggil API gagal karena alasan apa pun, kode mengembalikan pesan kesalahan dan kode status.

Dengan asumsi bahwa panggilan API berhasil dan mengembalikan nilai numerik, aplikasi kemudian membuat kode yang lebih kompleks menggunakan angka tersebut ditambah beberapa karakter acak (menggunakan fungsi random_char sendiri).

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

Variabel code di sini berisi respons JSON lengkap untuk API aplikasi, yang mencakup nilai kode dan tanda waktu. Contoh respons adalah {"code":"ojE-161-pTv","timestamp":"2020-04-15 16:54:48.816549"}.

Namun, sebelum mengembalikan respons tersebut, ia menulis pesan dalam antrean penyimpanan menggunakan metode send_message klien Queue.

queue_client.send_message(code)

return jsonify(code)

Memproses pesan antrean

Pesan yang disimpan dalam antrean dapat dilihat dan dikelola melalui portal Microsoft Azure, dengan perintah az storage message get Azure CLI atau dengan Azure Storage Explorer. Repositori sampel menyertakan skrip (test.cmd dan test.sh) untuk meminta kode dari titik akhir aplikasi lalu periksa antrean pesan. Ada juga skrip untuk menghapus antrean menggunakan perintah az storage message clear.

Biasanya, aplikasi seperti yang ada dalam contoh ini akan memiliki proses lain yang secara asinkron menarik pesan dari antrean untuk pemrosesan lebih lanjut. Seperti disebutkan sebelumnya, respons yang dihasilkan oleh titik akhir API ini mungkin digunakan di tempat lain di aplikasi dengan autentikasi pengguna dua faktor. Dalam hal ini, aplikasi harus membatalkan kode setelah jangka waktu tertentu, misalnya 10 menit. Cara sederhana untuk melakukan tugas ini adalah dengan mempertahankan tabel kode autentikasi dua faktor yang valid, yang digunakan oleh prosedur masuk penggunanya. Aplikasi kemudian akan memiliki proses pengamatan antrean sederhana dengan logika berikut (dalam pseudo-code):

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)

Kode semu ini menggunakan parameter send_message opsional metode visibility_timeout, yang menentukan jumlah detik sebelum pesan terlihat dalam antrean. Karena batas waktu default adalah nol, pesan yang awalnya ditulis oleh titik akhir API langsung terlihat oleh proses yang memantau antrean. Akibatnya, proses tersebut menyimpannya dalam tabel kode yang valid segera. Proses tersebut mengantrekan kembali pesan yang sama dengan batas waktu, agar kode tersebut diterima lagi 10 menit kemudian, pada saat itu kode tersebut dihapus dari tabel.

Menerapkan titik akhir API aplikasi utama di Azure Functions

Kode yang ditampilkan sebelumnya dalam artikel ini menggunakan kerangka kerja web Flask untuk membuat titik akhir API-nya. Karena Flask perlu berjalan dengan server web, kode tersebut harus disebarkan ke Azure App Service atau ke komputer virtual.

Opsi penyebaran alternatif adalah lingkungan tanpa server Azure Functions. Dalam hal ini, semua kode startup dan kode titik akhir API akan terkandung dalam fungsi yang sama yang terikat ke pemicu HTTP. Seperti halnya App Service, Anda menggunakan pengaturan aplikasi fungsi untuk membuat variabel lingkungan untuk kode Anda.

Salah satu implementasi yang menjadi lebih mudah adalah mengautentikasi dengan Queue Storage. Alih-alih mendapatkan objek QueueClient dengan menggunakan URL antrean dan objek kredensial, Anda membuat pengikatan penyimpanan antrean untuk fungsi tersebut. Pengikatan menangani semua autentikasi di belakang layar. Dengan pengikatan seperti itu, fungsi Anda diberi objek klien yang siap digunakan sebagai parameter. Untuk informasi selengkapnya dan contoh kode, lihat Menyambungkan Azure Functions ke Azure Queue Storage.

Langkah berikutnya

Melalui tutorial ini, Anda mempelajari cara aplikasi mengautentikasi dengan layanan Azure lainnya menggunakan identitas terkelola, dan bagaimana aplikasi dapat menggunakan Azure Key Vault untuk menyimpan rahasia lain yang diperlukan untuk API pihak ketiga.

Pola yang sama yang ditunjukkan di sini dengan Azure Key Vault dan Azure Storage berlaku dengan semua layanan Azure lainnya. Langkah pentingnya adalah Anda menetapkan peran yang benar untuk aplikasi dalam halaman layanan tersebut di portal Microsoft Azure, atau melalui Azure CLI. (Lihat Cara menetapkan peran Azure). Pastikan untuk memeriksa dokumentasi layanan untuk melihat apakah Anda perlu mengonfigurasi kebijakan akses lainnya.

Selalu ingat bahwa Anda perlu menetapkan peran dan kebijakan akses yang sama ke perwakilan layanan apa pun yang Anda gunakan untuk pengembangan lokal.

Singkatnya, setelah menyelesaikan panduan ini, Anda dapat menerapkan pengetahuan Anda ke sejumlah layanan Azure lainnya dan sejumlah layanan eksternal lainnya.

Salah satu subjek yang belum kami sentuh dalam tutorial ini adalah autentikasi pengguna . Untuk menjelajahi area ini untuk aplikasi web, mulailah dengan Mengautentikasi dan mengotorisasi pengguna secara end-to-end di Azure App Service.

Lihat juga