Latihan - Membuat fungsi untuk aplikasi Azure Functions
Di unit ini, Anda membuat dan mengonfigurasi fungsi di aplikasi Azure Functions untuk GET
titik akhir , , POST
PUT
, dan DELETE
di aplikasi Node.js Express.
Menambahkan akses data ke fungsi GET
Anda membuat titik akhir API pertama saat membuat aplikasi Azure Functions di unit terakhir. Fungsi ini dijalankan ketika HTTP GET
diminta pada /vacations
. Anda perlu memperbarui kode boilerplate untuk memanggil layanan data untuk mendapatkan liburan.
Buka file functions/src/functions/getVacations.ts.
Buka file server/routes/vacation.routes.ts di jendela terpisah sehingga Anda dapat melihat kedua file berdampingan.
Di getVacations.ts, tambahkan pernyataan impor vacationService.
import { vacationService } from '../services';
Di getVacations.ts, edit
getVacations
fungsi untuk memanggil vacationService.export async function getVacations(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> { context.log(`Http function processed request for url "${request.url}"`); return { jsonBody: vacationService.getVacations() }; // Data access logic within the return object };
Kau bisa berhenti di sana. Itulah satu-satunya kode yang perlu Anda tambahkan ke fungsi untuk mendapatkan liburan. Namun, Anda juga harus memberikan kode untuk menangani kesalahan dan mengembalikan kode status. Perbarui fungsi untuk menggunakan kode berikut.
export async function getVacations(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> { context.log(`Http function processed request for url "${request.url}"`); try { const vacations = vacationService.getVacations(); // Data access logic if (vacations) { return { status: 200, jsonBody: vacations }; } else { return { status: 404, jsonBody: { error: 'No vacations found' } }; } } catch (error: unknown) { const err = error as Error; context.error(`Error listing vacations: ${err.message}`); return { status: 500, jsonBody: { error: 'Failed to list vacations' } }; } };
Mengatur rute Azure Functions
Dalam model pemrograman v4, Anda dapat mengatur rute dengan beberapa cara. Anda dapat meninggalkan definisi rute dengan handler rute dalam satu file. Ini baik-baik saja untuk aplikasi dengan satu titik akhir. Sebagai pengembang di Tailwind Traders, Anda tahu aplikasi ini akan tumbuh ke banyak API yang perlu diatur.
Untuk memulai organisasi tersebut, buat file baru
./functions/src/index.ts
untuk mengambil definisi rute.Tambahkan dependensi untuk aplikasi yang disediakan dari
@azure/functions
paket.import { app } from '@azure/functions';
Tambahkan dependensi untuk fungsi getVacations dari
./functions/getVacations
file.import { getVacations } from `./functions/getVacations`;
Pindahkan definisi rute dari
./functions/getVacations
ke file index.ts . Perbarui array properti metode keGET
.app.http('getVacations', { methods: ['GET'], route: 'vacations', authLevel: 'anonymous', handler: getVacations });
Penamaan fungsi dan handler
Nama getVacations
ini digunakan sebagai parameter pertama ke app.http dan sebagai properti di parameter kedua. Ini mungkin membingungkan dan Anda mungkin menginginkan aturan penamaan yang berbeda di organisasi atau tim Anda, tergantung pada bagaimana nama tersebut digunakan.
- Parameter pertama - nama sebagai string: Nilai untuk parameter pertama adalah nama fungsi seperti yang akan muncul di portal Azure. Nama-nama tersebut tercantum secara alfanumerik di portal, jadi Anda mungkin ingin menggunakan konvensi penamaan yang mengelompokkan fungsi serupa bersama-sama berdasarkan tujuan, seperti
vacationGet
atau dengan metode, sepertigetVacation
. Anda juga dapat memilih kasus yang berbeda seperti snake_case, kebab-case, atau camelCase. - Parameter kedua - fungsi handler: Nilai untuk parameter kedua adalah nama handler fungsi seperti yang diimpor dan digunakan dalam kode. Nama ini harus deskriptif dan cocok dengan tujuan fungsi. Ini dapat sesuai dengan konvensi penamaan yang sudah Anda miliki untuk fungsi di basis kode Anda dan dapat diberlakukan dengan alat kesamaan kode umum.
Membuat fungsi yang tersisa
Ada empat titik akhir dalam aplikasi Node.js Express, dan Anda baru saja membuat fungsi untuk GET
titik akhir. Sekarang buat fungsi untuk titik akhir rute yang tersisa.
Metode | Nama pemicu HTTP | Rute |
---|---|---|
POST |
postVacation |
vacations |
PUT |
updateVacation |
vacations/{id} |
DELETE |
deleteVacation |
vacations/{id} |
Sementara rute GET dan POST sama. PUT
Rute dan DELETE
menggunakan parameter untuk mengidentifikasi liburan mana yang akan digunakan.
Membuat fungsi HTTP POST
POST
Buat fungsi yang menangani penambahan liburan.
Di Visual Studio Code, buka palet perintah dengan Ctrl + Shift +P dan ketik
Azure Functions: Create Function
dan tekan Enter.Pilih Pemicu HTTP sebagai jenis, dan postVacation sebagai nama.
Tambahkan pernyataan impor vacationService ke file.
import { vacationService } from '../services';
Ganti fungsi boilerplate
postVacation
dengan kode berikut untuk akses data dan penanganan kesalahan.export async function postVacation(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> { context.log(`HTTP function processed request for URL: "${request.url}"`); try { const vacation = await request.json() as Vacation; // Validate the vacation object if (!vacation || typeof vacation !== 'object' || !vacation.name || !vacation.description) { return { status: 400, jsonBody: { error: 'Invalid or missing vacation data.' } }; } // Data access logic const newVacation = vacationService.addVacation(vacation); // Successfully added the vacation return { status: 201, jsonBody: newVacation }; } catch (error: unknown) { const err = error as Error; context.error(`Error create vacation: ${err.message}`); return { status: 500, jsonBody: { error: 'Failed to create vacation' } }; } }
Untuk membaca data liburan masuk, Anda menggunakan metode .
request.json()
Metode ini mengembalikan janji yang diselesaikan ke data JSON dalam isi permintaan. Anda kemudian menggunakanawait
kata kunci untuk menunggu janji diselesaikan. Sintaksas Vacation
adalah pernyataan jenis yang memberi tahu TypeScript untuk memperlakukan hasilnya sebagaiVacation
objek.const vacation = await request.json() as Vacation;
Pindahkan definisi rute dari file postVacation ke file index.ts . Perbarui array properti metode ke
POST
.app.http('post-vacation', { methods: ['POST'], route: 'vacations', authLevel: 'anonymous', handler: postVacation });
Membuat fungsi HTTP PUT
PUT
Buat fungsi yang menangani penambahan liburan.
Di Visual Studio Code, buka palet perintah dengan Ctrl + Shift + P dan ketik
Azure Functions: Create Function
dan tekan Enter.Pilih Pemicu HTTP sebagai jenis, dan updateVacation sebagai nama.
Tambahkan pernyataan impor vacationService ke file.
import { vacationService } from '../services';
Ganti fungsi boilerplate
updateVacation
dengan kode berikut untuk akses data dan penanganan kesalahan.export async function updateVacation(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> { try { const id = request.params.id; const { name, description } = await request.json() as Vacation; // Data access logic const updatedVacation = vacationService.updateVacation({ id, name, description }); if (updatedVacation !== undefined) { return { status: 200, jsonBody: { updatedVacation } }; } else { return { status: 404, jsonBody: { error: `Vacation with ID ${id} not found` } }; } } catch (error: unknown) { const err = error as Error; context.error(`Error updating vacation: ${err.message}`); return { status: 500, jsonBody: { error: 'Failed to update vacation' } }; } };
Properti
request.params.id
digunakan untuk mendapatkan ID liburan dari URL. Metoderequest.json()
ini digunakan untuk mendapatkan data liburan dari isi permintaan. Sintaksas Vacation
adalah pernyataan jenis yang memberi tahu TypeScript untuk memperlakukan hasilnya sebagaiVacation
objek.Pindahkan definisi rute dari file putVacation ke file index.ts . Perbarui array properti metode ke
PUT
.app.http('updateVacation', { methods: ['PUT'], route: 'vacations/{id}', authLevel: 'anonymous', handler: updateVacation });
Membuat fungsi HTTP DELETE
DELETE
Buat fungsi yang menangani penambahan liburan.
Di Visual Studio Code, buka palet perintah dengan Ctrl + Shift + P dan ketik
Azure Functions: Create Function
dan tekan Enter.Pilih Pemicu HTTP sebagai jenis, dan deleteVacation sebagai nama.
Tambahkan vacationService import ke file.
import { vacationService } from '../services';
Ganti fungsi boilerplate
deleteVacation
dengan kode berikut untuk akses data dan penanganan kesalahan.export async function deleteVacation(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> { context.log(`Http function processed request for url "${request.url}"`); try { const id = request.params.id; if (!id) { return { status: 400, jsonBody: { error: 'ID parameter is required' } }; } const deletedVacation = vacationService.deleteVacation(id); if (deletedVacation) { return { status: 204, jsonBody: { deleteVacation } }; } else { return { status: 404, jsonBody: { error: `Vacation with ID ${id} not found` } }; } } catch (error: unknown) { const err = error as Error; context.error(`Error deleting vacation: ${err.message}`); return { status: 500, jsonBody: { error: 'Failed to delete vacation' } }; } };
Properti
request.params.id
digunakan untuk mendapatkan ID liburan dari URL.Pindahkan definisi rute dari file deleteVacation ke file index.ts . Perbarui array properti metode ke
DELETE
.app.http('deleteVacation', { methods: ['DELETE'], route: 'vacations/{id}', authLevel: 'anonymous', handler: deleteVacation });
Buka unit berikutnya untuk meninjau aplikasi Azure Functions yang Anda buat.