Bagikan melalui


Buat API tanpa server di Visual Studio menggunakan integrasi Azure Functions dan API Management

REST API sering dijelaskan menggunakan file definisi OpenAPI (sebelumnya dikenal sebagai Swagger). File ini berisi informasi tentang operasi yang tersedia dalam API dan cara data permintaan dan respons untuk API seharusnya disusun.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Membuat proyek kode di Visual Studio
  • Menginstal ekstensi OpenAPI
  • Menambahkan titik akhir pemicu HTTP, yang mencakup definisi OpenAPI
  • Tes API fungsi secara lokal menggunakan fungsionalitas OpenAPI bawaan
  • Menerbitkan proyek ke aplikasi fungsi di Azure
  • Mengaktifkan integrasi API Management
  • Unduh file definisi OpenAPI

Fungsi tanpa server yang Anda buat menyediakan API yang memungkinkan Anda menentukan apakah perbaikan darurat pada turbin angin hemat biaya. Karena Anda membuat aplikasi fungsi dan instans API Management dalam tingkat konsumsi, biaya Anda untuk menyelesaikan tutorial ini minimal.

Prasyarat

Membuat proyek kode

Templat proyek Azure Functions di Visual Studio membuat proyek yang bisa Anda terbitkan ke aplikasi fungsi di Azure. Anda juga akan membuat fungsi yang dipicu HTTP dari templat yang mendukung pembuatan file definisi OpenAPI (sebelumnya file Swagger).

  1. Dari menu Visual Studio, pilih File>Proyek>Baru.

  2. Di Buat proyek baru, masukkan fungsi di kotak pencarian, pilih templat Azure Functions, lalu pilih Berikutnya.

  3. Di Konfigurasikan proyek baru Anda, masukkan nama Proyek untuk proyek seperti TurbineRepair, lalu pilih Buat.

  4. Untuk pengaturan Buat aplikasi Azure Functions baru, pilih salah satu opsi ini untuk pekerja Functions, di mana opsi yang Anda pilih bergantung pada model proses yang Anda pilih:

    .NET 8.0 Terisolasi (Dukungan Jangka Panjang): Fungsi C# Anda berjalan dalam model pekerja terisolasi, yang direkomendasikan. Untuk informasi selengkapnya, lihat panduan model pekerja yang terisolasi.

  5. Untuk opsi lainnya, gunakan nilai dalam tabel berikut:

    Pengaturan Nilai Deskripsi
    Templat fungsi Kosong Ini membuat proyek tanpa pemicu, yang memberi Anda lebih banyak kontrol atas nama fungsi yang dipicu HTTP saat Anda menambahkannya nanti.
    Gunakan Azurite untuk akun penyimpanan runtime bahasa umum (AzureWebJobsStorage) Dipilih Anda dapat menggunakan emulator untuk pengembangan lokal fungsi pemicu HTTP. Karena aplikasi fungsi di Azure memerlukan akun penyimpanan, aplikasi ditetapkan atau dibuat saat Anda memublikasikan proyek Anda ke Azure.
    Tingkat otorisasi Fungsi Saat berjalan di Azure, klien harus menyediakan kunci saat mengakses titik akhir. Untuk informasi selengkapnya, lihat Tingkat otorisasi.
  6. Pilih Buat untuk membuat proyek fungsi.

Selanjutnya, Anda memperbarui proyek dengan menginstal ekstensi OpenAPI untuk Azure Functions, yang memungkinkan penemuan titik akhir API di aplikasi Anda.

Menginstal ekstensi OpenAPI

Untuk menginstal ekstensi OpenAPI:

  1. Dari menu Alat, pilih Pengelola Paket NuGet>Konsol Pengelola Paket.

  2. Di konsol, jalankan perintah Install-Package berikut untuk menginstal ekstensi OpenAPI:

    NuGet\Install-Package Microsoft.Azure.Functions.Worker.Extensions.OpenApi -Version 1.5.1
    

    Anda mungkin perlu memperbarui versi tertentu, berdasarkan versi .NET Anda.

Sekarang, Anda dapat menambahkan fungsi titik akhir HTTP Anda.

Menambahkan fungsi titik akhir HTTP

