Ćwiczenie — Tworzenie projektu usługi Azure Functions

Ukończone

Aplikacja internetowa z listą zakupów wymaga interfejsu API. W tym ćwiczeniu utworzysz i uruchomisz interfejs API przy użyciu projektu usługi Azure Functions. Z tego miejsca rozszerzysz interfejs API przy użyciu nowej funkcji przy użyciu rozszerzenia usługi Azure Functions dla programu Visual Studio Code.

W tym ćwiczeniu wykonasz następujące kroki:

  1. Utwórz gałąź podczas przygotowywania do wprowadzania zmian w aplikacji internetowej.
  2. Zapoznaj się z projektem funkcji platformy Azure.
  3. Utwórz funkcję HTTP GET.
  4. Zastąp kod początkowy funkcji logiką, aby pobrać produkty.
  5. Skonfiguruj aplikację internetową do proxy żądań HTTP do interfejsu API.
  6. Uruchom interfejs API i aplikację internetową.

Pobieranie aplikacji Function

Teraz dodaj interfejs API i połącz go z aplikacją frontonu. Folder api-starter zawiera niekompletny projekt usługi Azure Functions. Ukończmy to teraz.

Tworzenie gałęzi interfejsu API

Przed wprowadzeniem zmian w aplikacji dobrą praktyką jest utworzenie nowej gałęzi dla zmian. Zamierzasz ukończyć interfejs API dla aplikacji, więc teraz jest odpowiedni moment na utworzenie gałęzi.

  1. W programie Visual Studio Code otwórz paletę poleceń, naciskając klawisz F1.

  2. Wprowadź i wybierz pozycję Git: Wyewidencjonuj do....

  3. Wybierz pozycję Utwórz nową gałąź.

  4. Wprowadź interfejs API dla nowej nazwy gałęzi, a następnie naciśnij klawisz Enter.

Właśnie została utworzona gałąź api usługi git.

Uzupełnianie interfejsu API usługi Azure Functions

Aby ukończyć interfejs API, zacznij od przeniesienia początkowego kodu interfejsu API do folderu o nazwie api. Ta nazwa folderu została wprowadzona dla api_location podczas tworzenia wystąpienia usługi Static Web Apps.

  1. W programie Visual Studio Code otwórz paletę poleceń, naciskając klawisz F1.

  2. Wprowadź i wybierz pozycję Terminal: Utwórz nowy terminal (w aktywnym obszarze roboczym).

  3. Upewnij się, że jesteś w folderze głównym projektu.

  4. Uruchom następujące polecenie git, aby zmienić nazwę folderu api-starter na api.

    git mv api-starter api
    
  5. Naciśnij klawisz F1, aby otworzyć paletę poleceń.

  6. Wprowadź i wybierz pozycję Git: Zatwierdź wszystko.

  7. Wprowadź interfejs API komunikatu zatwierdzenia i naciśnij klawisz Enter.

Teraz w Eksploratorze programu Visual Studio Code zostanie wyświetlony folder interfejsu API . Folder api zawiera projekt Azure Functions oraz trzy funkcje.

Folder i plik Metoda Marszruta
api/products-post POST products
api/products-put ODŁÓŻ products/:id
api/products-delete DELETE products/:id

Tworzenie funkcji HTTP GET

Interfejs API ma trasy do manipulowania produktami na liście zakupów, ale nie ma trasy do pobierania produktów. Dodajmy to teraz.

Instalowanie rozszerzenia usługi Azure Functions dla programu Visual Studio Code

Aplikacje usługi Azure Functions można tworzyć i zarządzać nimi przy użyciu rozszerzenia usługi Azure Functions dla programu Visual Studio Code.

  1. Przejdź do witryny Visual Studio Marketplace i zainstaluj rozszerzenie usługi Azure Functions dla programu Visual Studio Code.

  2. Po załadowaniu karty rozszerzenia w programie Visual Studio Code wybierz pozycję Zainstaluj.

  3. Po zakończeniu instalacji wybierz pozycję Załaduj ponownie.

Uwaga

