Alıştırma - Azure İşlevleri uygulaması için işlevler oluşturma
Bu ünitede, Node.js Express uygulamasındaki , POST
, PUT
ve DELETE
uç noktaları için GET
Azure İşlevleri uygulamasında işlevler oluşturup yapılandıracaksınız.
GET işlevine veri erişimi ekleme
son ünitede Azure İşlevleri uygulamasını oluştururken ilk API uç noktasını oluşturdunuz. Bu işlev, üzerinde /vacations
bir HTTP GET
istendiğinde yürütülür. Tatilleri almak için veri hizmetini çağırmak için ortak kodu güncelleştirmeniz gerekir.
functions/src/functions/getVacations.ts dosyasını açın.
Her iki dosyayı da yan yana görebilmek için sunucu/routes/vacation.routes.ts dosyasını ayrı bir pencerede açın.
getVacations.ts'da vacationService içeri aktarma deyimini ekleyin.
import { vacationService } from '../services';
getVacations.ts'da, vacationService'i çağırmak için işlevini düzenleyin
getVacations
.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 };
Orada durabilirsin. Bu, tatilleri almak için işleve eklemeniz gereken tek koddur. Ancak, hataları işlemek ve bir durum kodu döndürmek için kod sağlamanız gerekir. İşlevi aşağıdaki kodu kullanacak şekilde güncelleştirin.
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' } }; } };
Azure İşlevleri yollarını düzenleme
v4 programlama modelinde yollarınızı çeşitli yollarla düzenleyebilirsiniz. Yol tanımını yol işleyicisiyle tek bir dosyada bırakabilirsiniz. Bu, tek uç noktaya sahip bir uygulama için uygundur. Tailwind Traders geliştiricisi olarak, bu uygulamanın düzenlenmesi gereken birçok API'ye büyüyeceğini biliyorsunuz.
Bu kuruluşu başlatmak için, yol tanımlarını yakalamak için yeni
./functions/src/index.ts
bir dosya oluşturun.Paketten sağlanan uygulamanın bağımlılığını
@azure/functions
ekleyin.import { app } from '@azure/functions';
getVacations işlevinin bağımlılığını dosyasından
./functions/getVacations
ekleyin.import { getVacations } from `./functions/getVacations`;
Yol tanımını uygulamasından
./functions/getVacations
index.ts dosyasına taşıyın. yöntem özellik dizisini olarakGET
güncelleştirin.app.http('getVacations', { methods: ['GET'], route: 'vacations', authLevel: 'anonymous', handler: getVacations });
İşlevi ve işleyiciyi adlandırma
Ad getVacations
hem app.http için ilk parametre hem de ikinci parametrede bir özellik olarak kullanılır. Bu kafa karıştırıcı olabilir ve adın nasıl kullanıldığına bağlı olarak kuruluşunuzda veya ekibinizde farklı adlandırma kuralları kullanmak isteyebilirsiniz.
- İlk parametre - dize olarak ad: İlk parametrenin değeri, Azure portalında görüneceği şekilde işlevin adıdır. Bu adlar portalda alfasayısal olarak listelenmiştir, bu nedenle gibi veya gibi yönteme
getVacation
göre benzer işlevleri amacınavacationGet
göre gruplandıran bir adlandırma kuralı kullanmak isteyebilirsiniz. Snake_case, kebab-case veya camelCase gibi farklı bir servis talebi de seçebilirsiniz. - İkinci parametre - işleyici işlevi: İkinci parametrenin değeri, kodda içeri aktarılıp kullanıldığında işlev işleyicisinin adıdır. Bu ad açıklayıcı olmalı ve işlevin amacına uygun olmalıdır. Kod tabanınızdaki işlevler için zaten sahip olduğunuz adlandırma kurallarına uygun olabilir ve tipik kod uyumluluğu araçlarıyla zorunlu kılınabilir.
Kalan işlevleri oluşturma
Node.js Express uygulamasında dört uç nokta vardır ve uç nokta işlevini GET
yeni oluşturdunuz. Şimdi kalan yol uç noktaları için işlevler oluşturun.
Metot | HTTP tetikleyici adı | Rota |
---|---|---|
POST |
postVacation |
vacations |
PUT |
updateVacation |
vacations/{id} |
DELETE |
deleteVacation |
vacations/{id} |
GET ve POST yolları aynı olsa da. PUT
ve DELETE
yolları, hangi tatilin kullanılacağını belirlemek için bir parametre kullanır.
HTTP POST işlevini oluşturma
POST
Tatil eklemeyi işleyen işlevi oluşturun.
Visual Studio Code'da Ctrl + Shift +P ile komut paletini açın ve yazın
Azure Functions: Create Function
ve Enter tuşuna basın.Tür olarak HTTP Tetikleyicisi'ni ve ad olarak postVacation'ı seçin.
dosyasına vacationService içeri aktarma deyimini ekleyin.
import { vacationService } from '../services';
Ortak
postVacation
işlevini veri erişimi ve hata işleme için aşağıdaki kodla değiştirin.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' } }; } }
Gelen tatil verilerini okumak için yöntemini kullanırsınız
request.json()
. Bu yöntem, istek gövdesindeki JSON verilerine çözümleyen bir söz döndürür. Ardından, söz sorunununawait
çözülmesini beklemek için anahtar sözcüğünü kullanırsınız. Sözas Vacation
dizimi, TypeScript'e sonucu bir nesne olarak ele almalarını söyleyen birVacation
tür onayıdır.const vacation = await request.json() as Vacation;
Rota tanımını postVacation dosyasından index.ts dosyasına taşıyın. yöntem özellik dizisini olarak
POST
güncelleştirin.app.http('post-vacation', { methods: ['POST'], route: 'vacations', authLevel: 'anonymous', handler: postVacation });
HTTP PUT işlevini oluşturma
PUT
Tatil eklemeyi işleyen işlevi oluşturun.
Visual Studio Code'da Ctrl + Shift + P ile komut paletini açın ve yazın
Azure Functions: Create Function
ve Enter tuşuna basın.Tür olarak HTTP Tetikleyicisi'ni ve ad olarak updateVacation'ı seçin.
dosyasına vacationService içeri aktarma deyimini ekleyin.
import { vacationService } from '../services';
Ortak
updateVacation
işlevini veri erişimi ve hata işleme için aşağıdaki kodla değiştirin.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' } }; } };
request.params.id
özelliği, URL'den tatil kimliğini almak için kullanılır.request.json()
yöntemi, istek gövdesinden tatil verilerini almak için kullanılır. Sözas Vacation
dizimi, TypeScript'e sonucu bir nesne olarak ele almalarını söyleyen birVacation
tür onayıdır.yol tanımını putVacation dosyasından index.ts dosyasına taşıyın. yöntem özellik dizisini olarak
PUT
güncelleştirin.app.http('updateVacation', { methods: ['PUT'], route: 'vacations/{id}', authLevel: 'anonymous', handler: updateVacation });
HTTP DELETE işlevini oluşturma
DELETE
Tatil eklemeyi işleyen işlevi oluşturun.
Visual Studio Code'da Ctrl + Shift + P ile komut paletini açın ve yazın
Azure Functions: Create Function
ve Enter tuşuna basın.Tür olarak HTTP Tetikleyicisi'ni ve ad olarak deleteVacation'ı seçin.
dosyasına vacationService içeri aktarmasını ekleyin.
import { vacationService } from '../services';
Ortak
deleteVacation
işlevini veri erişimi ve hata işleme için aşağıdaki kodla değiştirin.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' } }; } };
request.params.id
özelliği, URL'den tatil kimliğini almak için kullanılır.Rota tanımını deleteVacation dosyasından index.ts dosyasına taşıyın. yöntem özellik dizisini olarak
DELETE
güncelleştirin.app.http('deleteVacation', { methods: ['DELETE'], route: 'vacations/{id}', authLevel: 'anonymous', handler: deleteVacation });
Oluşturduğunuz Azure İşlevleri uygulamasını gözden geçirmek için sonraki üniteye gidin.