Dalam pustaka kelas C#, pengikatan yang digunakan oleh fungsi ditentukan dengan menerapkan atribut dalam kode. Untuk membuat fungsi dengan pemicu HTTP:

  1. Di Penjelajah Solusi, klik kanan simpul proyek Anda dan pilih Tambahkan>Fungsi Azure Baru.

  2. Masukkan Turbine.cs untuk kelas, lalu pilih Tambahkan.

  3. Pilih templat pemicu Http, atur Tingkat Otorisasi ke Fungsi, lalu pilih Tambahkan. File kode Turbine.cs ditambahkan ke proyek Anda yang menentukan titik akhir fungsi baru dengan pemicu HTTP.

Sekarang Anda dapat mengganti kode templat pemicu HTTP dengan kode yang mengimplementasikan titik akhir fungsi Turbin, bersama dengan atribut yang menggunakan OpenAPI untuk menentukan titik akhir.

Memperbarui kode fungsi

Fungsi ini menggunakan pemicu HTTP yang mengambil dua parameter:

Nama Parameter Deskripsi
hours Perkiraan waktu untuk melakukan perbaikan turbin, hingga satu jam penuh terdekat.
kapasitas Kapasitas turbin, dalam kilowatt.

Fungsi ini kemudian menghitung jumlah biaya perbaikan, dan jumlah pendapatan yang bisa dibuat turbin dalam periode 24 jam. Parameter disediakan baik dalam string kueri atau dalam muatan permintaan POST.

Dalam file proyek Turbine.cs, ganti konten kelas yang dihasilkan dari templat pemicu HTTP dengan kode berikut, yang bergantung pada model proses Anda:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Attributes;
using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Enums;
using Microsoft.Extensions.Logging;
using Microsoft.OpenApi.Models;
using Newtonsoft.Json;
using System.Net;

namespace TurbineRepair
{
    public class Turbine
    {
        const double revenuePerkW = 0.12;
        const double technicianCost = 250;
        const double turbineCost = 100;

        private readonly ILogger<Turbine> _logger;

        public Turbine(ILogger<Turbine> logger)
        {
            _logger = logger;
        }

        [Function("TurbineRepair")]
        [OpenApiOperation(operationId: "Run")]
        [OpenApiSecurity("function_key", SecuritySchemeType.ApiKey, Name = "code", In = OpenApiSecurityLocationType.Query)]
        [OpenApiRequestBody("application/json", typeof(RequestBodyModel),
            Description = "JSON request body containing { hours, capacity}")]
        [OpenApiResponseWithBody(statusCode: HttpStatusCode.OK, contentType: "application/json", bodyType: typeof(string),
            Description = "The OK response message containing a JSON result.")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            // Get request body data.
            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic? data = JsonConvert.DeserializeObject(requestBody);
            int? capacity = data?.capacity;
            int? hours = data?.hours;

            // Return bad request if capacity or hours are not passed in
            if (capacity == null || hours == null)
            {
                return new BadRequestObjectResult("Please pass capacity and hours in the request body");
            }
            // Formulas to calculate revenue and cost
            double? revenueOpportunity = capacity * revenuePerkW * 24;
            double? costToFix = hours * technicianCost + turbineCost;
            string repairTurbine;

            if (revenueOpportunity > costToFix)
            {
                repairTurbine = "Yes";
            }
            else
            {
                repairTurbine = "No";
            };

            return new OkObjectResult(new
            {
                message = repairTurbine,
                revenueOpportunity = "$" + revenueOpportunity,
                costToFix = "$" + costToFix
            });
        }
        public class RequestBodyModel
        {
            public int Hours { get; set; }
            public int Capacity { get; set; }
        }
    }
}

Kode fungsi ini mengembalikan pesan Yes atau No untuk menunjukkan apakah perbaikan darurat hemat biaya. Ini juga mengembalikan peluang pendapatan yang diwakili turbin dan biaya untuk memperbaiki turbin.

Jalankan dan verifikasi API secara lokal

Saat Anda menjalankan fungsi, titik akhir OpenAPI memudahkan untuk mencoba fungsi secara lokal menggunakan halaman yang dihasilkan. Anda tidak perlu menyediakan tombol akses fungsi saat berjalan secara lokal.

  1. Tekan F5 untuk memulai proyek. Saat runtime Functions dimulai secara lokal, sekumpulan titik akhir OpenAPI dan Swagger diperlihatkan dalam output, bersama dengan titik akhir fungsi.

  2. Di browser Anda, buka titik akhir RenderSwaggerUI, yang seharusnya terlihat seperti http://localhost:7071/api/swagger/ui. Halaman dirender, berdasarkan definisi OpenAPI Anda.

  3. Pilih POST>Cobalah, masukkan nilai untuk hours dan capacity baik sebagai parameter kueri atau di isi permintaan JSON, dan pilih Jalankan.

    Swagger UI untuk menguji TurbineRepair API

  4. Saat Anda memasukkan nilai bilangan bulat seperti 6 untuk hours dan 2500 untuk capacity, Anda mendapatkan respons JSON yang terlihat seperti contoh berikut:

    Respons data JSON dari fungsi TurbineRepair.