Pamiętaj, aby zainstalować narzędzia Azure Functions Core Tools, które umożliwiają uruchamianie usługi Azure Functions lokalnie.

Tworzenie funkcji

Teraz rozszerzysz aplikację funkcji platformy Azure za pomocą funkcji, aby uzyskać produkty.

  1. W programie Visual Studio Code otwórz paletę poleceń, naciskając klawisz F1.

  2. Wprowadź i wybierz pozycję Azure Functions: Create Function (Azure Functions: Utwórz funkcję).

  3. Po wyświetleniu monitu o utworzenie funkcji wybierz pozycję Wyzwalacz HTTP.

  4. Wprowadź ciąg products-get jako nazwę funkcji.

  5. Wybierz pozycję Anonimowe jako poziom uwierzytelniania.

Uwaga

Aplikacja funkcji znajduje się w folderze api, który oddziela ją od poszczególnych projektów aplikacji internetowej. Wszystkie aplikacje internetowe używające struktur frontonu wywołują ten sam interfejs API. Możesz określić strukturę aplikacji, ale na potrzeby tego przykładu pomocne będzie zobaczenie ich oddzielnie.

Konfigurowanie metody HTTP i punktu końcowego trasy

Zwróć uwagę na to, że folder api/products-get zawiera plik function.json. Ten plik zawiera konfigurację funkcji.

Zgodnie z konwencją punkt końcowy trasy ma tę samą nazwę, co folder, który zawiera funkcję. Ponieważ funkcja jest tworzona w folderze products-get , punkt końcowy trasy jest domyślnie generowany jako products-get. Jednak chcesz, aby punkt końcowy miał nazwę products.

Skonfiguruj funkcję:

  1. Otwórz plik api/products-get/function.json.

  2. Zwróć uwagę, że metody zezwalają zarówno na metody , jak GET i POST.

  3. Zmień tablicę metod tak, aby zezwalała tylko na GET żądania.

  4. "route": "products" Dodaj wpis po tablicy metod.

Teraz funkcja jest wyzwalana przez żądanie HTTP GET do products. Plik function.json powinien wyglądać jak poniższy kod:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": ["get"],
      "route": "products"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    }
  ]
}

Aktualizowanie logiki funkcji

Plik index.js w folderze api/products-get zawiera logikę, która jest uruchamiana podczas realizacji żądania HTTP dla trasy.

Aby uzyskać produkty, należy zaktualizować logikę. W module JavaScript /shared/product-data.js istnieje logika dostępu do danych. Moduł product-data uwidacznia funkcję getProducts w celu pobrania produktów do listy zakupów.

Teraz zmień punkt końcowy funkcji, aby zwracał produkty:

  1. Otwórz plik api/products-get/index.js.

  2. Zastąp zawartość poniższym kodem:

    const data = require('../shared/product-data');
    
    module.exports = async function (context, req) {
      try {
        const products = data.getProducts();
        context.res.status(200).json(products);
      } catch (error) {
        context.res.status(500).send(error);
      }
    };
    

Funkcja pobiera produkty i zwraca je z kodem stanu 200 po pomyślnym zakończeniu.

Lokalne konfigurowanie współużytkowania zasobów między źródłami (CORS)

Nie musisz martwić się o mechanizm CORS podczas publikowania w usłudze Azure Static Web Apps. Usługa Azure Static Web Apps automatycznie konfiguruje aplikację, tak aby mogła komunikować się z interfejsem API na platformie Azure przy użyciu zwrotnego serwera proxy. Jednak w przypadku uruchamiania lokalnego należy skonfigurować mechanizm CORS, aby umożliwić komunikację aplikacji internetowej i interfejsu API.

Teraz skonfiguruj usługę Azure Functions, aby umożliwić aplikacji internetowej wykonywanie żądań HTTP do interfejsu API na Twoim komputerze.

  1. Utwórz plik o nazwie api/local.settings.json.

  2. Dodaj następującą zawartość do pliku:

    {
      "Host": {
        "CORS": "http://localhost:4200"
      }
    }
    
    {
      "Host": {
        "CORS": "http://localhost:3000"
      }
    }
    
    {
      "Host": {
        "CORS": "http://localhost:5000"
      }
    }
    
    {
      "Host": {
        "CORS": "http://localhost:8080"
      }
    }
    

