Exercício – Criar um projeto do Azure Functions

Concluído

Seu aplicativo Web de lista de compras precisa de uma API. Nesse exercício, você vai compilar e executar sua API usando um projeto do Azure Functions. A partir daí, você estende a API com uma nova função usando a extensão Azure Functions para Visual Studio Code.

Nesse exercício, você irá executar as seguintes tarefas:

  1. Crie um branch durante a preparação para fazer alterações no aplicativo Web.
  2. Explore o projeto de Função do Azure.
  3. Crie a função HTTP GET.
  4. Substitua o código inicial da função pela lógica para obter produtos.
  5. Configure o aplicativo Web para usar um proxy de solicitações HTTP para a API.
  6. Execute a API e o aplicativo Web.

Obter o aplicativo de Funções

Agora, adicione uma API e conecte-a ao seu aplicativo de front-end. A pasta api-starter inclui um projeto incompleto do Azure Functions. Então, vamos concluir isso agora.

Criar um branch de API

Antes de fazer alterações em um aplicativo, é uma boa prática criar um branch para as alterações. Você está prestes a concluir a API do aplicativo, portanto, este é um bom momento para criar um branch.

  1. No Visual Studio Code, abra a paleta de comandos pressionando F1.

  2. Insira e selecione Git: fazer check-out em....

  3. Selecione Criar branch.

  4. Insira api como o nome do branch e pressione Enter.

Você acabou de criar o GIT branch da api.

Concluir a API do Azure Functions

Para concluir a API, comece movendo o código da API inicial para uma pasta chamada API. Você inseriu esse nome de pasta para api_location quando criou a instância de Aplicativos Web estáticos.

  1. No Visual Studio Code, abra a paleta de comandos pressionando F1.

  2. Insira e selecione Terminal: criar terminal (no workspace ativo).

  3. Verifique se você está na pasta raiz do projeto.

  4. Execute o comando do Git a seguir para renomear a pasta api-starter para api.

    git mv api-starter api
    
  5. Abra a paleta de comandos pressionando F1.

  6. Insira e selecione Git: confirmar tudo.

  7. Insira a mensagem de commit de api e pressione Enter.

Agora, você verá uma pasta API no Visual Studio Code Explorer. A pasta api contém seu projeto Azure Functions com três funções.

Pasta e arquivo Método Rota
api/products-post POST products
api/products-put PUT products/:id
api/products-delete DELETE products/:id

Criar a Função HTTP GET

A API tem rotas para manipular os produtos da lista de compras, mas não tem uma rota para obtê-los. Vamos acrescentar isso agora.

Instalar a extensão do Azure Functions para o Visual Studio Code

Você pode criar e gerenciar aplicativos do Azure Functions usando a extensão Azure Functions para o Visual Studio Code.

  1. Acesse o Visual Studio Marketplace e instale a extensão Azure Functions para Visual Studio Code.

  2. Quando a guia de extensão for carregada no Visual Studio Code, selecione Instalar.

  3. Quando a instalação for concluída selecione Recarregar.

Observação

Certifique-se de instalar o Azure Functions Core Tools, que permite que você execute o Azure Functions localmente.

Criar a função

Agora você estende seu aplicativo de Funções do Azure com uma função para obter seus produtos.

  1. No Visual Studio Code, abra a paleta de comandos pressionando F1.

  2. Insira e selecione Azure Functions: criar função.

  3. Quando for solicitada a criação de uma função, selecione Gatilho HTTP.

  4. Insira products-get como o nome da função.

  5. Selecione Anônimo como o nível de autenticação.

Observação

O aplicativo Functions está na pasta api, que o separa de projetos individuais de aplicativo Web. Todos os aplicativos Web que usam as estruturas de front-end fazem chamadas para a mesma API. Você pode decidir como estruturar seu aplicativo, mas, para este exemplo, ajuda vê-los separados.

Configurar o método HTTP e o ponto de extremidade de rota

Observe que a pasta api/products-get contém o arquivo function.json. Esse arquivo contém a configuração de sua função.

O ponto de extremidade de rota tem o mesmo nome que a pasta que contém a função, por convenção. Como a função é criada na pasta products-get, o ponto de extremidade de rota é gerado como products-get, por padrão. No entanto, você quer que o ponto de extremidade seja products.

Configure sua função:

  1. Abra o arquivo api/products-get/function.json.

  2. Observe que os métodos permitem GET e POST.

  3. Altere a matriz de métodos para permitir somente solicitações GET.

  4. Adicione uma entrada "route": "products" após a matriz de métodos.

