REST dan rute fungsi

Selesai

Anda telah membuat API yang luar biasa. Tidak melakukan banyak, tapi ada, dan itu lebih dari yang bisa dikatakan orang yang tidak membuat API saat ini.

Migrasi ke API RESTful

Anda memiliki titik akhir yang disebut CreateProduct, GetProducts, UpdateProduct, dan DeleteProduct. Titik akhir bernama seperti itu mengikuti pola penamaan API tradisional: Tindakan/Sumber Daya.

Pola penamaan Tindakan/Sumber Daya cocok untuk API yang lebih kecil. Ingat, bagaimanapun, bahwa dalam simulasi ini, Tailwind Traders adalah raksasa internet. Products API bisa menjadi sangat berat jika terburu-buru. Misalnya, Anda dapat membayangkan bahwa Anda mungkin memiliki metode yang disebut "GetProductByIdAndQuantityAndDate". Jenis nama metode ini tidak hanya verbose, tetapi juga membuat kode yang menggunakan metode tersebut terlihat berantakan. Nama API yang terlalu panjang juga mempersulit pengembang untuk mencari tahu cara menggunakan API dalam proyek mereka.

Apa yang perlu Anda lakukan adalah membuat API ini bersih dan intuitif. Untuk itu, Anda akan menggunakan pola REST.

Rute Azure Functions dan metode permintaan HTTP

Di Azure Functions, secara default fungsi pemicu HTTP apa pun merespons permintaan GET dan POST. Ini juga mengatur URL fungsi Anda ke nama fungsi yang diawali oleh "/api." Anda akan mengonfigurasi Keduanya untuk berpindah ke pola RESTful pemindahan.

Aplikasi Perusahaan

Definisi HTTP untuk API dalam model pemrograman Azure Functions v4 dalam aplikasi sampel ini ditemukan di ./api/src/index.ts dan mengikuti pola:

const { app } = require('@azure/functions');

app.http('FunctionName',{
    methods: ['GET', 'POST'], 
    authLevel: 'anonymous', 
    route: 'routeName',
    handler: handlerFunction
});

Fungsi handler dipisahkan dari definisi pemicu HTTP. Ini memungkinkan Anda banyak fleksibilitas dalam cara Anda menentukan fungsi Anda. Anda dapat menentukan fungsi handler dalam file terpisah dan mengimpornya ke index.ts dalam file. Format ini akan lebih mudah dipertahankan atau dihasilkan untuk dokumentasi OpenAPI atau Swagger.

Aplikasi yang lebih kecil

Aplikasi yang lebih kecil mungkin lebih baik dilayani dengan mengintegrasikan kode handler langsung ke dalam app panggilan, menggunakan metode aplikasi untuk menentukan metode HTTP. Anda masih dapat memisahkan fungsi handler atau mengintegrasikan kode.

app.get Gunakan metode untuk menentukan metode HTTP dan fungsi handler.

const { app } = require('@azure/functions');

app.get('FunctionName', handlerFunction);

Format alternatif lainnya, ideal untuk aplikasi Fungsi dengan satu fungsi, adalah mengintegrasikan kode handler langsung ke dalam app panggilan, menggunakan metode aplikasi untuk menentukan metode HTTP. Contohnya:

const { app } = require('@azure/functions');

app.get('helloWorld',{
    handler: (request: HttpRequest, context: InvocationContext) => {
        return {
            status: 200,
            body: "Hello World"
        }
    }
}

Parameter rute

Anda juga dapat menggunakan parameter rute untuk menentukan rute yang menerima parameter. Misalnya, kode berikut menentukan rute yang menerima name parameter:

route: "products"

Definisi rute lengkapnya adalah:

app.http('GetProducts', {
    methods: ['GET', 'POST'],
    route: 'products',          // <- route: /api/products
    authLevel: 'anonymous',
    handler: GetProducts
});

Menentukan rute mengubah segalanya setelah bagian api pada URL. Pada file konfigurasi sebelumnya, rute ke fungsi GetProducts sekarang adalah http://localhost:7071/api/products.

Anda dapat meneruskan parameter bersama dengan rute. Parameter mengambil bentuk {parameterName}. Ini berarti bahwa untuk meneruskan parameter yang dipanggil id ke product titik akhir, Anda akan menentukan rute berikut.

route: "products/{id}"

Berbekal pengetahuan baru tentang REST dan cara menyebarkannya di Azure Functions, kini Anda dapat menjadikan API Produk yang berat itu sebagai RESTful. Itulah yang akan Anda lakukan di latihan berikutnya.