Sekarang Anda memiliki fungsi yang menentukan efektivitas biaya perbaikan darurat. Selanjutnya, Anda menerbitkan definisi proyek dan API ke Azure.

Menerbitkan proyek ke Azure

Anda harus memiliki aplikasi fungsi di langganan Azure Anda sebelum dapat menerbitkan proyek. Penerbitan Visual Studio membuat aplikasi fungsi saat pertama kali menerbitkan proyek Anda. Ini juga dapat membuat instans API Management yang terintegrasi dengan aplikasi fungsi Anda untuk mengekspos API TurbineRepair.

  1. Pada Penjelajah Solusi, klik kanan proyek dan pilih Terbitkan dan pada Target, pilih Azure lalu Berikutnya.

  2. Untuk Target tertentu, pilih Azure Function App (Windows) untuk membuat aplikasi fungsi yang berjalan di Windows, lalu pilih Berikutnya.

  3. Di Instans Function, pilih + Buat Azure Function baru....

    Buat instans aplikasi fungsi baru

  4. Buat instans baru menggunakan nilai yang ditentukan dalam tabel berikut:

    Pengaturan Nilai Deskripsi
    Nama Nama unik secara global Nama yang secara unik mengidentifikasi aplikasi fungsi baru Anda. Terima nama ini atau masukkan nama baru. Karakter yang valid adalah: a-z, 0-9, dan -.
    Langganan Langganan Anda Langganan Azure untuk digunakan. Terima langganan ini atau pilih yang baru dari daftar menurun.
    Grup sumber daya Nama grup sumber daya Anda Grup sumber daya untuk membuat aplikasi fungsi Anda. Pilih grup sumber daya yang ada dari daftar menurun atau pilih Baru untuk membuat grup sumber daya baru.
    Jenis Paket Consumption Saat Anda menerbitkan proyek Anda ke aplikasi fungsi yang berjalan dalam Paket konsumsi, Anda hanya membayar untuk menjalankan aplikasi fungsi Anda. Paket hosting lain dikenakan biaya yang lebih tinggi.
    Location Lokasi layanan Pilih Lokasi di wilayah dekat Anda atau dekat layanan lain yang diakses fungsi Anda.
    Azure Storage Akun penyimpanan serba guna Akun Azure Storage diperlukan oleh runtime Fungsi. Pilih Baru untuk mengonfigurasi akun penyimpanan serba guna. Anda juga dapat memilih akun yang sudah ada yang memenuhi persyaratan akun penyimpanan.

    Membuat aplikasi fungsi baru di Azure dengan Storage

  5. Pilih Buat untuk membuat aplikasi fungsi dan sumber daya terkait di Azure. Status pembuatan sumber daya ditampilkan di kiri bawah jendela.

  6. Kembali ke Instans fungsi, pastikan Menjalankan dari file paket dicentang. Aplikasi fungsi diterapkan menggunakan Zip Deploy dengan mode Run-From-Package diaktifkan. Metode penyebaran ini direkomendasikan untuk proyek fungsi Anda, karena menghasilkan performa yang lebih baik.

  7. Pilih Berikutnya, dan di halaman API Management, juga pilih + Buat API Management API.

  8. Buat API di API Management dengan menggunakan nilai pada tabel berikut:

    Pengaturan Nilai Deskripsi
    Nama API TurbineRepair Nama untuk API.
    Nama langganan Langganan Anda Langganan Azure untuk digunakan. Terima langganan ini atau pilih yang baru dari daftar menurun.
    Grup sumber daya Nama grup sumber daya Anda Pilih grup sumber daya yang sama dengan aplikasi fungsi Anda dari daftar drop-down.
    Layanan API Management Instans baru Pilih Baru untuk membuat instans API Management baru di lokasi yang sama di tingkat tanpa server. Pilih OK untuk membuat instans.

    Buat instans API Management dengan API

  9. Pilih Buat untuk membuat instans API Management dengan API TurbineRepair dari integrasi fungsi.

  10. Pilih Selesai dan setelah proses pembuatan profil publikasi selesai, pilih Tutup.

  11. Verifikasi halaman Terbitkan sekarang bertuliskan Siap diterbitkan, lalu pilih Terbitkan untuk menyebarkan paket yang berisi file proyek Anda ke aplikasi fungsi baru Anda di Azure.

    Setelah penyebaran selesai, URL akar aplikasi fungsi di Azure diperlihatkan di tab Terbitkan.

