Ćwiczenie — tworzenie funkcji dla aplikacji usługi Azure Functions
W tej lekcji utworzysz i skonfigurujesz funkcje w aplikacji usługi Azure Functions dla GET
punktów końcowych , POST
, PUT
i DELETE
w aplikacji Node.js Express.
Dodawanie dostępu do danych do funkcji GET
Pierwszy punkt końcowy interfejsu API został utworzony podczas tworzenia aplikacji usługi Azure Functions w ostatniej lekcji. Ta funkcja jest wykonywana, gdy żądanie HTTP GET
jest wykonywane na ./vacations
Musisz zaktualizować standardowy kod, aby wywołać usługę danych, aby uzyskać urlopy.
Otwórz plik functions/src/functions/getVacations.ts.
Otwórz plik server/routes/vacation.routes.ts w osobnym oknie, aby zobaczyć oba pliki obok siebie.
W getVacations.ts dodaj instrukcję vacationService import.
import { vacationService } from '../services';
W getVacations.ts edytuj
getVacations
funkcję , aby wywołać funkcję 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 };
Możesz się tam zatrzymać. Jest to jedyny kod, który należy dodać do funkcji, aby uzyskać urlopy. Należy jednak również podać kod do obsługi błędów i zwracania kodu stanu. Zaktualizuj funkcję, aby użyć następującego kodu.
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' } }; } };
Organizowanie tras usługi Azure Functions
W modelu programowania w wersji 4 można organizować trasy na kilka sposobów. Definicję trasy można pozostawić z procedurą obsługi tras w jednym pliku. Jest to odpowiednie w przypadku aplikacji z jednym punktem końcowym. Jako deweloper w firmie Tailwind Traders wiesz, że ta aplikacja będzie rozwijać się do wielu interfejsów API, które muszą być zorganizowane.
Aby rozpocząć tę organizację, utwórz nowy
./functions/src/index.ts
plik, aby przechwycić definicje tras.Dodaj zależność dla aplikacji dostarczonej
@azure/functions
z pakietu.import { app } from '@azure/functions';
Dodaj zależność dla funkcji getVacations z
./functions/getVacations
pliku.import { getVacations } from `./functions/getVacations`;
Przenieś definicję trasy z
./functions/getVacations
do pliku index.ts . Zaktualizuj tablicę właściwości metody naGET
.app.http('getVacations', { methods: ['GET'], route: 'vacations', authLevel: 'anonymous', handler: getVacations });
Nazewnictwo funkcji i procedury obsługi
Nazwa getVacations
jest używana zarówno jako pierwszy parametr do app.http , jak i jako właściwość w drugim parametrze. Może to być mylące i może być potrzebne różne reguły nazewnictwa w organizacji lub zespole, w zależności od sposobu użycia nazwy.
- Pierwszy parametr — nazwa jako ciąg: wartość pierwszego parametru to nazwa funkcji, która będzie wyświetlana w witrynie Azure Portal. Te nazwy są wymienione alfanumerycznie w portalu, dlatego warto użyć konwencji nazewnictwa, która grupuje podobne funkcje w celach, takich jak lub według metod, takich jak
vacationGet
getVacation
. Możesz również wybrać inny przypadek, taki jak snake_case, kebab-case lub camelCase. - Drugi parametr — funkcja obsługi: wartość drugiego parametru to nazwa programu obsługi funkcji, która jest importowana i używana w kodzie. Ta nazwa powinna być opisowa i zgodna z celem funkcji. Może ona być zgodna z konwencjami nazewnictwa, które są już dostępne w bazie kodu i może być wymuszana za pomocą typowych narzędzi zgodności kodu.
Tworzenie pozostałych funkcji
W aplikacji Node.js Express znajdują się cztery punkty końcowe i właśnie utworzono funkcję dla punktu końcowego GET
. Teraz utwórz funkcje dla pozostałych punktów końcowych trasy.
Method | Nazwa wyzwalacza HTTP | Marszruta |
---|---|---|
POST |
postVacation |
vacations |
PUT |
updateVacation |
vacations/{id} |
DELETE |
deleteVacation |
vacations/{id} |
Chociaż trasy GET i POST są takie same. Trasy PUT
i DELETE
używają parametru , aby określić, które urlopy mają być używane.
Tworzenie funkcji HTTP POST
POST
Utwórz funkcję, która obsługuje dodawanie urlopu.
W programie Visual Studio Code otwórz paletę poleceń za pomocą klawiszy Ctrl + Shift +P i wpisz
Azure Functions: Create Function
i naciśnij klawisz Enter.Wybierz pozycję Wyzwalacz HTTP jako typ, a jako nazwę wybierz pozycję PostVacation .
Dodaj instrukcję vacationService import do pliku.
import { vacationService } from '../services';
Zastąp funkcję boilerplate
postVacation
następującym kodem umożliwiającym dostęp do danych i obsługę błędów.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' } }; } }
Aby odczytać przychodzące dane urlopowe, użyj
request.json()
metody . Ta metoda zwraca obietnicę, która rozpoznaje dane JSON w treści żądania. Następnie użyj słowa kluczowegoawait
, aby poczekać na rozwiązanie obietnicy. Składniaas Vacation
jest asercją typu, która informuje język TypeScript o traktowaniu wyniku jakoVacation
obiektu.const vacation = await request.json() as Vacation;
Przenieś definicję trasy z pliku postVacation do pliku index.ts . Zaktualizuj tablicę właściwości metody na
POST
.app.http('post-vacation', { methods: ['POST'], route: 'vacations', authLevel: 'anonymous', handler: postVacation });
Tworzenie funkcji HTTP PUT
PUT
Utwórz funkcję, która obsługuje dodawanie urlopu.
W programie Visual Studio Code otwórz paletę poleceń za pomocą klawiszy Ctrl + Shift + P i wpisz
Azure Functions: Create Function
i naciśnij klawisz Enter.Wybierz pozycję Wyzwalacz HTTP jako typ i zaktualizujVacation jako nazwę.
Dodaj instrukcję vacationService import do pliku.
import { vacationService } from '../services';
Zastąp funkcję boilerplate
updateVacation
następującym kodem umożliwiającym dostęp do danych i obsługę błędów.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' } }; } };
Właściwość
request.params.id
służy do pobierania identyfikatora urlopu z adresu URL. Metodarequest.json()
służy do pobierania danych urlopowych z treści żądania. Składniaas Vacation
jest asercją typu, która informuje język TypeScript o traktowaniu wyniku jakoVacation
obiektu.Przenieś definicję trasy z pliku putVacation do pliku index.ts . Zaktualizuj tablicę właściwości metody na
PUT
.app.http('updateVacation', { methods: ['PUT'], route: 'vacations/{id}', authLevel: 'anonymous', handler: updateVacation });
Tworzenie funkcji HTTP DELETE
DELETE
Utwórz funkcję, która obsługuje dodawanie urlopu.
W programie Visual Studio Code otwórz paletę poleceń za pomocą klawiszy Ctrl + Shift + P i wpisz
Azure Functions: Create Function
i naciśnij klawisz Enter.Wybierz pozycję Wyzwalacz HTTP jako typ i usuńVacation jako nazwę.
Dodaj import vacationService do pliku.
import { vacationService } from '../services';
Zastąp funkcję boilerplate
deleteVacation
następującym kodem umożliwiającym dostęp do danych i obsługę błędów.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' } }; } };
Właściwość
request.params.id
służy do pobierania identyfikatora urlopu z adresu URL.Przenieś definicję trasy z pliku deleteVacation do pliku index.ts . Zaktualizuj tablicę właściwości metody na
DELETE
.app.http('deleteVacation', { methods: ['DELETE'], route: 'vacations/{id}', authLevel: 'anonymous', handler: deleteVacation });
Przejdź do następnej lekcji, aby przejrzeć utworzoną aplikację usługi Azure Functions.