Alıştırma - Azure İşlevleri uygulaması için işlevler oluşturma

Tamamlandı

Bu ünitede, Node.js Express uygulamasındaki , POST, PUTve DELETE uç noktaları için GETAzure İş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 /vacationsbir 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.

  1. functions/src/functions/getVacations.ts dosyasını açın.

  2. Her iki dosyayı da yan yana görebilmek için sunucu/routes/vacation.routes.ts dosyasını ayrı bir pencerede açın.

  3. getVacations.ts'da vacationService içeri aktarma deyimini ekleyin.

    import { vacationService } from '../services';
    
  4. getVacations.ts'da, vacationService'i çağırmak için işlevini düzenleyingetVacations.

     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
     };
    
  5. 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.

  1. Bu kuruluşu başlatmak için, yol tanımlarını yakalamak için yeni ./functions/src/index.ts bir dosya oluşturun.

  2. Paketten sağlanan uygulamanın bağımlılığını @azure/functions ekleyin.

    import { app } from '@azure/functions';
    
  3. getVacations işlevinin bağımlılığını dosyasından ./functions/getVacations ekleyin.

    import { getVacations } from `./functions/getVacations`;
    
  4. Yol tanımını uygulamasından ./functions/getVacationsindex.ts dosyasına taşıyın. yöntem özellik dizisini olarak GETgü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.

Screenshot of the http definition with the first parameter numbered as one, and the second parameter's handler property numbered as two.

  • İ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 getVacationgöre benzer işlevleri amacına vacationGet 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.

  1. 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.

  2. Tür olarak HTTP Tetikleyicisi'ni ve ad olarak postVacation'ı seçin.

  3. dosyasına vacationService içeri aktarma deyimini ekleyin.

    import { vacationService } from '../services';
    
  4. 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 sorununun await çözülmesini beklemek için anahtar sözcüğünü kullanırsınız. Söz as Vacation dizimi, TypeScript'e sonucu bir nesne olarak ele almalarını söyleyen bir Vacation tür onayıdır.

    const vacation = await request.json() as Vacation;
    
  5. Rota tanımını postVacation dosyasından index.ts dosyasına taşıyın. yöntem özellik dizisini olarak POSTgü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.

  1. 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.

  2. Tür olarak HTTP Tetikleyicisi'ni ve ad olarak updateVacation'ı seçin.

  3. dosyasına vacationService içeri aktarma deyimini ekleyin.

    import { vacationService } from '../services';
    
  4. 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öz as Vacation dizimi, TypeScript'e sonucu bir nesne olarak ele almalarını söyleyen bir Vacation tür onayıdır.

  5. yol tanımını putVacation dosyasından index.ts dosyasına taşıyın. yöntem özellik dizisini olarak PUTgü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.

  1. 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.

  2. Tür olarak HTTP Tetikleyicisi'ni ve ad olarak deleteVacation'ı seçin.

  3. dosyasına vacationService içeri aktarmasını ekleyin.

    import { vacationService } from '../services';
    
  4. 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.

  5. Rota tanımını deleteVacation dosyasından index.ts dosyasına taşıyın. yöntem özellik dizisini olarak DELETEgü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.