Agora, a função é disparada em uma solicitação HTTP GET para products. Seu function.json deve ser semelhante ao seguinte código:

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

Atualizar a lógica da função

O arquivo index.js na pasta api/products-get contém a lógica que é executada quando você faz uma solicitação HTTP para a rota.

Você precisa atualizar a logica para obter seus produtos. Existe uma logica de acesso aos dados no módulo JavaScript /shared/product-data.js. O módulo product-data expõe uma função getProducts para obter os produtos da lista de compras.

Agora, altere o ponto de extremidade da função para retornar os produtos:

  1. Abra o arquivo api/products-get/index.js.

  2. Substitua o conteúdo pelo seguinte código:

    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);
      }
    };
    

Sua função obtém os produtos e os retorna com um código de status de 200, quando bem-sucedida.

Configurar o CORS (Compartilhamento de Recursos entre Origens) localmente

Você não precisa se preocupar com o CORS ao publicar nos Aplicativos Web Estáticos do Azure. Os Aplicativos Web Estáticos do Azure configuram automaticamente o aplicativo para que ele possa se comunicar com sua API no Azure usando um proxy inverso. Mas, ao executar localmente, você precisa configurar o CORS para permitir que o aplicativo Web e a API se comuniquem.

Agora, instrua o Azure Functions a permitir que seu aplicativo Web faça solicitações HTTP para a API em seu computador.

  1. Crie um arquivo chamado api/local.settings.json.

  2. Adicione o seguinte conteúdo ao arquivo:

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

Observação

O arquivo local.settings.json é listado no arquivo .gitignore, o que impede que ele arquivo seja enviado por push para o GitHub. Isso ocorre porque você pode armazenar segredos nesse arquivo que não deseja que estejam no GitHub. Por isso você precisou criar o arquivo quando criou o repositório com base no modelo.

Executar a API

Agora, é hora de ver o aplicativo Web e o projeto do Azure Functions funcionarem juntos. Comece executando o projeto do Azure Functions localmente seguindo estas etapas:

Observação

Certifique-se de instalar o Azure Functions Core Tools, que permite que você execute o Azure Functions localmente.

  1. Abra um terminal git e acesse a pasta api:

    cd api
    
  2. Execute o aplicativo do Azure Functions localmente:

    npm install
    
    npm start
    

Execute o aplicativo Web

Sua API está em execução. Agora, você precisa configurar o aplicativo de front-end para fazer sua solicitação HTTP para a API. O aplicativo de front-end é executado em uma porta e a API é executada em uma outra porta (7071). Cada estrutura de front-end pode ser configurada para usar um proxy das solicitações HTTP para uma porta com segurança.

Configurar a porta de proxy

Configure o proxy de seu aplicativo de front-end com as seguintes etapas:

  1. Abra o arquivo angular-app/proxy.conf.json.

  2. Localize a configuração target: 'http://localhost:7071'.

  3. Observe que a porta do destino aponta para 7071.

  1. Abra o arquivo react-app/package.json.

  2. Localize a configuração "proxy": "http://localhost:7071/",.

  3. Observe que a porta do proxy aponta para 7071.

  1. Abra o arquivo svelte-app/rollup.config.js.

  2. Localize a linha de código const api = 'http://localhost:7071/api';.

  3. Observe que a porta da API aponta para 7071.

  1. Abra o arquivo vue-app/vue.config.js.

  2. Localize a configuração target: 'http://localhost:7071',.

  3. Observe que a porta do destino aponta para 7071.

Executar o aplicativo Web de front-end

A API já está em execução na porta 7071. Agora, quando você executa seu aplicativo Web, ele faz solicitações HTTP à sua API. Execute seu aplicativo Web seguindo estas etapas:

  1. Abra uma segunda instância do terminal git.

  2. Em seguida, insira este comando para acessar a pasta da sua estrutura de front-end preferida:

    cd angular-app
    
    cd react-app
    
    cd svelte-app
    
    cd vue-app
    
  3. Execute o aplicativo cliente de front-end:

    npm start
    
    npm start
    
    npm run dev
    
    npm run serve
    

Navegar até o aplicativo

É hora de ver o aplicativo em execução localmente na API do Azure Functions.

  1. Navegue até http://localhost:4200.
  1. Navegue até http://localhost:3000.
  1. Navegue até http://localhost:5000.
  1. Navegue até http://localhost:8080.
  1. Você criou o aplicativo, que agora está em execução localmente fazendo solicitações HTTP GET para a API. Agora, pare o aplicativo e a API em execução pressionando Ctrl-C nos terminais.

Próximas etapas

O aplicativo funciona localmente, e a próxima etapa é publicar o aplicativo e a API.