Dapatkan kunci akses fungsi

  1. Di tab Terbitkan, pilih elipsis (...) di samping Hosting dan pilih Buka di portal Microsoft Azure. Aplikasi fungsi yang Anda buat dibuka di portal Microsoft Azure di browser default Anda.

  2. Di bawah Fungsi pada halaman Gambaran Umum, pilih >Turbin lalu pilih Tombol fungsi.

    Dapatkan kunci akses untuk fungsi TurbineRepair

  3. Di bawah Tombol fungsi, pilih ikon salin ke clipboard di samping kunci default . Anda sekarang dapat mengatur kunci ini yang Anda salin di API Management sehingga dapat mengakses titik akhir fungsi.

Konfigurasikan API Management

  1. Di halaman aplikasi fungsi, perluas API dan pilih API Management.

  2. Jika aplikasi fungsi belum tersambung ke instans API Management baru, pilih di bawah API Management, pilih Dokumen API>OpenAPI di Azure Functions, pastikan Impor fungsi dicentang, dan pilih Tautkan API. Pastikan bahwa hanya TurbinRepair yang dipilih untuk diimpor lalu Pilih.

  3. Pilih Buka API Management di bagian atas halaman, dan di instans API Management, perluas API.

  4. Di bawah API>Semua API, pilih Dokumen OpenAPI di Azure Functions>POST Run, lalu di bawah Pemrosesan masuk pilih Tambahkan parameter kueri Set kebijakan.>

  5. Dalam pemrosesan masuk, pilih Atur parameter kueri, ketik code untuk Nama, pilih +Value, tempel di kunci fungsi yang disalin, dan pilih Simpan. API Management menyertakan kunci fungsi saat melewati panggilan ke titik akhir fungsi.

    Berikan kredensial Fungsi ke aturan pemrosesan masuk API

Sekarang setelah kunci fungsi diatur, Anda dapat memanggil turbine titik akhir API untuk memverifikasi bahwa kunci berfungsi saat dihosting di Azure.

Memverifikasi API di Azure

  1. Di API, pilih tab Uji lalu POST Run, masukkan kode berikut di Isi permintaan>Raw, dan pilih Kirim:

    {
        "hours": "6",
        "capacity": "2500"
    }
    

    Halaman uji OpenAPI di API Management API

    Seperti sebelumnya, Anda juga bisa menyediakan nilai yang sama dengan parameter kueri.

  2. Pilih Kirim, lalu lihat respons HTTP untuk memverifikasi hasil yang sama dikembalikan dari API.

Mengunduh definisi OpenAPI

Jika API Anda berfungsi seperti yang diharapkan, Anda dapat mengunduh definisi OpenAPI untuk API baru yang dihosting dari API Management.

    1. Di bawah API, pilih Buka Dokumen API pada Azure Functions, pilih elipsis (...), dan pilih Ekspor.

    Mengunduh definisi OpenAPI

  1. Pilih sarana ekspor API, termasuk file OpenAPI dalam berbagai format. Anda juga dapat mengekspor API dari Azure API Management ke Power Platform.

Membersihkan sumber daya

Di langkah-langkah sebelumnya, Anda membuat sumber daya Azure dalam grup sumber daya. Jika Anda tidak berharap membutuhkan sumber daya ini di masa mendatang, Anda dapat menghapusnya dengan menghapus grup sumber daya.

Pada menu portal Microsoft Azure atau halaman Beranda, pilih Grup sumber daya. Lalu, pada halaman Grup sumber daya, pilih grup yang Anda buat.

Pada halaman myResourceGroup, pastikan sumber daya yang tercantum adalah sumber daya yang ingin Anda hapus.

Pilih Hapus grup sumber daya, ketik nama grup Anda di kotak teks untuk mengonfirmasi, lalu pilih Hapus.

Langkah berikutnya

Anda telah menggunakan Visual Studio 2022 untuk membuat fungsi yang mendokumentasikan sendiri karena Ekstensi OpenAPI dan terintegrasi dengan API Management. Anda sekarang dapat memperbaiki definisi dalam API Management di portal. Anda juga dapat mempelajari lebih lanjut tentang API Management.