Uwaga

Plik local.settings.json jest zapisany w pliku .gitignore, który uniemożliwia wypychanie tego pliku do usługi GitHub. Jest to spowodowane tym, że w tym pliku można przechowywać wpisy tajne, których nie potrzebujesz w usłudze GitHub. To dlatego należało utworzyć ten plik podczas tworzenia repozytorium z szablonu.

Uruchamianie interfejsu API

Teraz nadszedł czas na sprawdzenie, jak współdziałają aplikacja internetowa i projekt Azure Functions. Najpierw, aby uruchomić projekt Azure Functions lokalnie, wykonaj następujące kroki:

Uwaga

Pamiętaj, aby zainstalować narzędzia Azure Functions Core Tools, które umożliwiają uruchamianie usługi Azure Functions lokalnie.

  1. Otwórz terminal usługi Git i przejdź do folderu api :

    cd api
    
  2. Uruchom aplikację usługi Azure Functions lokalnie:

    npm install
    
    npm start
    

Uruchom aplikację internetową

Interfejs API działa. Teraz trzeba skonfigurować aplikację frontonu, aby wysłać żądanie HTTP do interfejsu API. Aplikacja frontonu działa na jednym porcie, a interfejs API działa na innym porcie (7071). Każdą strukturę frontonu można skonfigurować do bezpiecznego przekazywania przez proxy żądań HTTP do portu.

Konfigurowanie portu serwera proxy

Aby skonfiguruj serwer proxy dla aplikacji frontonu, wykonaj następujące kroki:

  1. Otwórz plik angular-app/proxy.conf.json.

  2. target: 'http://localhost:7071' Znajdź ustawienie.

  3. Zwróć uwagę, że port docelowy wskazuje wartość 7071.

  1. Otwórz plik react-app/package.json.

  2. "proxy": "http://localhost:7071/", Znajdź ustawienie.

  3. Zwróć uwagę, że port serwera proxy wskazuje wartość 7071.

  1. Otwórz plik svelte-app/rollup.config.js.

  2. Znajdź wiersz kodu const api = 'http://localhost:7071/api';.

  3. Zwróć uwagę, że port interfejsu API wskazuje wartość 7071.

  1. Otwórz plik vue-app/vue.config.js.

  2. target: 'http://localhost:7071', Znajdź ustawienie.

  3. Zwróć uwagę, że port docelowy wskazuje wartość 7071.

Uruchamianie aplikacji internetowej frontonu

Interfejs API jest już uruchomiony na porcie 7071. Teraz po uruchomieniu aplikacji internetowej wysyła ona żądania HTTP do interfejsu API. Aby uruchomić aplikację internetową, wykonaj następujące kroki:

  1. Otwórz drugie wystąpienie terminalu usługi Git.

  2. Następnie wprowadź to polecenie, aby przejść do folderu preferowanej struktury frontonu:

    cd angular-app
    
    cd react-app
    
    cd svelte-app
    
    cd vue-app
    
  3. Uruchom aplikację kliencka frontonu:

    npm start
    
    npm start
    
    npm run dev
    
    npm run serve
    

Przeglądanie aplikacji

Nadszedł czas, aby zobaczyć, że aplikacja działa lokalnie, korzystając z interfejsu API usługi Azure Functions.

  1. Przejdź do http://localhost:4200.
  1. Przejdź do http://localhost:3000.
  1. Przejdź do http://localhost:5000.
  1. Przejdź do http://localhost:8080.
  1. Utworzono aplikację, a teraz działa ona lokalnie, wysyłając żądania HTTP GET do interfejsu API. Teraz zatrzymaj uruchomioną aplikację i interfejs API, naciskając klawisze Ctrl-C w terminalach.

Następne kroki

Aplikacja działa lokalnie, a następnym krokiem jest opublikowanie aplikacji za pomocą interfejsu API.