Fundamentos de funções do Microsoft Azure | Trevoir Williams | Skillshare

Velocidade de reprodução


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Fundamentos de funções do Microsoft Azure

teacher avatar Trevoir Williams, Jamaican Software Engineer

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Apresentação

      1:47

    • 2.

      Introdução às funções do Azure

      0:40

    • 3.

      Como criar um aplicativo de função

      9:10

    • 4.

      Aparelhos e amarrações

      5:23

    • 5.

      Ferramentas de desenvolvimento

      4:40

    • 6.

      Revisão de seção - Introdução de função do Azure

      1:29

    • 7.

      Funções do Azure no Portal da Web do Azure

      0:45

    • 8.

      Como criar uma função acionada de solicitação HTTP

      10:31

    • 9.

      Como criar uma função acionada

      2:57

    • 10.

      Como criar uma função despedaçada

      3:53

    • 11.

      Revisão de seção - diferentes funções do Azure

      3:47

    • 12.

      Funções do Azure no Visual Studio

      0:50

    • 13.

      Como criar um aplicativo de função

      3:38

    • 14.

      Função de teste no Visual Studio

      6:04

    • 15.

      Revisão de seção - funções no Visual Studio

      1:06

    • 16.

      Como usar ferramentas principais de função Azure

      6:50

    • 17.

      Como usar código do Visual Studio

      8:07

    • 18.

      Revisão de seção - Funções do Azure no código do Visual Studio

      1:00

    • 19.

      Ligações para função do Azure e funções duráveis (orquestrador)

      0:41

    • 20.

      Ligações de entrada e saída

      23:09

    • 21.

      Funções e padrões de orquestração

      11:07

    • 22.

      Criar API REST sem servidor usando funções do Azure

      2:15

    • 23.

      Rotas de API

      7:43

    • 24.

      Função POST de configuração (criar) HTTP Azure

      4:46

    • 25.

      Configuração GET Funções do Azure HTTP

      4:53

    • 26.

      Função PUT (atualizar) HTTP Azure

      3:11

    • 27.

      Função DELETE HTTP Azure

      1:20

    • 28.

      Teste funções do Azure com PostMan

      4:57

    • 29.

      Funções de teste com interface de usuário

      12:01

    • 30.

      Interaja com CosmosDB

      29:41

    • 31.

      Atualizações para interface de usuário

      4:09

    • 32.

      Revisão de seção - criar API REST

      4:19

    • 33.

      Implantação de funções do Azure

      0:25

    • 34.

      Publicar funções do Azure

      13:21

    • 35.

      Implantar e testar aplicativo de interface de usuário

      6:41

    • 36.

      Segurança de configuração

      8:40

    • 37.

      Revisão de seção - Publicar aplicativo função do Azure

      1:02

    • 38.

      Conclusão

      2:01

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

134

Estudantes

--

Projetos

Sobre este curso

Funções do Azure é uma das maneiras mais rápidas e fáceis de executar seu código no Azure enquanto mantém um modelo econômico e sem servidor.

Neste curso, Funções do Microsoft Azure - Desenvolvimento de Soluções sem Servidor, você vai aprender como criar seus próprios aplicativos Funções do Azure e visualizar como aplicativos completos podem ser criados usando modelo poderoso e simples do Azure Functions. Vamos explorar as ferramentas necessárias para suportar o desenvolvimento, tanto local como no Portal do Azure e explorar os diferentes gatilhos, ligações e modelos de implantação possíveis.

Ao longo do caminho, você vai aprender como:

  • Como entender planos de hospedagem

  • Explore opções de C#, TypeScript e outros idiomas para Funções do Azure

  • Como criar e gerenciar funções do Azure

    • Como usar o Portal do Azure

    • Como usar ferramentas principais (plataforma cruzada)

    • Como usar código do Visual Studio (plataforma cruzada)

    • Usando Visual Studio (2019/2022)

  • Entenda vinculações e Bindings

  • Use o Azure CosmosDB com funções do Azure

  • Monitore funções do Azure para desempenho e erros potenciais usando o Application Insights

  • Implantar aplicativo funções do Azure

  • Como criar aplicativo para cliente para interagir com funções do Azure

  • Explore configurações de segurança e proxy para aplicativos de função Azure

No final deste curso, você deve ter uma compreensão fundamental sobre o que são Funções do Microsoft Azure, como podem ser usadas e como podem interagir com outros serviços. Este curso se alinha com treinamento exigido para o Exame AZ-204: Desenvolvimento de soluções para exame Microsoft Azure, embora não seja um guia de treinamento oficial. É perfeito para você se precisar saber o suficiente sobre como desenvolver funções do Azure para ser funcional em seu espaço de trabalho, sem fazer o exame.

Conheça seu professor

Teacher Profile Image

Trevoir Williams

Jamaican Software Engineer

Professor
Level: All Levels

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. Introdução: Olá e bem-vindo ao meu curso, Microsoft Azure Functions desenvolvendo soluções sem servidor. Sou seu instrutor para a guerra Williams e tenho sido engenheiro de software, palestras e praticante de código na última década. Neste curso, vamos nos concentrar nas funções do Azure e em como elas funcionam. Nós analisamos como criá-los, testá-los, implantá-los. Analisamos os diferentes tipos de gatilho de função e todo o fim de semana MY eles interagem com serviços externos, também provisionados pelo Azure e, de outra forma, passando por todos esses conceitos, também iremos interagir com diferentes ferramentas de desenvolvimento, todas voltadas para nos ajudar a sermos tão produtivos quanto possível. Ferramentas como Visual Studio, visual Studio Code como 0 Funções, ferramentas principais. Analisamos o emulador de armazenamento e o emulador de banco de dados cosmos. Saiba que você provavelmente está um pouco confuso quanto ao que são as funções do Azure. telefone evita é uma das maneiras mais rápidas e fáceis de executar seu código no Azure, mantendo um modelo econômico e sem servidor. Em outras palavras, você pode escrever um aplicativo sem ter que se preocupar com a infraestrutura ou qualquer servidor ou qualquer coisa. E ele pode implantá-lo na nuvem e ter algo em funcionamento em questão de minutos. Também é compatível com muitos idiomas. Portanto, mesmo que nos concentremos em dotnet e C-Sharp, você também pode usar JavaScript, TypeScript, Python , Java e outras linguagens imediatamente. Agora, ao longo do curso, estaremos nos concentrando como suas funções, mas interagiremos com outras tecnologias do Azure, como Azure Storage, azure AD, azure Cosmos DB, Application Insights e aplicativo serviços. Deixe-me dizer novamente o quanto estou animado por tê-lo neste curso e mal posso esperar para começar. Vejo você em breve. 2. Introdução às funções do Azure: Nesta seção, vamos desmistificar alguns dos mistérios que cercam os conceitos da Função Azure. Primeiro, presumo que você já tenha um ativo como cones da era e que você tem créditos suficientes para passar pelas atividades relacionadas a este curso. Algumas das coisas vão custar dinheiro, mas ainda não estamos na parte do custo do dinheiro. Só quero que nos sintamos confortáveis com o portal do Azure funciona como podemos interagir com funções e alguns dos conceitos e palavras-chave que envolvem suas operações. Então fique por aqui. Vamos entender exatamente quais são as funções 0 e analisar várias maneiras pelas quais elas podem ser usadas. 3. Crie um aplicativo de função: Tudo bem, então vamos direto para entender as funções 0. Agora, neste momento, estou fazendo algumas suposições. Primeiro, que você já tem um Microsoft Azure cones ativos e você tem sua configuração de cartão de crédito ou você tem os créditos gratuitos disponíveis como algumas das atividades durante este período curso vai custar algum dinheiro. Mas não estamos realmente na parte de ganhar dinheiro ainda ou na parte do gasto de dinheiro. Estamos apenas olhando para os conceitos fundamentais. Já estou conectado à minha conta do Azure. Você pode acessar o portal do Azure acessando portal.azure.com e faça login com a conta que você usou para criar sua conta. E então você verá um painel. Pode ou não parecer que o meu realmente colocou algum tempo e esforço para personalizar este. Veja aqui que tenho alguns recursos que são implantados de outro curso. E você verá, você terá a capacidade de personalizar isso. Você sempre pode ir para Novo painel, painel em branco ou simplesmente editar este e pode mudar taus todo nosso e personalizá-los como quiser. Não, vamos pular para funções para cima ou, pelo menos a listagem de serviços e criar uma função de uma função para o Israelense an App Service. Então você teria visto a palavra-chave sem servidor sendo anunciada quando você vê um 0 funções. É sem servidor porque não há servidor físico envolvido. É um serviço que está sendo oferecido que nos permite hospedar funções. Então, na verdade, posso ir para Todos os Serviços aqui. Então eu posso filtrar e dizer função. E então, a partir daqui, verei que posso criar uma função para cima. Quando faço isso, posso clicar em Criar, Criar Função para cima. Para continuar, vou passar por um assistente. Então, em primeiro lugar, quais são seus assinantes? Então, quando você tem assinaturas diferentes, provavelmente está em teste. Você provavelmente está em testes de barra de desenvolvimento de pagamento conforme o uso como eu sou. Você provavelmente está em um especial para sua empresa ou para sua organização, seja lá o que você escolhe aquele que você vai usar. Eu só tenho um. Você gostaria de criar um novo grupo de recursos. Assim, você pode ir em frente e clicar em Criar novo. E vou ver função, RG, traço de função, traço RG. Clique em. Certo. O que queremos que essa função acima nomeada seja? Vou nomear a si mesmo com o curso que é Azure, Functions, traço fundamentos, saber quando você está fazendo isso, como você pode ver, ele realmente será um endereço voltado para o público. Então, o que você pode fazer para torná-lo mais personalizado caso isso não esteja disponível. Você também pode colocar traço e suas iniciais ou seu nome ou uma parte do seu nome apenas para torná-lo um pouco mais exclusivo. Isso será em URL pública e acessível ao público que nos permitiria navegar para as funções que serão implantadas nosso acesso às funções que são implantadas no espaço central de qualquer lugar no mundo. Tenho certeza de que todos sabemos como as URLs funcionam escritas. Tudo bem, então, em seguida, queremos dizer publicado, queremos código ou um contêiner Docker por enquanto, vou usar o código. Que pilha de tempo de execução queremos? Uma função 0 suporta muitos idiomas diferentes. Vemos que ele tem suporte para a estrutura ou plataforma dotnet. Podemos usar NodeJS, Python, Java, polar, Show, custom, e há outras linguagens sendo adicionadas. Muito irregularidade para este curso vamos nos concentrar em dotnet. Então, vamos escolher isso, então escolhemos a versão. Dotnet 60 é o mais recente e o maior. Então, vamos prosseguir com isso. No momento em que estávamos fazendo esse curso, eles podem ter uma versão posterior. Você pode se sentir livre para usá-lo também. Se você não estiver até dotnet seis, você também pode escolher dotnet Core 3.1 pode ser necessário se você não tiver Visual Studio 2022 ou superior no momento em que estiver fazendo este curso, tudo bem, mas eu serei mostrando com feito às seis. E então seu motivo seria o datacenter mais próximo da sua localização geográfica. Se você estiver na Austrália, você quer escolher aquele na Austrália que está mais próximo de você. Estou no Caribe. O melhor para mim é geralmente o Leste dos EUA. E vou escolher um banquinho que seja um datacenter mais novo para o Leste dos EUA. Depois de fazer tudo isso, podemos simplesmente clicar e ver o outro potencial sentado para que possamos configurar uma conta de armazenamento porque temos que criar um link para uma conta de armazenamento para armazenamento de blobs e filas e tabelas, qualquer forma de interrupção com eles. Podemos escolher um sistema operacional. Vou deixar isso como Windows. Também podemos escolher um tipo de plano, não o tipo de plano afetará diretamente o custo e mantenha que os recursos são spool para suportar suas funções. Então, clicando, saiba mais, você pode crescer para que a documentação, para que o plano de consumo seja dimensionado automaticamente e você paga apenas por recursos de computação quando suas funções estiverem em execução. A desvantagem disso é que eles realmente desativarão ou D alocarão os recursos após um período de inatividade. E então, quando você precisar deles novamente, foram puxados para cima, mas isso pode levar tempo, então é como se nem sempre estivesse a bordo, então ele vai meio rasgado para que economize dinheiro por muito tempo correr, no entanto, se é algo que você sempre precisa, então este pode não ser necessariamente o melhor plano para você, certo? Agora. O plano premium habilita automaticamente com base na demanda e não há períodos ociosos, por isso está sempre em escala e está sempre ativo quando você precisa, está lá o tempo todo. Outra coisa a observar também é o tempo de execução. Então, o plano de consumo basicamente tem um limite de, se não me engano, 20 minutos. Então isso significa que nossa função deixará de sair dos 20 minutos. Enquanto o plano premium, ele não terá esse limite de tempo. Portanto, ele funcionará mais do que o tempo máximo de execução dado a nós pelo plano de consumo. Como eu disse, você tem que saber quais são seus contextos e o que você precisa disso. O plano dedicado realmente lhe dará esse tipo de tempo de execução do aplicativo Service , o que significa que ele terá recursos dedicados para sua função AP, sua função. E você não terá que adivinhar e soletrar para dizer: Ok, estou gastando demais com os gastos. Ele será dimensionado automaticamente e é muito mais preditivo se você souber que vai precisar de funções e vai fazer isso a longo prazo. Você provavelmente quer usar a planta dedicada , porque então você pode estimar corretamente quais serão seus custos em um determinado tipo de carga. Você pode escolher o que você precisa acordo com seu contexto para este curso, vamos seguir em frente com o plano de consumo de sal, que é dito como o plano de serviço. Em seguida, vamos para o lado da rede. Não há muito ou nada para configurar aqui porque praticamente ele já está configurado para ser público voltado para a Internet. Portanto, realmente não precisamos fazer nenhum ajuste de rede virtual aqui, podemos ir para o monitoramento onde podemos ativar o Application Insights. E isso nos permite gravar logs e monitorar as funções enquanto elas estão executando o tempo de execução e os erros que eles estão recebendo todos esses. Então, eu recomendaria que você habilite isso. Custa um pouco de dinheiro, mas acho que vale a pena a longo prazo. E, em seguida, tags, essas são boas para criar recursos de nomenclatura, especialmente em um ambiente em que você pode ter muitos recursos são bastante semelhantes à natureza que atende a diferentes propósitos. Assim, as tags podem ajudar a isolá-las e ajudá-lo a criar e alocar recursos a longo prazo. Mas podemos pular isso por nulo. E depois vamos para Revisar e criar. Depois de verificarmos que tudo é o que queremos, podemos clicar em Criar. Quando esse processo for concluído, você sempre pode clicar em Ir para recurso. Uma vez em diante, Vá para o recurso. Se você já implantou um Serviço de Aplicativo, ele terá um versículo de painel muito semelhante, tipo de sensação semelhante. Se não, então tudo bem. Este é o painel que você está recebendo. Então você verá aqui que ele recebe alguns gráficos, algumas métricas sobre notificações de tempo de execução. Você pode fazer o controle de acesso para ver qual usuário em sua organização ou no Azure AD pode fazer o que neste recurso específico, podemos configurar alertas de segurança para qualquer invasão ou possíveis invasões. Podemos configurar eventos. E então, é claro, o motivo pelo qual estamos aqui, podemos começar a criar funções. Alguém para deixá-lo lá. Não, acabamos de ver como você cria uma função para cima e os diferentes tipos de modelos de hospedagem, os diferentes modelos de preços que estão disponíveis para você. E, claro, o contexto determina as decisões que você toma. Vamos passar por alguns conceitos nas próximas lições. 4. Triggers e ligamentos: Tudo bem pessoal, nesta lição, vamos olhar para gatilhos e encadernações, e ainda não estamos fazendo nenhuma codificação. Ainda estamos apenas explorando no painel para ver quais swats, o que a linguagem significa e como podemos conectar os pontos entre quais são nossas necessidades e observar as Funções do Azure nos fornecerão. Já criamos nossa função e, mais uma vez, isso não vai para o serviço UPS que foi hospedar todas as funções que precisam ser executadas. Assim, podemos chegar lá indo para este URL. E se eu clicar nele, você verá que diz minhas funções estão funcionando. Claro que não há foneticistas para eu navegar, então tudo bem. Se eu descer para aquela seção que diz funções e clicar em funções, isso me permite ver todas as funções que eu teria, o gatilho e o status. Então, se eu clicar em Criar, isso traz essa hemorragia que me permite definir o ambiente de desenvolvimento. Você vê aqui que temos algumas opções que veremos mais tarde. E então eles nos pedem para selecionar um modelo. Isso é muito bom e você pode ver que você tem algumas opções nessa seção de modelos. O gatilho representa a ação que faz com que a função seja executada, porque uma função vai ficar lá. Todos nós, neste momento, estou assumindo nossos programadores, então todos sabemos que as funções precisam estar em um programa e elas precisam ser chamadas para serem executadas. Não, a coisa com as funções do Azure é que elas são na verdade, mais como funções autônomas, mas eles têm gatilhos e um gatilho é o que solicitará sua execução. Portanto, se analisarmos a coluna de necessidades que modelos, você verá os diferentes tipos acionados que estão disponíveis nesses modelos. Então você tem o gatilho HTTP, o que significa uma função que será executada sempre que receber uma solicitação HTTP e ela responderá. Então, se você sabe sobre APIs, isso é tudo que uma API é. Você faz um HTTP chamado talvez incluir dados, talvez você não. Mas, com base nessa chamada, a API responderá de acordo com a forma como entendeu a chamada em relação aos dados que ela pode ou não ter sido fornecida. Portanto, essa é uma função acionada por HTTP. Como sua função, você tem gatilhos de temporizador, o que significa que você pode colocá-lo em um temporizador, executar a cada cinco minutos, executar uma vez por dia, etc Então, você sabe, você tem esse Windows Scheduler ou você tem esses trabalhos Cron no Linux, você pode usar gatilhos de temporizador no espaço da nuvem para fazer esses tipos de execuções em segundo plano. Não vou explicar o que é cada tipo, mas você sempre pode ler as descrições, certo? Então, enquanto um processo de Zuora cria coisas, na verdade, ele está educando você para que você possa tomar a decisão judicial que você tem como gatilhos de lojas de filas, você tem gatilhos de barramento de serviço, tópico ou sugestão gatilhos com base em qual você está usando para o barramento de serviço, você tem gatilhos Cosmos DB, certo? E então, no mesmo fôlego, você tem o que você chama de vinculações. A vinculação é basicamente que você está se inscrevendo um recurso não relacionado à função ou recursos sentados e lendo ou escrevendo dados. Portanto, você tem ligações de entrada e saída. Então, quando dizemos isso, estou apenas dando esse cenário para que você possa apreciar o que estou vendo. Se você tiver um gatilho de temporizador que deve tirar uma imagem alt do Armazenamento de Blobs ou tirar uma mensagem da fila e colocar algo no Armazenamento de Blobs. Então, digamos que você tenha um formulário mais fácil mostrado que foi o serviço mais acionado. Saiba que este telefone foi mostrado terá uma ligação para a fila e ele terá uma ligação para o blob. Isso permitirá que você possa assinar esses dois serviços de terceiros que eu quero definir terceiros, quero dizer, eles não estão exatamente relacionados à função. Eles são serviços do Azure autônomos. Portanto, a vinculação de entrada seria, estou lendo da fila. A ligação de saída seria, estou escrevendo para o Armazenamento de Blobs. Não quero ter que escrever se levasse 50 linhas de código em programa irregular para blob do consumidor e conectar-se a ele e saber exatamente para onde estou indo. Provavelmente levará de três a cinco linhas por causa desse recurso de vinculações. Esse é um recurso muito poderoso, permite que você recorte muito do código boilerplate e vá direto ao ponto e implemente a lógica de negócios. Portanto, é muito útil implementar funções ou funcionalidades, em vez que você precisa, como julgamentos instantâneos, você sabe exatamente o que deseja. Você não tem tempo para escrever muito código. Isso é o que esses modelos de gatilho trazem para a tabela. E a capacidade de apenas vincular a função a um recurso externo facilita muito a implantação um aplicativo que toca muitas partes diferentes de um 0. Isso é realmente tudo o que eu queria discutir aqui. Ainda não estamos criando uma função ainda. Ainda estamos nos aquecendo para o painel e a linguagem. Quando voltarmos, falaremos sobre as ferramentas de desenvolvimento que estão disponíveis para nós, mesmo não vamos aprofundar muito. O que acabamos de discutir, quais são as possibilidades. 5. Ferramentas de desenvolvimento: Tudo bem, então da última vez que estivermos aqui, estamos analisando os diferentes tipos de gatilhos que podem ter o Azure Functions. Não, vamos dar o passo adiante e realmente olhar para as ferramentas que nos cercariam, na verdade criando uma interação. Nós dissemos funções, sem upsilon um, seria a opção mais óbvia que é usar o portal porque as portas, que é uma ferramenta muito, muito poderosa. Ele fica no navegador. São necessários recursos mínimos em sua máquina real. Portanto, esse provavelmente seria o recurso ou a opção, nem muitas pessoas podem acabar escolhendo quando você vai para Criar Função, a primeira que existe um portal em desenvolvimento. Você pode escolher seu modelo e, em seguida, clicar em Criar depois de dar um nome a ele, digamos testar o portal. A função Http faz algo que saibamos exatamente o que é o nível de autorização que tem para que saibamos exatamente o que é o nível de autorização que tem a ver com os níveis de autorização que vamos dar às pessoas para interagir com esta função. Então eu vou dizer uma função, você apenas interage como um nível funcional versus anônimo versus administrador. Então, o que acontece é que quando você usa a função, você precisa de uma chave de noção completa. Quando você usa admin, você precisa uma chave mestra e você pode realmente gerenciar essas chaves abaixo da seção de gerenciamento de chaves aqui. Então, se eu apenas disser anônimo, então nenhuma chave é necessária. Então, vou fazer isso por isso, basta clicar em Criar e isso nos dá um painel menor. Podemos ir e examinar o código e executar e testar aqui mesmo no portal. E como eu disse, não estou entrando muito no código, certo? Não, não vou explicar o que é isso. Só estou mostrando que este é um editor de texto aqui mesmo no navegador para que você possa salvá-lo, você pode testá-lo e executá-lo aqui. Você pode fazer tudo o que precisa fazer. Podemos obter o URL da função. Tudo isso pode acontecer aqui no portal. Então essa é a opção a para sua ferramenta escrever uma função. Nenhuma opção B seria Visual Studio e Visual Studio aqui. O que estou usando é o instalador do Visual Studio 2022 Community Edition. Você gostaria de garantir que tenha essa carga de trabalho de desenvolvimento do Azure selecionada. Portanto, entre todas as outras cargas de trabalho que você pode precisar, certifique-se de ter incluído o fluxo de trabalho de desenvolvimento do Azure. E depois que você tiver essa carga de trabalho, quando você estiver criando nossos projetos, você será uma carga ou você terá a opção de criar um projeto de funções 0. Isso seria, isso seria útil se você tiver um projeto de desenvolvimento inteiro, você está trabalhando em uma equipe. Você quer controle de origem, gerenciamento e todas essas coisas. E você tem essa solução com várias funções que você pode implantar. Ative a função para cima. E se você usar a irregularidade do Visual Studio, então eu não preciso comercializar para você como sendo uma ferramenta de desenvolvimento muito boa. Outra opção que você teria seria o Visual Studio Code. E você sempre pode ir para as extensões e instalar como suas ferramentas. Assim, como 0 ferramentas virão com várias extensões para todos os tipos de desenvolvimento do Azure, incluindo 0 funções. Se você não quiser todo o conjunto de ferramentas, é claro, você pode procurar especificamente o Azure Functions, mas por que não apenas instalar todas as ferramentas? Agora, esta opção é perfeita para você se você estiver usando Linux ou Mac, porque o código do Visual Studio é de código aberto e multiplataforma. Portanto, não se limita ao PC com Windows, como o Visual Studio pode ser. Seria uma boa alternativa mais uma vez ter o código em sua máquina e controle de fonte e assim por diante, fora dele estar no portal. Agora, a próxima opção, que reconhecidamente, nunca tentei usar, mas ela está lá. Então, vamos discutir que seria qualquer editor e ferramentas principais, certo? Assim, podemos ir em frente e usar o Node.JS e instalar essas bibliotecas. E então eles nos dizem como podemos começar a dizer que podemos testá-lo ou podemos criar um projeto até como você pode publicá-lo. Portanto, se nenhum GS for sua preferência, então você pode seguir em frente e seguir estas instruções e seguir isso. Mas, como eu disse, não estamos fazendo nenhuma codificação nesta lição em particular, na verdade vou excluir essa função porque não preciso dela. Além de saber. Quando voltarmos, continuaremos discutindo mais alguns conceitos e , em seguida, fecharemos esta seção e entraremos parte da diversão que viemos aqui. 6. Revisão de seção - Introdução a função Azure: Tudo bem, então vamos olhar para eles como notas sexuais. Vamos rever o que conseguimos. Primeiro, analisamos o que é preciso para criar uma função 0 para cima. E discutimos o fato de que a função é uma única unidade de implantação. É um serviço de aplicativos que hospedará várias funções. Portanto, uma função pode ser criada e ela pode ter modelos diferentes, são gatilhos diferentes. Portanto, o modelo é apenas o frio predefinido, mas você sempre pode implantar qualquer tipo de modelo e ler o código de acordo. Mas temos gatilhos diferentes que desencadeiam as funções. Já analisamos uma função acionada por HTTP. Temos temporizador terá q, temos o barramento de serviço acionado. Temos vários deles que podemos usar, duráveis e MQ. Mais tarde, veremos o que as Funções Duráveis realmente significam. Mas o ponto é que temos todas essas opções disponíveis para nós. Também analisamos algumas das ferramentas de desenvolvimento que temos disponíveis para nós. Usaremos o Visual Studio ou usarei o Visual Studio. Mas principalmente, se não, tudo o que eu faço pode ser realizado no portal, bem como usar as outras ferramentas, se você precisar usá-las. Quando voltarmos, vamos nos aprofundar na interação com funções usando o portal um pouco mais e vamos sujar nossas mãos com algum código, manter um teste ou funcional e vendido para analisar a execução e ver o que é preciso para criar e implantar algumas Funções do Azure. 7. Funções do Azure no Portal da Web Azure: Tudo bem pessoal, bem-vindos de volta. Nesta lição, entraremos diretamente no fundo e criaremos algumas funções do Azure aqui no portal da web. Então, vamos ver exemplos de exibições de filmes acionados por HTTP. Estaríamos olhando para as funções acionadas por temporizador. E vamos olhar para um com o Armazenamento de Blobs, não obstante que você possa usar essas mesmas etapas e implantar qualquer tipo de função que você precisa de acordo com o relógio necessário, pois o gatilho estará focando nesses três exemplos. E também veremos como você pode testar. Bem, podemos olhar para os registros que as coisas que você pode fazer com as funções apenas para garantir que você está fazendo isso corretamente e cobrindo todas as bases. Então fique por aqui. Nós nos divertimos muito. 8. Crie uma função de pedido HTTP: Tudo bem, então vamos começar criando uma função acionada por solicitações HTTP. E já fizemos isso. Então, vamos reproduzir nossos passos. Estamos na função para cima e, em seguida, descemos duas funções, depois clicamos em Criar acima. E então isso nos dá a lista. E a partir dessa lista queremos o gatilho HTTP. Você clica nisso, você dá a ele um nome de função. Vou apenas nomeá-lo HTTP, solicitar hyphen funk ou uma função. Deixe-me escrever isso. E então aqui para a autorização do Endo desnatado na última vez, mas vou ir muito mais devagar desta vez e explicar com mais detalhes quando nós, quando escolhemos o nível de autorização para função, o que vai acontecer é que qualquer dispositivo, qualquer cor para essa função precisa fornecer uma chave específica para essa função. Portanto, criando uma função e obtemos uma chave, e essa chave deve estar presente em todas as solicitações para essa função para que ela seja realmente acionada. Quando dizemos anônimo, está aberto, qualquer um pode acessá-lo. Não há necessidade de nossa chave ou quaisquer restrições de segurança adicionais. Então, quando usamos admin, significa que o administrador que era uma chave mestra que permitiria ao administrador executar qualquer função, qualquer função, mas apenas no nível de administrador não pode ser executado. Vou deixar isso no nível da função para nulo e vou pressionar Create. Agora que nossa função foi criada, podemos ir até o código e testar sangria. Uma vez que estivermos nesta lâmina , nos mostrará algum código de função boilerplate. Muitas coisas que são definidas para nós. Você notará que a extensão do arquivo aqui é ponto CSS. Então, com base no modelo que você está usando, o significa usar JavaScript ou usar C-sharp, etc. Então, essa extensão de arquivo será, obviamente, diferente. E se você derrubar isso, verá que também tem um ponto de arquivo lê-me MD ou para Mark não é semelhante ao que você teria no GitHub ou um DevOps 0 para fins de documentação. E você também tem o ponto de função JSON. E esse arquivo JSON de ponto de função basicamente tem apenas configurações para associações diferentes e metadados diferentes sobre a função. Então, aqui você pode ver que é específico que estamos usando o gatilho HTTP e ele está aceitando os métodos de GET e post. Então, se quiséssemos colocar e talvez corrigir e excluir, etc, você apenas estende toda a seção. Existem quatro métodos. Há momentos em que você pode precisar modificar esse arquivo, mas por enquanto não precisamos necessariamente modificar isso. Então vamos deixar isso paz e vamos voltar ao nosso Randolph CS6. E o que vamos fazer aqui é examinar o código. Portanto, é um código muito simples , usando algumas bibliotecas. E aqui estamos incluindo biblioteca de terceiros que você provavelmente teria que obter com o NuGet se estiver fazendo um aplicativo dotnet irregular. Mas estamos usando algumas bibliotecas aqui. E então temos um método que retorna um resultado de ação ocular. Então, se você já trabalhou com APIs, você estaria familiarizado com o nosso MVC normal. Você estaria familiarizado com o resultado da ação ocular. Observe que a função acionada por HTTP geralmente é muito útil para fingir ou não fingir, mas para agir como uma API. E também é muito útil para responder a webhooks. Então, qualquer coisa que seja tráfego HTTP na função acionada por HTTP, um modo geral, está equipado para lidar com esse tipo de operação. E assim, você poderia realmente criar uma API completa ou lógica de aplicativo completa usando um conjunto de funções acionadas por solicitações HTTP, cada uma respondendo à solicitação específica de acordo. Aqui, dentro do nosso método, vemos que chegamos ao parâmetro é solicitação GTP. Vou me ligar para Rick, e também estamos colocando em uma instância do nosso logger. Então, estamos registrando informações de primeira linha onde eles estão vendo que isso foi um processo. Foi chamado de que estamos processando nosso pedido. Em seguida, estamos obtendo da solicitação uma string de consulta com o nome do nome. Portanto, estamos obtendo o valor da string de consulta com o nome do nome. E estamos armazenando isso dentro dessa variável chamada name. E então estamos vendo o processo do corpo da solicitação que o corpo da solicitação, por favor. Estou procurando esse corpo da solicitação se for JSON ou transmiti-lo para JSON, olhar dentro dele e ver se você consegue encontrar o nome. Aqui está dizendo que você encontrará a string de consulta com o nome do nome na string de consulta na própria URL. Ou você pode procurar no corpo da solicitação caso possa ter sido uma solicitação de postagem e procurar alguns dados que tenham o nome, por favor me dê esse corpo. Isso é tudo o que está apenas fazendo. Poderia ter sido em qualquer um deles porque geralmente você envia para cima ou eu recebo o que está aqui. O código está apenas mostrando que é aqui que você obtém um valor de string de consulta e é aqui que ele obtém algo de solicitações de um pesquisador. Isso é tudo o que realmente está acontecendo. Em seguida, ele vai formular uma mensagem de resposta. E é bom dizer que se essa variável de nome não é nula ou vazia, ou desculpe, se for menor, vazia, então dê a eles um erro C e que você precisa pausá-la na cadeia de caracteres principal ou no corpo da solicitação. E se não estiver em dólar vazio, então vamos imprimir o nome Hello. Isso foi executado com sucesso. Então retornamos, ok, que são 200 resultados se você estiver familiarizado com códigos de resposta HTTP, ok? A função OK devolve um código de resposta 200, bem como essa mensagem. Tudo bem, isso foi um tour pelo código. Não vou modificá-lo. Isso vai testá-lo. Então, vamos testar e executar. Vemos aqui em primeiro lugar vai dizer OK e testar, você está fazendo uma postagem ou uma chamada de método get? Em segundo lugar, que tipo de chave, certo, para que eu possa usar o monstro da chave mestra porque no portal somos os administradores e uma chave mestra pode fazer tudo de qualquer maneira. Bem, você poderia apenas testá-lo com uma tecla de função, já que foi isso que a implantamos para usar. Você pode adicionar um parâmetro aqui ou você pode mudar o corpo aqui. Então, vou para o meu nome dentro do corpo. Essa é uma solicitação de postagem. Então, quando eu clico em Executar, vou obter a resposta alfa 200 de saída ALU, olá, o nome que eu inseri. Isso foi acionado com sucesso. Então esse é um bom teste. Agora vamos voltar para a entrada e alterar os parâmetros. Então, estou fazendo uma solicitação GET desta vez e estou colocando essa consulta e estou chamando o nome da variável. Portanto, os parâmetros no nome e no valor ainda são meu nome. E eu vou apenas dizer que traço chegar. E não sei se você está experimentando isso, mas ao usar o portal, tenho que pressionar um botão e esperar que o personagem apareça. Então essa é uma das razões que realmente não gostam trabalhar no portal diretamente assim, pelo menos para esse tipo de operação. É um pouco lento para mim, mas você pode me avisar se você está experimentando isso também. Mas quando clico em Executar, obtemos os mesmos resultados. Desta vez, ele estava recebendo a partir da string de consulta em oposição ao corpo da solicitação, como fez para a postagem. Agora, se eu perder o nome desse parâmetro de consulta e depois executar, entraremos em nosso erro. Esta espuma acionada por HTTP Sean foi executada com sucesso. Mas, por favor, passe os dados como é esperado. Isso é praticamente segurado. A função acionada por HTTP funciona. Solicito que venha com dados. Escrevemos código para analisar os dados, manipulá-lo para o que precisamos fazer com ele. E então talvez enviemos de volta, escrevemos um registro para que possamos realmente caminhar o caminho de execução. Mas também deixamos que eles saibam o tipo de resposta. Então, eu poderia realmente responder NC, se o parâmetro de consulta não fosse nulo, então retornar um novo resultado de objeto de solicitação talvez ruim, certo? Algo assim. Isso é praticamente obras de retenção. Não, eu posso realmente obter o URL da função clicando neste botão acima. Então ele dirá, me dê o padrão. Bem, qual link você quer? Então, na verdade, incluirá a chave nesse URL. Quero a chave mestra ou quero uma tecla de função? Então eu fui deixá-lo por padrão. E se dermos uma olhada nesse URL, e eu vou usar o Notepad Plus Plus. Aqui vemos que temos a URL para a função ativa. E, em seguida, diz barra API e, em seguida, o nome da função. E então o código é igual a, e então essa string silenciosa, que é essa chave, Essa é a tecla de função. Então, se eu precisasse executar isso a partir de qualquer tipo de aplicativo que eu esteja escrevendo, então eu tenho que executá-lo novamente. Então você está olhando para o mínimo assim. Sem esse código, ele nunca chegaria ao destino. Ele apenas rejeitaria o pedido por completo. Se passarmos pelas outras páginas que estão disponíveis para nós a partir desta tela, podemos ir para a integração que nos permite editar certas coisas. Então nós candidatos acionador, podemos editar a função, podemos modificar as entradas e as saídas são alguns mini fluxograma, apenas para dizer que é aqui que está começando, este é o processo e isso é o que se espera. Podemos ir até o monitor, o que basicamente nos mostra que todas as execuções e o proprietário para eles foram bem-sucedidos, quantas delas falharam? Então podemos ir para as teclas de função, que nos mostrarão nossas chaves. Podemos sempre clicar para visualizar o valor porque estamos usando a tecla de função, que é a nossa tecla de função se você precisar recuperá-lo, se você precisar renová-lo, redefini-lo , etc, o que você precisar fazer, isso é praticamente isso para configurar uma função acionada por HTTP. 9. Crie uma função de disparo de temporizador: O próximo tipo de função que vamos analisar é uma função acionada por temporizador. Então, isso foi despejado em funções. Vá em frente e clique em Criar, e desta vez queremos que o timer seja acionado. Então clicamos em Timer Trigger e podemos dar um nome a ele, alguém para sentar a função acionada por temporizador. Em seguida, podemos configurar o cronograma. O cronograma é baseado em uma expressão crônica. Então, se você está familiarizado com o Linux, hum, então expressões crônicas são exatamente como você representa o intervalo em que você quer que algo seja repetido. Então você pode ver aqui que está na forma de um segundo, depois minuto, então todos nós somos para que cada asterisco basicamente representa essa unidade de tempo. Praticamente aqui. Está vendo 0 segundos, mas cinco minutos. Então, se eu mudar isso para um, então seria como sempre minutos em vez de mais de cinco minutos. E então esse asterisco representaria o menor que o d e depois o dia da semana ou o mês e o dia da semana. Então isso é tudo o que você realmente agendaria que pode levar um pouco de se acostumar se você não estiver familiarizado com a forma como é, mas é uma construção muito poderosa para entender e apreciar. Então, vamos em frente e crie essa função acionada por temporizador. Depois que isso for criado, podemos pular para o código e testar. E você vê aqui que é um pouco de código relativamente simples. Temos uma função chamada Ron, e ela tem um parâmetro chamado meu temporizador, que tem todas as coisas que você pode precisar em torno de um objeto que lhe permita brilhar. Sou detalhes sobre o temporizador que está sendo usado e ele tem a biblioteca de registros também. Ele estará registrando as informações ou fazendo um registrador de informações outro cada vez que for executado mostrando o carimbo de data/hora. Se eu olhar nos registros a cada minuto, você vai ver isso povoar, então eu vou deixá-lo tão minutos e depois mostrar as consequências. Tudo bem, então esperei por dois minutos. E lá você pode ver a execução pelo primeiro minuto e a execução pela segunda vez. Tudo bem? Isso é praticamente o que o serviço de temporizador traz para você. Tenho certeza de que você está pensando diferentes aplicativos que isso possa ter, pode estar em um aplicativo onde você precisa fazer uma limpeza todas as manhãs ou todas as noites, ou você precisa de processamento em lote para entrar todos os dias em um determinado momento. Você tem vários aplicativos para funções acionadas por temporizador, temporizador. Nessa situação, não preciso que ele seja executado em segundo plano. Se você não quiser que ele seja executado em segundo plano, você sempre pode simplesmente desabilitar. E já analisamos como podemos excluir uma função. Então eu acabei de desabilitar este para talvez no futuro quando o usamos novamente, mas é realmente isso para um todo. Você cria funções acionadas por temporizador e como elas funcionam. 10. Crie uma função de compensação de blob: Tudo bem, em seguida, vamos ver o que é preciso para criar uma função acionada por blob. Então, vamos criar na lâmina, vamos procurar por blob. Assim que ele carrega. Lá vamos nós. Então, à medida que o armazenamento de blobs é acionado, certo. Então você vê que há vários deles e eu encorajo você a realmente experimentá-los. Você pode tê-los úteis fora dessas demonstrações que estou fazendo. Então eu encorajo você a ir em frente e tentar ver como é o trimestre, ver como é o código de vinculação. Mas aqui, quando fazemos o gatilho Armazenamento de Blobs, posso alterar o nome para que seja a função acionada por blob. E então nosso caminho será, basicamente o caminho vai ser onde devo procurar? Slash, acabe expressão de vinculação, o que devo procurar? Então aqui estou dizendo que estou procurando o nome do que quer que esteja no blob. Essa é uma expressão vinculativa. Dê-me o nome para que ele me permita acessar esse tópico. E, em seguida, a conexão da conta de armazenamento, ela vai perguntar qual ícone de armazenamento devo usar? Portanto, ele será assumido como padrão um já associado ao AP que a função está sendo hospedada. Então, vou em frente e clique em Criar. E para este, vamos ao código e teste, onde veremos que temos informações vindo de um, o fluxo que está sendo chamado de meu blob. E então o nome que é a expressão de vinculação que configuramos. E então temos o logger. Claro, isso é sentar e assistir aquela bolha. Agora vamos mudar para o ponto de função JSON e olhar novamente. Portanto, temos o nome do tipo Blob Trigger, temos o caminho, amostras, itens de trabalho de traço, barra o nome. Então, o que precisamos fazer é ter um blob que exista com esse nome. Se eu olhar em minhas contas de armazenamento e chegar ao armazenamento, irei e, caso você não esteja familiarizado, você pode ir ao painel, você pode vê-lo em todos os recursos. Caso contrário, você pode simplesmente ir para contas de armazenamento. E, em seguida, você pode clicar em contas de armazenamento. Isso não mostra todos os seus contêineres. Portanto, esses contêineres são realmente a espécie em que os arquivos serão armazenados. Não quero ter um contêiner com esse nome. Seja qual for o nome que você eu sentaria alguns itens de trabalho tracejados eram o padrão. Nós não mudamos isso. Qual CPI alterá-lo, seja qual for o nome que você colocar lá, você tem que se certificar de que você tem um blob que existe com esse nome. Então, vou criar esse contêiner e apenas ir em frente e fazer isso e saber que ele existe. Posso começar a adicionar arquivos. Então, vou fazer upload um arquivo de teste que tenho no meu computador. Então, basta clicar em Upload, selecionar o arquivo. E às vezes isso pode ser mais rápido se você tiver o Storage Explorer. Então essa é, na verdade, uma ferramenta de terceiros que, se desejar, você pode instalar o Microsoft Azure Storage Explorer que permite lidar com todas as contas de armazenamento dele e tudo do seu computador, mas isso é uma conversa para outro momento. Divida o arquivo e escolha meu arquivo de teste e faça o upload dele. E você vê que eu o carreguei na aba. Se eu voltar para a função e examinar o log que você vê aqui, ele está registrando que ele vê um novo arquivo e esse é o caminho. Você vê o nome lá, blob dash test.txt. Você vê o tempo de inserção de tempo criativo em todas essas coisas. É assim que você pode se sentar e observar o ouvido de armazenamento para ver. Talvez você quisesse compactar imagens assim que elas forem carregadas. Talvez você queira movê-los ou renomeá-los. Há várias coisas que você pode fazer com algo assim. Mais uma vez, seus contextos sempre determinarão sua aplicação. 11. Revisão de seção - Funções diferentes do Azure: Então, onde está o final desta seção? E vamos apenas rever o que aprendemos. Um no caso de você ter perdido na primeira vez que fizemos de novo, e fizemos mais três vezes. Sabemos como criar uma nova função. Então, dentro da nossa função, criaríamos e, em seguida, escolhemos na lista, aquele, os modelos que melhor se adequam ao que precisamos. É melhor criá-lo a partir dos dez pés em vez de criar um e depois personalizá-lo para outro. Mas vamos trabalhar com o que ele nos dá como modelos. E analisamos o gatilho HTTP, analisamos o acionador do temporizador e analisamos o gatilho do Armazenamento de Blobs. No entanto, com base nos diferentes recursos e serviços com os quais você pode acabar interagindo, você pode começar com o modelo apropriado desde o início. Ao analisar nossas solicitações HTTP para focar, vimos que recebemos um mini painel que nos permite ver as execuções que falharam, quantas vezes temos uma causa bem-sucedida, talvez 400 chamadas, cláusula 500, etc. Todos estes, hum, estão prontamente disponíveis para nós. Podemos obter o URL da função, que estabelecemos tem o código ou a chave anexada a ele, o que nos permite conectá-lo a qualquer aplicativo. Também discutimos que, ao criar a função, pelo menos a função HTTP, podemos criá-la como anônima ou para acesso anônimo para um nível de função segurança ou mesquita fornecer segurança ou nível de administrador segurança. Nós olhamos para tudo isso. Este é restrito fora do nível de função como está. O teste de código mais. Podemos ver o código que precisamos modificar. Claro, o que este faz é que ele parece tanto na string de consulta quanto no corpo da solicitação com base no tipo de solicitações que estamos fazendo, não usaríamos uma e não a outra talvez ou ambas. Depende do seu contexto. Podemos sempre testar por conta própria a partir dessa interface e podemos visualizar os registros aqui para ver o que está acontecendo com base em nossas informações de registro que escrevemos em nosso código. Portanto, esta é a era do console que nos fornece todos os dados. Consequentemente. Saiba, quando vamos para a integração, isso nos dá um bom tipo de tela de fluxo de trabalho que nos permite modificar algumas das ligações e veremos as ligações mais tarde. Portanto, temos ligações de entrada e ligações de saída. Temos o gatilho que podemos modificar. Podemos saltar de volta para o código. Se olharmos no monitor, vemos aqui que obtemos acesso aos insights do aplicativo. Porque lembre-se que ativamos isso quando criamos a função para cima. Assim, podemos ver todas as invocações. Cada vez que era executado, qual foi o resultado, quanto tempo demorou, foi uma execução bem-sucedida ou não. Também podemos procurar nos registros registros mais detalhados de tudo que aconteceu ou está acontecendo com o aplicativo. Naquele momento. Nós também podemos ir para as teclas de função e podemos criar uma nova tecla de função, se quisermos, podemos revogar uma, podemos renovar. Se precisarmos ter controle total sobre como essa função funciona. E tudo isso é apenas a função de solicitação HTTP. Mas também vimos que, embora semelhante, cada tipo de função tem suas próprias nuances com base no que ele está lá. O temporizador acionou um, ele fará algo de vez quando com base na expressão Cron que especificamos. O Blob estava acontecendo nos observando espaço para que nosso arquivo fosse deixado lá e então ele pode processá-lo. Então, todas essas coisas são possíveis com tudo isso feito, concluímos esta seção. Quando voltarmos, vamos analisar o uso do Visual Studio para criar uma função para cima. E veremos quais são as diferenças entre fazê-lo no portal e usar o Visual Studio em nossa máquina. 12. Funções do Azure no Visual Studio: Tudo bem, então nesta seção vamos criar algumas funções são uma função usando o Visual Studio. O que eu fiz aqui é que pulei para o Porto, cria, fui para funções e, em seguida, selecionei o Visual Studio na lista suspensa. E eles descrevem tudo o que você precisa para colocar isso em funcionamento. Eles ainda são mencionados no Visual Studio 2019. Então, se é com isso que você está trabalhando, então não há problema que você possa acompanhar. Mas usarei o Visual Studio 2022 para esse conjunto de atividades. Você pode seguir essas instruções. E realmente e realmente isso é praticamente o que eu passei com você. Se você quiser apenas ler isso e pular o resto dessas lições, então isso depende de você. Mas, por enquanto, vou continuar e vamos apenas no próximo vídeo, pular para o Visual Studio e começar. 13. Crie um aplicativo de função: Tudo bem, então, neste momento, presumo que você já instalou Visual Studio e já configurou sua carga de trabalho do Azure, como discutimos no início deste curso. Para começar, vamos pular e criar um novo projeto. E então você pode filtrar. Você sempre pode pesquisar o período de modelos como suas funções. Ou se você já fez de uma só vez. Em algum momento, seria para o lado. Aqui. Vou ver um 0 funções Fundamentals. Esse é o nome do projeto e da solução. E então eu apenas pressiono em Criar. Nesse ponto, eles vão me fazer algumas perguntas. Primeiro, que tipo de modelo eu gostaria? Tão semelhante ao portal onde poderíamos escolher um modelo, eles estão me perguntando, Você quer um serviço acionador, etc, etc. Você verá nos modelos. Desta vez, vou com aqueles vazios para que possamos fazer uma pequena exploração. Então, vou dizer vazio e então posso usar um emulador de armazenamento. Portanto, se você estiver fazendo isso sem talvez ter acesso direto à assinatura do Azure, ou ainda não chegou tão longe com o Azure, você poderia realmente usar um emulador de armazenamento onde iremos fingir que você tem um armazenamento de cones comprados fora curso com algumas limitações. Então, vou continuar com tudo isso e seguir em frente e clicar em Criar. Assim que esse projeto for criado, podemos ver alguns dos arquivos que estão disponíveis para nós. Então eu queria começar com os arquivos do projeto. Então, no dotnet, coisas desque.net Core três pontos um O boards, quando você clica no arquivo de abordagem CS, você pode realmente ver o arquivo XML por trás dele. Você sempre pode clicar com o botão direito do mouse e ir para Editar arquivo do projeto e você também obterá essa visualização. Este arquivo é um pouco maior. Este arquivo realmente apenas descreve a fonte que estamos segmentando, o dotnet busca framework e estamos usando versão do Azure Functions para no momento desta gravação, este é o mais recente e maior. E quando vamos trabalhar, temos que fazer referência ao pacote Microsoft.Net.sdk dot funções. E aqui está falando sobre dois arquivos que nos são dados host ponto JSON e ponto local settings.js SON. E eles estão nos informando que eles vão copiá-los para o diretório de saída para o settings.js local em cada um nunca vá para um diretório publicado. E isso é realmente porque é um arquivo local, mas veremos o porquê em alguns. Então, se saltarmos para o arquivo JSON do ponto do host, é apenas um arquivo de configuração. Está dizendo OK versão 2, veremos o que isso significa em alguns, mas também tem algumas configurações em log onde ele está vendo que deve usar o Application Insights, que é o que sabemos que ativamos em nossa função para cima. Isso é realmente tudo o que está acontecendo lá. Quando olhamos para as configurações de lote local, JSON, ele está nos informando que não está criptografado e tem alguns valores. Portanto, o armazenamento 0 Web Jobs, sabemos que, na verdade, é suposto ser a conta de armazenamento associada a uma função ativa. Mas porque estamos usando o armazenamento de desenvolvimento definido como verdadeiro, esse é o valor que ele está vendo. Apenas finja que ela existe praticamente. E então está nos dando trabalho ou tempo de execução dos oceanos que é definido como dotnet, o que poderia ser algo baseado no tipo de linguagem que está sendo usada. Mas porque estamos usando C-sharp, precisamos de um tempo de execução dotnet. Portanto, isso é, por padrão, definido como dotnet. Então esse é um tour básico dessas funções para cima. E os dois arquivos que temos. Quando voltarmos, começaremos a escrever algum código para escrever uma função. 14. Função de teste no Visual Studio: Tudo bem, então agora que temos nosso projeto em funcionamento, o que não temos é uma função real. Tudo bem, então vou clicar com o botão direito do mouse no projeto, ir para Adicionar e depois fui ver a nova função do Azure. Quando eu fizer isso, escolherei o nome desta função e deixarei a função padrão de um ponto CS não quer que este não seja CSS de ponto desta vez, mas deixarei o nome padrão. Vá em frente e clique em Adicionar. Sei que esta janela de diálogo nos pergunta qual modelo gostaríamos. Então, temos isso primeiro quando você está criando um projeto, fomos com um vazio, mas seu dinheiro. Para cada função que vamos criar, estamos vendo os mesmos modelos que teriam visto no portal. E cada um deles estaria nos perguntando as mesmas perguntas de configuração que teríamos visto se estivéssemos criando no portal com um temporizador ainda fosse conseguir configurar o cronograma com o blob, ainda conseguimos configurar a conexão. Bem, este é um pouco diferente do que vimos antes, onde nos sentamos para configurar o caminho e várias coisas. Bem, vou com um caminho de menor resistência. Vamos com o gatilho HTTP e vou escolher um anônimo desta vez. E vamos seguir em frente e adicionar. Uma vez que fizermos isso, obtemos esse arquivo de função. E vou notar que tudo o que temos foi que os pontos do arquivo CSV, os pontos CS6 cinco. Também não temos uma função que o arquivo JSON. Então, o que acontece é que quando usamos o Visual Studio para criar nossas funções, ele realmente irá compilá-lo em uma DLL. E se você estiver usando dotnet por tempo suficiente, você sabe o que é uma DLL. E então essa DLL, teremos todas as informações que o portal precisa usar quando for implantado para verificar quaisquer configurações e qualquer outra coisa que eu escrevi. Então, ele será pré-compilado pelo Visual Studio e apenas implantado Azure em vez de se reunir em um 0 e depois compilado em um 0 e depois usado no Azure, como o que estamos fazendo no portal. Então você provavelmente é um espaço mais familiar quando está escrevendo seu código e tem melhor acesso a inteligência e recursos aqui no Visual Studio, também podemos lidar com depuração muito melhor porque poderíamos executá-lo no modo de depuração e definir nossos pontos de interrupção como faríamos com qualquer outro tipo de aplicativo que estaremos construindo dentro do Visual Studio. Aqui temos uma classe estática e, em seguida, temos o nome da função. E então temos um método estático chamado run, que sabe que é um gatilho HTTP. Ele sabe que o nível de autorização é anônimo, o que eu sempre posso mudar aqui para ser função, é claro, você teria que ter mais alguma configuração em torno disso com a chave, etc. o que eu sempre posso mudar aqui para ser função, é claro, você teria que ter mais alguma configuração em torno disso com a chave, etc. isso é anônimo. Temos os diferentes tipos de solicitações que são aceitos. Então, OBTENHA e publique. E então podemos definir uma raiz e várias coisas que estão disponíveis para nós aqui. Por fim, porém, o código ou o código no corpo da função em si é praticamente parecido com o que tínhamos visto anteriormente. Se fôssemos executar isso e eu vou acertar F5 e eu vou definir um ponto de interrupção apenas para mostrar que depuração desses funciona. Se eu bater em F5, ele vai para o Visual Studio. Coisas do Visual Studio. Se for sua primeira vez, você pode vê-lo instalando algumas ferramentas à medida que avança. Mas aqui vemos que está em execução aberta. Então, está nos informando que para chegar a essa função, temos que enviar uma solicitação por meio desse URL. Vou pegar esse URL emprestado e vou usar uma ferramenta que usamos para testes EPA chamada Postman. Então, se você não tiver pós-dinheiro, sempre pode ir em frente e instalá-lo. É muito fácil encontrar POSTS ME n, mas é uma boa ferramenta ter apenas solicitações HTTP aleatórias descendentes quando você está testando. Então, vou apenas ir em frente e colocar o URL. Vou deixá-lo como eu conseguir. E para os parâmetros vou colocar nesse parâmetro name. E fui ver o teste do carteiro como o valor. Então, quando eu enviar, ele se conectará ao nosso aplicativo que está em tempo de execução, IACUC tomando os pontos de interrupção. Portanto, note que ele está definindo um ponto de interrupção, eu posso realmente interrogar meus objetos. Então, vamos dar uma olhada no pedido em si. O objeto de solicitação tem tudo sobre as solicitações HTTP. Tem um mito que estava sendo usado. O caminho, tudo o que eu preciso saber praticamente se eu não perguntar, vou ver que o okayed encontrou um na lista e ele tem o nome da chave e o ajuste de testes de valor lá. Posso verificar que é suposto acertar o nome. Então, se eu apenas apertar F5, posso remover esse ponto de interrupção, e eu apenas apertei F5 para que ele continue. Em seguida, a janela do console surgiu quando você foi para o modo de depuração. Mas se eu voltar para o Postman, que é a ferramenta que fez a solicitação, então você vai vê-lo respondido com um 200. Ok, olá testes do carteiro. Esta função acionada por HTTP foi executada com sucesso. Isso é apenas realizar testes locais podem acontecer, não. Então, podemos realmente usar ferramentas como Postman e qualquer outra ferramenta que você possa ter, talvez Fiddler ou até mesmo seu navegador. E tente fazer esses tipos de operações. Podemos depurar saber, e podemos interrogar melhor nosso aplicativo ou uma função, desculpe, código à medida que estamos criando ou regras de negócios para o nó, é isso mesmo. Agora sabemos como criar uma função usando o Visual Studio Hall para testá-la e segurar a integração com ferramentas de terceiros em seu navegador para acionar HTTP ou solicitações. Saiba, à medida que avançamos, ficaremos um pouco mais complicados. Mas, por enquanto, é isso de como criamos uma função usando o Visual Studio. 15. Revisão de seções - Funções no Visual Studio: Tudo bem pessoal, então é isso mesmo para esta seção, analisamos como podemos configurar o Visual Studio 2022 ou 2019 com o Azure relacionado a conjuntos. Então, instalamos como sua carga de trabalho e isso nos permite criar nossas funções. E isso é realmente apenas uma função para cima. Então você vê aqui, cada função que criaríamos neste projeto seria um arquivo autônomo que é uma função. Quando implantarmos isso, o que faremos mais tarde. Isso está apenas molhando nossos pés. Mas quando implantamos todo esse projeto, ele está realmente implantando-o como uma função com funções diferentes. Se tivermos várias coisas que você deseja realizar e uma função por tarefa, então temos um projeto com cada função para tarefa, uma configuração de configuração que governa todas essas funções interagem uns com os outros e, provavelmente, qualquer outro serviço que eles precisam e qualquer serviço de terceiros nessa implantação é feito. Quando voltarmos, veremos como você pode usar o Visual Studio Code para desenvolver suas Funções do Azure. 16. Como usar ferramentas principais de função Azure Function: Tudo bem pessoal, então vamos direto para esta seção em que discutiremos as funções do Azure usando o Visual Studio Code bem como as ferramentas principais. Então eu estou em um pH aqui, estamos trabalhando com uma função 0 ferramentas principais é o título para que você possa chegar lá, você pode facilmente apenas Google suas ferramentas principais de derramamento de espuma, e é a documentação da Microsoft Ciceronian, as ferramentas principais nos permitem desenvolver e testar funções localmente. Portanto, essa é uma opção melhor do que Visual Studio porque é multiplataforma. Portanto, ele cria um tempo de execução em sua máquina para simular como o tempo de execução da função 0 precisa ser. E então você pode desenvolver e testar localmente, é claro, antes de publicar. É claro que, mais uma vez, as visitas ao permitem que você faça isso, mas isso nem sempre é uma opção baseada em seu sistema operacional e outras limitações que você possa ter. O que podemos fazer com as ferramentas principais, se rolarmos para baixo, veremos as diferentes versões. Então, agora estou usando a versão quatro porque estou usando dotnet seis balas, é claro, com base em qualquer que você esteja preso ou em qualquer versão do dotnet, certifique-se de que você vai usar a versão correta das principais ferramentas para instalação. Temos as instruções para Windows, Mac OS e Linux, certo? Então, com base no seu sistema operacional, você vai em frente e usa o que precisar. Estou no Windows, vou usar o de 64 bits que inicia o que inicia instalador típico do Windows com o qual estamos acostumados. E podemos simplesmente ir em frente e apertar Next cada vez e deixá-lo instalar. E enquanto isso está acontecendo em segundo plano, vou apontar até que eles também possam acessar as ferramentas principais do GitHub. Assim, você pode ir para o projeto do Azure e esperar pelas contas do Azure Functions ou Azure, em vez disso, Andrew for Azure Function como suas ferramentas principais do Functions. E então eles têm instruções de instalação de acordo com o que você está preso, provavelmente um pouco mais de informações do que você veria prontamente na documentação da Microsoft. Então essa opção também existe. Ninguém diz que terminou, vou lançar meu Visual Studio Code. E o que eu normalmente faço sempre que tenho um novo projeto para construir é eu apenas seguir em frente e criar uma nova pasta. Criei e abri uma nova pasta em algum lugar da minha máquina. E eu meio que suponho que você esteja familiarizado com o Visual Studio Code, mas se não, o que eu normalmente faço é clicar em Abrir Pasta e navegar até onde eu quero que crie a pasta e em seguida, use a pasta que acabei de criar. E é isso que cria meu projeto. Vou fazer todas as minhas operações não relacionadas à função 0 aqui. Nesta interface. Deixe-me fazer isso um pouco maior para que possamos vê-lo. A próxima coisa que eu queria fazer é abrir uma janela de prompt de comando. Então, se você estiver no Linux, se você estiver em simulação, você pode ser diferente do Havaí, eu estou usando, mas no final do dia, todos podemos concordar que o prompt de comando é muito semelhante em todas as plataformas todos os comandos que vou usar aqui será utilizável em qualquer sistema operacional que você estiver usando para verificar. Bem, em primeiro lugar, o que eu fiz foi navegar até a pasta onde eu sei que meu projeto é. E então eu não vi. E foi aí que fomos verificar se as ferramentas principais foram instaladas com sucesso. Então, temos esse bom particular incalculável. E então temos toda a documentação sobre os diferentes comandos que podemos executar. Aqui vemos que a unidade criaria uma nova função na pasta atual e inicializaria um repositório Git. Então, vamos tentar esse. Então eu passei por isso se o espaço UNC nele. E então ele vai me pedir para selecionar o tempo de execução. Então, é claro que eu queria dividir o tempo de execução do dotnet, já que estamos usando C Sharp e diminuí-lo, então está fazendo isso. Vejo aqui que ele é preenchido nos arquivos em segundo plano enquanto fazia a coisa. Não, eu tentei o mesmo comando dentro do terminal incorporado ao Visual Studio Code. E como você pode ver, eu tenho um erro. Então, esperava que pudéssemos fazer tudo de dentro do terminal em vez do Visual Studio Code. Mas claramente existem algumas limitações e isso não é problema. Então, só temos que entender qual ferramenta pode ser usada para watts quando precisamos dela. Apenas olhe para o fuzzer foram criados. Temos essa pasta de código VS que tem um arquivo de extensão apenas para garantir que as ferramentas do Azure ou as ferramentas de função 0 estejam instaladas, nos dê a melhor experiência possível em Código Visual Studio. Também temos o gitignore. Ele criou esse arquivo CSV com o qual estamos familiarizados e os outros dois arquivos JSON que também já estavam familiarizados. Se eu quisesse uma nova função e apenas, apenas uma nota, lembre-se que quando fizemos func init, ela nos pede para o tempo de execução. Portanto, talvez você não queira necessariamente um tempo de execução dotnet.net. Você pode querer um pedido a tempo ou um tempo de execução Python com base na sua inclinação para sua linguagem de programação e ambiente preferidos. E isso é completamente bom. O fato é que ele suporta muitos idiomas diferentes. Estou focando apenas no dotnet porque tenho uma máquina Windows. E se você estivesse usando uma simulação e isso não é realmente uma desculpa. Só estou dizendo que estou focando no dotnet porque é isso que estamos fazendo para este curso. Então, se eu quiser uma nova função, usarei isso se você não viu o comando novamente e então eu diria Novo. E se você não tiver certeza, você sempre pode voltar e olhar os comandos que me permitiriam saber selecionar na lista qual novo tipo R, qual modelo eu gostaria para minha nova função. Então eu vou escolher um que não fizemos antes, este pequeno gatilho Cosmos DB. Eu posso fazer isso. Pressione Enter, então ele vai dizer qual deve o nome b. Fui ver a função acionada do Cosmos DB. E então, quando eu pressionar enter, ele seguirá em frente e fará sua magia. E, em segundo plano, você verá o pop-up de arquivo apropriado no código do Visual Studio. Isso resume o fim de semana inteiro, use as ferramentas principais do Azure e a linha de comando para iniciar o processo. Agora, o problema é que você pode não estar usando o Visual Studio Code como editor. Você pode estar usando um editor diferente, mas para usar as ferramentas principais, você pode realmente fazer tudo aqui. E mesmo se você estivesse usando o Notepad Plus, Plus, você poderia simplesmente entrar e editar os arquivos que estão sendo depositados na pasta quando estiver executando seus comandos aqui. Então, quando voltarmos, vamos analisar o gerenciamento do projeto, fundindo apenas o Visual Studio Code. 17. Como usar o Visual Studio Code: Tudo bem pessoal, então vamos usar o Visual Studio Code para iniciar uma função do zero. E veremos as diferentes ferramentas e nuances diferentes que o tornam diferente de usar as ferramentas principais e o próprio Visual Studio. Dito isso, vamos começar. A primeira coisa que você quer ter certeza de que mencionamos isso anteriormente, mas vou mencioná-lo novamente. Certifique-se de que você tenha a extensão do Azure Functions instalada. Saiba o que eu tenho é a extensão do Azure Tools com a qual veio com É um pacote de extensões. Então, ele veio com várias extensões relacionadas ao Azure. E acabei de fazer isso porque faço alguns desenvolvimentos do Azure. Eu prefiro tê-los quando estiver pronto para eles e depois caçar no momento. No entanto, se você não quiser todo o parque, não há problema. Você pode procurar a extensão do Azure Functions apenas pesquisando aqui. E esse só lhe dará o que você precisa para garantir que você possa fazer o desenvolvimento do Azure Function. Apenas ler a documentação é realmente bastante informativo e informa como você pode instalar e configurá-la , executar e implantar. Quando for a hora certa. O emblema na documentação é um pouco diferente do emblema que tenho na tela, pelo menos no momento desta gravação. Mas está tudo bem. Adivinhar que eles vão funcionar de forma muito semelhante de qualquer maneira. Então, vou clicar nisso como sua seção e, em seguida, ela me permite visualizar todas as funções. Eu criei uma nova pasta, que você também pode fazer se precisar, mas vamos resolver isso. Então aqui tenho a opção de criar um novo projeto, criar uma nova função quando já estou em nosso projeto e implantar a função para cima, que seria todo o projeto. Então, vou começar com o projeto criativo. que então me pergunta, estranho, você quer colocar este novo projeto para que você possa navegar e, em seguida, criar uma nova pasta onde quer que esteja. Eu já criei uma pasta chamada como seu telefone, o código básico do Sean. É basicamente no mesmo lugar que o anterior que eu estava usando as ferramentas principais nos dirá vá em frente e selecione isso. E então os incidentes me pediram para selecionar um idioma. Vou me misturar. Está acima disso. Temos lidado com o C-Sharp todo esse tempo, principalmente porque era o Windows e porque eu tenho usado o Visual Studio e usaremos o Visual Studio daqui para frente, ambos em uma sessão de código aberto. Todas essas são opções que você pode ter alguém para acompanhar. Typescript faz algo diferente, então eles querem um modelo para a primeira função que podemos ignorar que será semelhante a criar o projeto vazio no Visual Studio e, em seguida, adicionar as funções mais tarde. Nessa situação, vou começar com um gatilho HTTP. Então deixe-me fazer isso. Deixarei o nome padrão, pressionarei Enter e o tornarei anônimo. E com todos esses donuts criando. E então ele terminou as grades em um projeto e depois fez um monte de coisas. E ele inicializou um repositório Git para mim com todos esses arquivos padrão quando eu subo a listagem do projeto, tenho uma pasta de código VS que tem as extensões e inicializando arquivos para garantir que eu tenha a melhor experiência ao usar o Visual Studio Code, tenho uma pasta para o gatilho HTTP que tem a função dot js. Já sabemos o que esse arquivo é longe que já o vimos antes. Ele também tem esses arquivos de índice. Então, ao contrário do arquivo C-Sharp, que tem um arquivo CSS de ponto, escolhi TypeScript, então não é um arquivo TSV, que é realmente apenas um arquivo JavaScript encapsulado. Se você conhece porta, nenhum desenvolvimento ou angular e tal, então você codifica TypeScript parece praticamente que é apenas uma versão JavaScript do que já sabemos. Ele está tomando a solicitação como uma solicitação HTTP. Ele faz seu contexto, que é o contexto da função onde o registro em log. E então vamos e obtemos o nome da string de consulta ou do corpo. Em seguida, imprimimos de acordo com se os dados voltassem ou não. Temos algum arquivo. Temos uma função ignorar arquivo, tenho um arquivo de ignorar presente e, em seguida, temos os arquivos JSON do host. Então você vê aqui que o tempo de execução é roído na última vez em que seria ponto nesse arquivo de pacote. E temos um arquivo de configuração TS. Tudo bem. Esses são todos os arquivos que recebemos da caixa. Eu só vou seguir em frente e executar esse alguém para começar a depuração. Você pode vê-lo instalando outras coisas no seu computador. Claro, ter a versão mais recente do Node já instalada nesta situação é imperativo para que isso realmente executado localmente porque obviamente depende de náuseas, precisa ter o Node e o npm instalados sua máquina. Vemos aqui no console que temos o URL para nossa função. Não seguramos o testículo ou podemos usar um navegador ou podemos usar o Postman. Então, para falsificar, solicitar que alguém vá para um carteiro, eu vou colocar o novo URL, então é o que você, ou eles lhe dão aqui, barra api slash HTTP trigger one. E então eu fui colocar a string de consulta para o nome. Então eu fui enviar isso. Você vê aqui que o logotipo e o fundo ficaram loucos, certo? Então, diminuiu a atividade. E é claro que obtivemos essa resposta como uma resposta de 200 OK. É praticamente isso para usar o código do Visual Studio, depurando a formação no Visual Studio Code. E então, é claro, podemos implantável. Nós olhamos para tudo isso. Vamos passar por todo o desenvolvimento de todo um conjunto de funções em algumas, mas estamos apenas dando isso passo a passo? Não. Pouco antes de eu seguir em frente, você pode acompanhar se quiser, mas você não precisa necessariamente colocar no tempo de execução das ferramentas principais. É imperativo que você saiba qual versão do tempo de execução das ferramentas principais versus versão comutada do dotnet você está usando. Dotnet six ainda é relativamente novo no momento desta gravação. O ferramental nem sempre será trabalhoso e 24 semanas. Então aqui eu passei pelos mesmos passos, mais uma vez, criando um novo projeto, mas escolhi C-sharp desta vez. E você está vendo aqui que você pode usar.net Core três são dotnet F5. Fui escolher dotnet F5, e depois fui fazer um gatilho HTTP da mesma maneira. Então, é claro que eu disse que tudo isso abre uma nova função gravando pasta, desculpe. Apenas reaproveite tudo aqui. Essa é uma função C-sharp que se parece o que temos visto. Então, se eu apenas fizer uma corrida, eu só queria arruinar e ter certeza de que meu tempo de execução é, eu estaria desistindo de criar um projeto dotnet usando o Visual Studio Code. Foi como eu disse, o ferramental pode não ser necessariamente estável. Precisa ser no momento, mas espero que, no momento em que você estiver fazendo esse curso, todas essas nuances se foram. Então, sim, foi bem sucedido. Aqui vemos que o tempo de execução está em alta e estou depurando com sucesso minha função C-sharp beast. Estou vendo tudo isso para dizer que talvez quando você gira com as ferramentas principais e você pode estar em uma versão e , em seguida, você tenta editá-lo no Visual Studio Code e, em seguida, tentar executar no modo de depuração no Código do Visual Studio, talvez você não tenha necessariamente a melhor experiência se as ferramentas e as aversões não forem as mesmas, você pode acabar recebendo erros estranhos como configurações ausentes e tal. Então eu só estou apontando que caso você acabe assim, é melhor começar em um só lugar e fazer tudo em um só lugar. Então, se você começar com o código do Visual Studio, tudo lá. A mesma coisa com o Visual Studio, etc, etc. Com tudo isso feito e dito, vou chamá-lo de desistir desta lição. Espero que você tenha aprendido e equipado em campo e pronto para o projeto à frente. 18. Revisão de seções - Funções do Azure no Código Visual Studio: Tudo bem pessoal, assim por diante. Nesta seção, analisamos ferramentas alternativas para o Visual Studio. Visual Studio é uma grande pesquisa para besta, é claro, mas nem sempre é a melhor ou a única opção para algumas pessoas. Analisamos o fato de que você pode realmente obter as ferramentas principais. Você pode girá-lo a partir daí. Você pode usar um editor de texto comum e alguns comandos no prompt de comando. E você pode pelo menos ter uma boa experiência desenvolvendo seu telefone. Mostrado está implantando e interagindo com eles. Também analisamos o Visual Studio Code, que é um doente muito crítico para o que o Visual Studio oferece a você. E tem excelentes conjuntos de ferramentas, uma inteligência para ajudá-lo suas tarefas de desenvolvimento. Ele permite que ele depure exatamente o mesmo que pegamos emprestado algumas coisas. É muito bom, como eu disse, por um segundo. Se você não tiver o Visual Studio ou isso não for uma opção para você. O Visual Studio Code é um excelente recurso para usar quando você deseja desenvolver o Azure Functions. 19. Vinde funções do Azure e funções duráveis (orquestrador): Ei pessoal, bem-vindos de volta. Nesta seção, veremos alguns outros recursos ou funções que provavelmente ainda não abordamos. Então, fui aprofundar um pouco mais nas ligações de entrada e saída. Nós abordamos isso antes, mas vamos passar por alguns exemplos práticos. Também veremos Funções Duráveis e história da arte. E vamos ver a configuração de um manipulador. Então, vamos usar o Visual Studio Code para a maioria dessas atividades. E você verá como tornar as funções um pouco mais robustas. E todo o fim de semana deixou-os interagir com outros serviços fora de apenas um gatilho ou de uma causa. Então fique por aqui. Temos algumas coisas para passar. 20. Ligas de entrada e saída: Tudo bem pessoal, então nesta lição fomos olhar para ligações de entrada e saída. Ligações de entrada e saída para muito referidas literalmente entrada e saída, uma fonte de entrada e destino para uma saída. Então eu já criei um novo projeto. Fui para a aba Azara aqui. E então eu disse que cria um novo projeto e ele mostra um nó ou um modelo TypeScript para esse determinado. Então, vamos apenas usar isso aqui. Não, eu percebo com as ferramentas que algumas das coisas pelas quais vamos passar, você verá coisas diferentes com base no modelo de projeto que você está usando na maneira como as ferramentas funcionam. Lembre-se, muito disso é novo. Então, ao longo do tempo, pode ser obedecido mesmo e não experimentar o que eu poderia apontar como uma possível lacuna. No entanto, estou escolhendo esse caminho de menor resistência porque obtemos um assistente quando queremos adicionar uma ligação de entrada. Quando obtemos esse assistente e colocamos as informações apropriadas sobre o que vai fazer é gerar um bloco de código de configuração que é global. Portanto, não importa qual modelo, mesmo que você não receba o assistente em si, você ainda pode assistir se não quiser acompanhar nossa conta, acompanhar com base no tipo de modelo selecionado. No entanto, quando o código é gerado e, em seguida, analisamos que você pode realmente colocá-lo em seu próprio arquivo JSON In dot e continuar apenas uma cena. Nesses pontos. Vou apontar todos eles para outra coisa que vamos precisar para essa atividade é o emulador de armazenamento Cosmos DB. Você pode obter isso através uma pesquisa fácil no Google, apenas na pesquisa do Google, um emulador 0 Cosmos DB, acessar a documentação da Microsoft e você pode instalá-lo em seu PC com Windows. Saiba, se você não tiver essa opção, você pode acessar o Azure e provisionar o serviço Cosmos DB por conta própria. E isso é bem simples. As etapas muito semelhantes ao que farei no emulador. Poderemos ser replicados no painel de controle independentemente. Então, usarei o emulador para essa atividade. Portanto, o Cosmos DB servirá como nossa vinculação de entrada. E quando estivermos prontos para a parte de saída dela, provisionaremos uma tabela do Azure ou talvez, quando chegarmos lá, possamos descobrir com base na atividade que estou apenas jogando de ouvido aqui. Quando você tiver instalado o emulador de banco e iniciá-lo e começar, ele aparecerá no navegador parecendo algo assim. E você veria que ele informa que está sendo executado, fornece o URI, fornece a chave primária e fornece a string de conexão do parâmetro. Vamos precisar de tudo isso. Você também pode ir para o Explorer. Você pode criar um novo banco de dados e criar contêineres diferentes lá. Vou remover isso porque eu queria fazer isso do zero com vocês. Então, vamos começar obtendo essa cadeia de conexão e depois salte de volta para o nosso projeto. O que precisamos fazer é deixar o projeto nem sobre essa nova cadeia de conexão saltar para o arquivo JSON ponto settings.js local. E aqui, certifique-se de que o armazenamento do Azure Web Jobs esteja vendo o uso de armazenamento de desenvolvimento igual a verdadeiro. Seja qual for o formulário mostrado no tempo de execução, sabemos que qual é esse propósito ou o propósito disso. Mas vamos colocar nossa cadeia de conexão. Então, vou chamá-lo de conexão Cosmos DB. Então vou ver dois pontos e depois colocar o valor que é a cadeia de conexão primária que acabamos de sair do emulador. Então, vamos voltar para o nosso emulador e criar nosso banco de dados. Então, no explorador do novo banco de dados, e vamos ser, digamos criar um blog. O que faremos é garantir que temos o TIG para taxa de transferência de provisão. Nós o deixamos em escala automática. E a coisa legal sobre os emuladores que, seja qual for o que você configurar como as configurações aqui, quando você está fazendo a versão do MLA, às vezes você obterá uma estimativa precisa o suficiente de quanto custaria em um motivo específico no Azure. Portanto, é uma boa ferramenta para desenvolvimento e teste local e prova de conceitos. Vamos chamá-lo de blog. E então o que faremos é dar-lhe os novos contêineres. Então, basta clicar em novo contêiner e escolheremos o ID do contêiner. contêiner seria postagens. E uma boa chave de partição, a chave particionamento aqui apresentada, iria indexar o valor a ser usado. Esse será o ID do blog. Então, vamos clicar em OK. E então, se deixarmos postagens suspensas e analisarmos os itens que você vê aqui, então você terá o ID da postagem e o ID do blog é a chave de partição. Enquanto estamos aqui, o que faremos é colocar em uma postagem no blog e você pode colocar algumas postagens no blog, x2i contest bullet aqui. Vou colocar um ID, ID do blog, sendo ambos um. O título, o bloco de comentários de conteúdo, apenas algo para parecer. Como é o registro real do blog nosso documento seria no Cosmos DB. Você pode simplesmente ir em frente e fazer isso. Você pode clicar em novo item. Você receberá esta seção editável e, em seguida, clica em Salvar quando terminar. E, no final da operação, seu registro obterá mais metadados. Você não precisa se preocupar com isso. Mas é assim que o registro deve ser no Cosmos DB. Vamos ao nosso arquivo JSON de ponto de função e adicionar a configuração. Agora, existem duas maneiras de adicionar configurações, e eu vou fazer isso da maneira manual, ou pelo menos mostrar a você a maneira manual porque com base nas ferramentas e com base no modelo do projeto que você pode ter spool, você pode ou não ter essa opção. Por exemplo, estou usando as funções, projeto ou modelo TypeScript. Quando clico com o botão direito do mouse, vejo a opção de adicionar vinculação. E o que isso faz é que ele traz pouco assistente que me permite preencher os diferentes pontos de configurações com base no tipo de configuração que estou fazendo. Nem todos os tipos de projeto têm isso porque notei que ele não está lá em um projeto de funções C-sharp ou tentado. Então, vou mostrar a vocês como seria. De um modo geral, se você estiver usando TypeScript, Python, Java, C-sharp, etc. Na forma de JSON, é aqui que todas as ligações estão configuradas. Então temos aqui, temos um para o N. Então, quando você o vê, significa que é uma ligação de entrada. Quando você vê significa que é uma ligação de saída. Então, já tínhamos dois por padrão, nenhum lugar adicionando outro. Então você pode simplesmente ir em frente e adicionar a vírgula, iniciando um novo bloco de objetos. E, em seguida, o tipo é Cosmos DB direção está no nome é documento de entrada. Você poderia mudar isso para, você poderia chamá-lo de blogs, seja lá o que for, para que esse nome desempenhará um papel no próprio código. Então, estou chamando de documento de entrada. Se você estivesse usando o padrão, o assistente teria assumido como padrão a palavra ou o documento de entrada de nome também. No entanto, o nome do banco de dados é blog. Criamos uma coleção chamada posts. Então, nome do banco de dados, nome da coleção. Em seguida, temos uma corda de conexão sentada. Isso terá o mesmo nome que a clínica mostrada stream que criamos anteriormente. E, em seguida, temos o ID e o ID do nó da chave de partição. Aqui vai se referir a quais parâmetros de vinculação devo usar para obter os valores de ID. Então, quando vejo consulta, isso é como um super global neste momento. Para ver essa consulta será semelhante à string de consulta que está chegando. Portanto, lembre-se de que o modelo padrão para uma função acionada por HTTP teria a consulta de ponto de solicitação pontuar o nome da variável. Ou no C-Sharp, estaríamos olhando para a consulta. Então, praticamente a consulta é exatamente o que ela reconhece como uma variável de string de consulta. Portanto, uma string de consulta procura uma variável chamada ID para a chave de partição, também estamos usando histórias de ID e a mesma coisa, não, ambas estão em chaves porque é mais como uma vinculação. Parâmetro de vinculação em oposição ao valor. Esses são os parâmetros de vinculação que queremos. Não. Você poderia realmente especificar como uma consulta SQL aqui como um dos valores-chave consulta SQL que realmente permitiria você no contexto de um Cosmos DB e potencialmente outras variáveis de entrada relacionadas ao banco de dados, associação de entrada, desculpe, você poderia realmente escrever sua instrução SQL aqui para obter uma instrução SQL mais complicada, se desejar. Mas, neste caso, estamos mantendo isso simples. Tudo o que queremos é passar o ID. Ele deve ir buscá-lo do Cosmos DB para nós, e então podemos processá-lo depois. Agora vou dar-lhe uma demonstração rápida de como seria o assistente. Então, basta clicar com o botão direito do mouse na lista. Digamos que, na vinculação, você escolhe o tipo. Deixe-me ampliar para que você possa ver melhor. E então, como eu disse, estamos usando o Cosmos DB, você escolheria o nome, então eu vou deixá-lo como padrão. Você escolhe o nome do banco de dados, escolhe o nome da coleção. Você escolhe entre a conexão, a cadeia de conexão de suas Configurações e, em seguida, fornece o ID do documento. Então isso teria sido esse encadernação. Então, ele vai dizer consulta. Só para vê-lo estranho a chave de partição, eu teria dito: De onde estou obtendo o valor da chave de partição? Porque estou usando o ID para ambos para a chave de partição. É por isso que eu digo ID do ponto de consulta. No entanto, se fosse um caso em que eu deveria passar o ID separado de uma chave de partição. Então eu poderia dizer chave ou o que quer que seja. Seja qual for o nome do parâmetro que estou esperando como chave de partição que eu especificaria aqui. E então praticamente você passa e então eu pressionarei Escape para cancelar se eu não quiser que ele vá em frente e prossiga. Mas uma vez eu teria pressionado com medo que consulta SQL teria gerado esse bloco. Independentemente disso. Ele também teria colocado na consulta SQL e estaria em branco. E eu aconselho que você apenas remova isso porque eu vi isso causa problemas. Os problemas não são realmente muito claros. Se você usou o assistente, você teria obtido uma consulta SQL. E teria ficado em branco. Meu conselho seria se você não tiver ventos de usar apenas removê-lo, você pode prosseguir com menos preocupação. Então, agora que configuramos ou Cosmos DB, configuramos a vinculação, configuramos nossa cadeia de conexão, vamos escrever algum código, refatoramos esse método para você. E fui apontar todas as mudanças. Quero dizer, cheio, você pode simplesmente remover tudo entre o primeiro registro de contextos e tudo até o último, a chave de fechamento, certo, então apenas vazio ou a função. Então, parece assim. Desculpe. Deveria ficar assim. Quando você terminar de esvaziá-lo, você pode deixar isso se desejar. Não há problema. A primeira modificação seria para nossos parâmetros de função. Então, temos os contextos, temos o pedido. Sei que estou adicionando os documentos de entrada. Portanto, este documento de entrada, e como estou usando o TypeScript, ele é muito digitado. Mas isso permite que você possa perder alguém para ver qualquer aqui. Mas poderíamos especificar um tipo de dados se precisássemos, mas vou deixá-lo como qualquer solicitação de contexto. Eu sei que estou adicionando dois pontos de entrada, desculpe. E então, seja qual for o código lá de antes. Não, dentro do corpo da nossa função outono vai fazer é dizer se não inserir documento, então dizer que não conseguimos encontrar esse ID, então podemos registrar essa mensagem, mas então eu estarei respondendo . Portanto, contextos de resposta de ponto ou riscos, presumo que isso significa que a resposta é igual a. E então podemos especificar um modificador de status, o status. E mesmo em testes em partes anteriores desta cena do curso, onde passamos em um valor errado e ainda temos um 200. Ok, mesmo que não tenha encontrado o valor que deveria estar lá, o que é errado. As respostas Http precisam ser muito específicas. Portanto, se você habilitar o desenvolvimento de API, poderá apreciar isso. Se não, então saiba que eles precisam ser específicos. Então, mesmo meu ditado 5400 aqui está errado. E, assim, mais como um 404404 significa não encontrado. Afinal, estou vendo que não foi telefonado. 500 seria se fosse como um erro fatal do meu lado, que não é o caso neste cenário específico. Se não for o documento de entrada e nada foi fornecido aqui. Portanto, isso é automaticamente sentado e observando um valor de vinculação chegando através da solicitação. Isso é a vinculação que, conforme especificado aqui. Se nenhuma ligação do Valley chegou, então, se esse valor de vinculação não encontrou nada no banco de dados, porque o que acontece é quando ele vê , ele irá automaticamente para o Cosmos DB e verifique o que for necessário verificar novamente. Então, se você não encontrou nada de cada vez, então, quando chegar aqui, saberá se você encontrou alguma coisa ou não. Está em JavaScript porque basicamente diz que se não for, então dizemos que não telefonamos, e então respondemos com um 404 e a mensagem não foi encontrada. Isso na próxima linha. Vamos ver responder com um 200 e o corpo deve conter qualquer conteúdo no documento de entrada. Tudo bem, então lembre-se que é apenas o bloco JSON do JSON. Então, vamos ver o que isso parece. Então, vou correr, como de costume, vou usar o Postman para executar esse teste. Então, estou passando esse parâmetro, essa string de consulta, ID é igual a um, e estou recebendo essa resposta 200 com o conteúdo desse ID de documento que não estava presente. Vamos ver. Passei em dez. Então eu recebo o telefone quatrocentos e quatrocentos no post do blog da mensagem e não encontrei tantos documentos quanto você poderia ter adicionado, que com qualquer ID , etc, ele entrará automaticamente. É aí que vemos uma ligação de entrada. Assim que o método for executado, devo me vincular a esse valor específico. E é com o propósito de consultar esse recurso específico ou interagir com esse serviço específico. Neste exemplo, ou a vinculação de entrada está procurando um ID de acordo com nossa configuração aqui. E uma vez que ele veja esse ID, ou uma vez chamado, ele será triangular para o Cosmos DB para obter o documento correspondente. Tudo bem, vamos continuar nessa linha de pensamento e adicionar uma ligação de saída. Então eu já adicionei a configuração e você pode simplesmente ir em frente e colocar isso lá dentro. Então, um novo bloco de objetos. E então o tipo desta vez é Q, a direção é Alt. Temos o nome. Esse é o nome padrão que surgiria no assistente, o nome da fila, damos a ele um nome e, em seguida, a conexão e, desta vez, ele precisa de conexão de armazenamento. E temos o armazenamento da Web do Azure, o armazenamento de trabalhos da Web. Uma conexão lá? Não, para contexto para o que tudo isso está apontando. Se você abrir esse Azure Storage Explorer, verá aqui em local e anexado a contas de armazenamento. Portanto, uma conta de armazenamento é praticamente onde seus blobs iriam. E, em seguida, também tem filas e tabelas. Então, estamos usando as dicas que serão formadas em uma conta de armazenamento. Claro, estamos emulando isso agora. Se você for e provisionar isso no Azure, poderá acessá-lo abaixo aqui. No entanto, localmente, nós emulamos para que possamos ir para as pistas e o antigo Q, para que você não precise criar esse Q quando executar os comandos que podemos escrever. Se ainda não existir, ele realmente seguirá em frente e criará para você. Essa é a beleza disso. Então você não precisa criá-lo agora. Só estou mostrando onde procurar a criação do antigo Q. Se você fosse passar pelo assistente para essa ligação, deixe-me mostrar a você como seria rapidamente. Então, digamos que queríamos uma ferramenta Wu de ligação alt que queremos armazenamento em Filas. Então eles nos pediriam o nome. Portanto, haverá item da fila de saída para qualquer que seja o nome. Eles provavelmente não deram um nome diferente ou realmente não importa porque isso apenas criará uma nova seção de fila de qualquer maneira. Mas vamos dar um nome diferente. E então gostaríamos de apontar para a cadeia de conexão de armazenamento, que, como estamos fazendo local, estamos vendo usar as configurações de desenvolvimento. E então você seria capaz de prosseguir. E então todo esse bloco de configuração teria sido gerado para você. Mais uma vez, você tem duas maneiras de fazê-lo. Se o assistente não for uma opção, você sempre poderá se familiarizar com essas configurações. Chaves. Em nosso trimestre vai fazer um ajuste. Estamos dentro da seção onde não encontramos nossas postagens no blog. Vamos apenas enviar uma mensagem para a fila. Ele só enviará essa mensagem de resposta para a fila. Então eu fui ver um contexto, ligações de pontos. Lembre-se de contextos que as ligações de pontos vão dizer contextos. Vá e procure todas as ligações que você tem. E, em seguida, consiga o item da fila de saída. Isso é o que chamamos aqui. Então a mensagem de resposta é o que eu quero colocar nessa fila ou o que quer que perca. Então você poderia colocar uma mensagem diferente. É uma fila de mensagens, então geralmente é baseada em texto. Essa é realmente a única mudança que precisamos fazer quando corremos e tentamos encontrar uma postagem no blog que não exista. E até agora estive testando com dez. Nós veríamos que recuperamos a resposta da mesma forma. Mas se eu pular para o Storage Explorer e procurar esse Alt Q, verei a mensagem ou as mensagens sendo depositadas na fila. Isso é praticamente buraco. E alt, ligação Alt, ligação de saída funcionaria. Então, a ligação de entrada basicamente pedra nos relógios e diz que quando eu receber esse valor, vou automaticamente disparar um gatilho para recuperar algo ou fazer algo. E as ligações de saída são, isso é o que vou enviar neste momento da execução. Então, como vimos que você tem várias opções de vinculação. Você pode fazer um SMS, você pode fazer um sinal, nossa Atualização, Atualização de Hub. Você pode fazer uma grade de pecado, que é um serviço de e-mail. E você pode fazer HTTP, o que temos feito. Esse é um problema, meses de proteína de ligação ao GTP. Então, o aumento de pontos de contextos é basicamente dizer em contexto, vá e pegue os raios. Esse é o nome dele abreviado para resposta. Acho que se você quisesse renomear isso, isso é tudo o que seria preciso. Então, é realmente isso para ligações de entrada e saída. Precisamos de dois exemplos muito simples. E ao fazer esses exemplos, também analisamos diferentes ferramentas de terceiros que podemos ajudar a usar a ajuda em nossas interações. Então, mesmo no Visual Studio Code, fui até o emulador para o Cosmos DB. Mas uma vez que você tenha isso instalado, você não precisa necessariamente entrar na triagem de gerenciamento real poderia realmente fazê-lo a partir daqui, sob o banco de dados é seção em Visual Studio Code porque você teria visto adicionar nosso anexar um emulador aqui. Eu me toquei letal. Ele perguntaria se é núcleo ou DB para a API do Mongo que você seleciona e codificaria automaticamente o Cosmos DB local. Então essa é uma maneira agradável e fácil de um 100 que a operação leva e crie um banco de dados e a coleção daqui. Também podemos fazer o gerenciamento de máquinas virtuais, mas não temos nenhuma VM neste curso. E você pode gerenciar suas funções daqui, etc. Portanto, existem ferramentas. Uma vez que você entenda como eles trabalham juntos, então você deve ficar bem. Se você estiver tendo algum problema com sua conta de armazenamento, o que pode ser, eu apenas sugiro que você atualize seu Storage Explorer, certifique-se de que é a versão mais recente da retina. Estou correndo de 1 a dois. Eu fui eu estava em 1.170 alguns problemas porque eles fizeram algumas atualizações desde 1 a dois. E você deve ter o mililitro de azurita para o desenvolvimento local do Azure Storage instala ninguém vez que você estiver fazendo essa gravação, você provavelmente não terá esses problemas. Mas se você estiver trabalhando com um conjunto de ferramentas mais antigo e então você não está instalando mais fresco do que eu aconselharia a instalar o novo porque isso me pegou. Primeiro, o emulador de armazenamento é o que teria vindo com a versão original do Storage Explorer, mas isso não foi obsoleto, já que azurite é a coisa nova e deveria ter vindo com Visual Estúdio 2022. No entanto, para mim, não deu certo dessa forma. Por qualquer motivo, eu uso o npm para instalar. Então você já terá a versão npm ou Node JS it instalada posteriormente. Caso contrário, você pode ir em frente e obtê-lo. Mas para acompanhar as atividades, se você estivesse usando o TypeScript, saiba que já deveria tê-lo instalado. Você pode simplesmente abrir o prompt de comando ou o console e executar o instalador que ele instalou em segundo plano. E então você gostaria de criar uma pasta nesse local ou em qualquer lugar e, em seguida, executar esse comando para garantir que ela esteja sendo executada em segundo plano. Isso substituirá emulador do Azure Storage Explorer instalado anteriormente. Só estou mostrando essas coisas no caso de você estar encontrando problemas porque os problemas são naturais, mas é sempre bom ter as soluções. Você pode fazer tudo isso e, em seguida, reiniciar o Storage Explorer e , em seguida, tudo deve ser capaz de se conectar. Os sintomas dele não funcionando seriam que a função não será executada. O que você tenta testar. Ele vai fazer uma pausa. E outro sintoma é que, quando você tenta se conectar ao emulador, ele falaria sobre as conexões estarem esgotadas nossas recusadas. Então, se você está recebendo esses sintomas, então você definitivamente precisa seguir em frente e atender a essas atualizações. Dito isto, é realmente isso para ligações de entrada e saída. Então eu encorajo você a explorar, criar outras funções que você acha que seriam úteis. Função acionada por temporizador que enviaria um e-mail todas as manhãs ou todas as semanas, coisas assim. Então vá em frente e explore. 21. Funções Duráveis e padrões de orquestração: Bem-vindo de volta pessoal. Nesta lição, vamos falar sobre orquestração durável ou lidar com funções. Então esse é outro tipo de função que está disponível em um 0 funções. Podemos girá-lo facilmente usando o modelo e estaremos olhando para ele. Mas antes de chegarmos lá, eu só quero passar por isso. Um escrito sobre a documentação da Microsoft para funções duráveis, forma durável de pedras, que é uma extensão do Azure Functions. E basicamente usa o padrão do orquestrador para acompanhar as coisas. Então, apenas para contexto, formulário durável mostrado é aquele que você pode usar os fluxos de trabalho definidos usando o código processual. Portanto, nosso fluxo geralmente é que você quer fazer isso então, então que você pode exigir segunda-feira enquanto a intervenção entre R-naught. Mas o ponto é que você não quer chegar à etapa três, a menos que as etapas 12 tenham sido concluídas com sucesso. Portanto, uma função durável realmente irá transportar o estado da operação para que ela saiba qual decisão tomar com cada ponto de referência. Eles também são capazes de chamar outras funções ou outra função durável de forma síncrona e assíncrona. E a saída é armazenada de forma confiável em variáveis locais. Nossa história como funções é durável e confiável e basicamente verificam cada vez que fazem uma função, peso ou rendimento. Assim, cada vez que uma função é chamada e retorna seu valor, ela cria esse ponto para que ela saiba exatamente onde está na operação e o estado nunca é perdido. Está sempre lá. Ele está sempre acompanhando o que está acontecendo e onde está no processo. Eles podem ser de longa duração, podem ser segundos, dias, meses sem fim. Portanto, você tem padrões diferentes em que pode estar chamando uma API de forma assíncrona repetidamente. Você pode estar puxando uma fonte de dados para algo e queria fazer isso continuamente. As partes mais importantes disso são caminhões procurados do estado. E sempre permite que você saiba onde você está na operação. Se você quiser um melhor entendimento, pelo menos com a teoria, você pode ler o documento é e muito mais. E você pode ver alguns dos exemplos de código nos diferentes idiomas. Mas vamos fazer isso juntos e usaremos o Visual Studio Code e um modelo C-Sharp. Então, é claro que saltamos para o Visual Studio Code. Já criei uma pasta, 0 funções duráveis. Isso é o que eu chamei. Não, saltamos para a guia Azure e para a seção de espuma Oceans. Vamos criar uma nova função para cima. Então chegamos ao nosso feiticeiro habitual. Eu, basta ampliar para que possamos ver claramente, vou escolher minha pasta e, em seguida, vou escolher meu idioma. Então eu quero nosso próprio tempo. Então eu tenho seis instalados. É claro que você escolhe o tempo de execução de acordo com seu contexto e, claro a versão seria relativa a essa versão quatro objetivos com dotnet seis. E então eu quero que você seja capaz de formar shunts as descobertas facilmente. Você sempre pode começar a digitar e ele irá filtrá-lo. Então eu queria funções duráveis, orquestração. E deixarei o nome padrão para namespace não e padrão. Então eles queriam saber qual conta de armazenamento vou usar o emulador local e permitir que ele gerasse um projeto com ele criado e nós temos nosso novo arquivo de código. Vou apenas diminuir um pouco, então já estamos familiarizados com a aparência do projeto. Se eu olhar no arquivo do projeto CS, você verá aqui que eu tenho essa biblioteca específica, que é muito importante para nossas operações duráveis. Então, se você estava usando o Visual Studio, basta verificar novamente e certifique-se de que esse pacote está sendo referenciado. Caso contrário, você pode ir buscá-lo em novos portões antes de criar o modelo de função durável. Tudo bem. Mas então, quando tivermos nosso arquivo de código, fim de semana, basta olhar e fazer um teste. Não vou modificá-lo demais nem nada. Só queríamos entender o que exatamente está acontecendo aqui. Portanto, temos a anotação que nos diz ou nome funcional. Esse nome de função tem, desculpe, esta função tem uma função chamada Ron orchestrator que está retornando lista de string. E então ele está passando em um gatilho de orquestração. E você pode ver aqui que o contexto é do tipo que eu peguei um contexto de orquestração durável. Então, ele está rastreando todas as saídas. E então ele vai dizer que cada saída, o valor que é obtido ao chamar essa função com esse valor passado. Então você vê aqui, é apenas uma função que realmente tem e que são as funções duráveis, orquestração, C-sharp One na partitura. Olá. É apenas uma função definida aqui. Mas imagine se adicionarmos várias funções que você queria chamar uma após a outra, você poderia simplesmente defini-las nessa ordem específica. Então aqui está dizendo que chame a função por esse nome e dê esse valor a ela. Esse valor será vinculado. Aqui está nossa função que está chamando. E mesmo que o nome esteja aqui, a definição da função é chamada SayHello. E então é preciso acionar uma atividade. Portanto, esse gatilho de atividade é praticamente esse parâmetro que será desossado. Você pode trabalhar madeira como uma ligação de entrada. Pode ser algo para o nosso Cosmos DB ou outra coisa, você sabe, seja lá o que for. Passamos por nossas ligações no corredor. Então, temos uma apreciação de como isso poderia funcionar. Mas depois de fazer isso, depois de passar esse valor, então você executa a operação com base no valor que entrou e faz o que quer que seja. Então aqui só vai dizer olá para cada um desses idiomas, cada uma dessas cidades, desculpe. Ele só vai retornar olá com esse volume. Isso é tudo o que realmente está fazendo. Não. A última função que você obtém aqui é aquela que é acionada por meio de um gatilho HTTP. Então, já sabemos sobre as funções acionadas por HTTP. Então isso significa que quando chamamos isso, quando chamamos essa Função Durável e toda essa operação durável através desse gatilho HTTP, notei que o cliente do seu livro está chamando de cliente de orquestração durável e você chama isso de Starter. Em seguida, ele iniciará a operação armazenada no ID da instância. E tudo isso está fazendo é começar, iniciar um novo assíncrono da função durável, que foi o que olhamos primeiro. O gatilho Http acionará a função durável. E a função durável tem suas operações delineadas, aciona isso. Que muitos foneticistas nessa ordem armazenaram suas saídas e fazem um grande retorno. No final de tudo isso, ele vai registrar e vê-lo iniciado com o ID da instância. Portanto, o ID de incidência mais uma vez espera que seja um caminhão que esta operação esteja em andamento ou esteja concluída ou seja lá o que for. E você pode usar isso em seus registros para análise. E, no final deste todo os gatilhos vão ver a resposta de verificação assustada e dar um status, o ID da instância. Então, a identificação de incidência mais uma vez seria a incidência deste livro está acontecendo a castração? E então está verificando a resposta de status para ver que ela está concluída? Estamos bem, seja lá o que for. Então, como eu disse, ele armazena o estado de mim explicando, vamos ver isso em ação. Então, vou executar essa função e fui depurar de qualquer maneira. Tudo bem, é sobre aqueles que estão sendo executados. Você verá aqui nos logs que ele está detectando que ele tem o HTTP inicia para que estes sejam o método acionado por HTTP. Então temos a iteração do arco, e então temos a atividade. Então é isso que chamaremos a função que ele chama. É uma função de atividade. E esta é a história da arte. É um filme. Esta é uma simples espuma acionada por HTTP mostrada. Então, quando faço essa chamada, HTTP inicia e estou disposto a controlar o clique, o clique em Control, é claro, o teria iniciado no navegador. Então meu navegador é iniciado, ele ligou para URL e sabemos o que acontece quando você o chama de URL para uma função acionada por HTTP. E, na verdade, foi em frente e começou a mensalidade mais escura, certo? Então este foi chamado, mas as APIs do host. E então você vê aqui onde diz que olá foi chamado com sucesso e retornou olá Tóquio, olá Seattle, e olá Londres. Isso é evidência de que foi chamado com sucesso. Mas veja isso também. Deixe-me ver se consigo ampliar um pouco para que possamos ver esses registros melhor. Você notaria que cada vez que ela teria feito essa chamada com sucesso, ela retorna à história da arte OU função. Ele chama, está executando a atividade. Em seguida, obtemos o resultado da atividade. Em seguida, ele nos diz que executou a atividade. E então ele volta para o deleite Arcbest ou toda vez que faz um telefonema, ele retorna o controle para o orquestrador. E, claro, você está trabalhando no fluxo de trabalho. Então você coloca sua lógica e seu registro e suas decisões com base na saída ou no sucesso ou na falta deles. Fora da função durável, chamando a atividade. Isso é buraco. Você pode usar isso a seu favor. Quando você chamou a função acionada HTTP r dot URL, você notará que você obtém esse bloco de JSON. Então você usa carteiro ou usa o navegador? Isso realmente não importa, mas o que você está recebendo é uma consulta de status obtém o valor do URI, que tem um URI que nos dará o estado, o estado atual da história da arte. Tudo isso. É esse URI que eu fui copiar isso e deixei colocá-lo em uma nova guia. E você vê aqui ele diz nome, recebemos o nome dele, obtemos o ID da instância. Com certeza. Obtemos a pilha de tempo de execução. Então, a troca deste caso está concluída. Então, a qualquer momento no meio dela, se você quiser ver qual é o status dessa função durável, já está feito? Isso ainda está em andamento, então você poderia apenas ver, me dar esse status. É praticamente isso para funções duráveis. Claro, é um exemplo muito simples, mas espero que você esteja vendo as possibilidades e como você poderia realmente usar esse tipo de fluxo de trabalho para operações mais complexas onde você precisa caminhão. Está feito ainda? Qual é o status no meio dele? E tomar decisões com base em todos saem de uma operação indo para outra. 22. Crie a API sem servidor usando Funções do Azure: Ei pessoal, nesta seção vamos começar a algumas coisas divertidas. Então, temos analisado muitas teorias, muitos conceitos e apenas conseguimos entender o funcionamento interno de uma função 0. Nesta seção, no entanto, vamos colocar tudo o que aprendemos, o teste e estaremos criando uma API de descanso. Então, vamos apenas usar funções, construindo endpoints antigos. Se você não estiver familiarizado com as APIs restantes, você pode enganar meus outros cursos sobre desenvolvimento de API rest, onde realmente analisamos como criá-los usando um modelo de projeto de desenvolvimento EPA inteiro a partir de Barco do Visual Studio aqui vamos usar o Azure Functions. Neste vídeo. Vamos apenas começar. Vamos usar o Visual Studio para este. Vamos encontrar as zonas de espuma ASOR. Mais uma vez, se você não o tiver à esquerda, você sempre pode pesquisar. E se você não o tiver, você terá que ir e obter o instalador e instalar a carga de trabalho do Azure. Vamos obter o Azure Functions. E este que vou ligar, vou chamá-lo de lista de carrinho de compras. Acho que esse é um exemplo simples o suficiente. Temos itens que Linda carrinho de compras e os tiramos quando os temos. Podemos simplesmente ir em frente e criar isso. E, por enquanto, vou fazer um modelo vazio para o emulador de armazenamento. Sim, queríamos usar um emulador de armazenamento. Já fomos. Isso funciona. E apenas por contexto, neste ponto, os zeros, o armazenamento tradicional do Azure, Emily me disse e não necessariamente para funcionar corretamente. E eu teria mencionado que você teria que usar azi, certo. Então, para garantir que, depois de instalá-lo, você sempre pode executar esse comando azurite e, em seguida, você o verá iniciando todos os serviços. Então, se você encontrar alguma dificuldade em se conectar à sua tendência para usar esses serviços emulados e enviá-los não pode se conectar, basta executar esse comando azi, certo? Tudo bem. Só vou ter isso em execução em segundo plano. Estrangeiro. Oh, deixe-me ir em frente e criar este modelo vazio. Quando voltarmos, vamos começar a criar ou funções e olhar o conceito de corredor vai colocá-lo em termos de construção de nossa estrutura semelhante à API restante. 23. : Tudo bem, então vamos começar isso. Vou adicionar função, então nova função do Azure. E como estamos lidando com uma estrutura semelhante a API , todas as minhas funções precisam ser acionadas por HTTP. Vou chamar essa função de carrinho de compras ou API de carrinhos de compras. Vamos chamá-lo assim e adicionar. Então vou usar o gatilho HTTP. Fui torná-lo anônimo pelo menos por enquanto. E clique em Adicionar. Tudo bem, então, em nenhum lugar mais funcional, não quando começar a modificar ainda. Em vez disso, vou seguir em frente e colocar outras coisas. Então, vou adicionar uma nova pasta, vou chamá-la de modelos. O problema com o desenvolvimento de API é que você normalmente não vai. Os modelos são detalhes que controlam os dados de watts com os quais você expõe interrupção de barra para cada solicitação. Vou ter um modelo de carrinho de compras, em primeiro lugar. E fui conhecer esse interno, interno, significa que ele pode ser usado por qualquer coisa dentro do mesmo projeto para que eu possa deixá-lo como interno ou não. E vou adicionar algumas propriedades. Eu só fui em frente e fiz todas as três cláusulas e você pode apenas olhá-las e replicá-las de acordo. Portanto, temos o item do carrinho de compras ou um carrinho de compras em geral. Na verdade, esse deve ser um item de carrinho de compras. Deixe-me atualizar o nome do arquivo de acordo. Deixe-me apenas fazer o item do carrinho de compras tem um ID que eu vou usar apenas como um GUID de string. Eu criei uma escritura, e então eu tenho o nome do item, e depois coletei ou não, você sabe o que, como na nossa lista de compras, retirar o item depois de colocá-lo no carrinho. Isso é praticamente o que é isso. Significando. Então temos um para decreto. Claro, para o Create. Não estou disposto a expor tudo. Não quero que o usuário seja responsável pelo ID ou o crie. E booleanos padrão, padrão. Portanto, não falhamos de especificar que estão precisando disso do usuário. Presumo que ainda não foi coletado. Tudo o que precisamos é o nome do item. Para a atualização. Você pode estar alterando o nome do item. Você também pode estar mudando coletado ou eu poderia simplesmente enviá-los para ver sim, ele é coletado ou não. Então eu acho que vou manter isso simples e apenas trabalhar com isso mais tarde, quando estivermos nos conectando ao banco de dados, então teremos que criar mais alguns modelos. Mas para o nó isso é tudo o que precisamos. Uma API de repouso. Isso seria o que você chama detalhes ou objetos de transferência de dados. Mais uma vez, se esses termos estiverem familiarizados com eles, você sempre poderá conferir meu curso sobre desenvolvimento de API. No entanto, isso voltou à nossa função. Então o que vamos fazer aqui é realmente estabelecer ou enraizar. Então, a coisa com funções é que, por padrão, estamos recebendo essa classe, sim, e então estamos recebendo uma função com R1. Nesse caso, está dizendo que você pode fazer, você pode postar. Nós realmente não precisamos de nada para fazer as duas coisas porque, na nossa API de descanso, deve ser muito rigorosa. Um para postar um esquece já visto no nível muito básico. Mas cada função deve ser responsável por uma operação naquele momento. Então, como estamos imitando essa estrutura e o padrão da API restante, fomos modificar isso. O que posso fazer é renomear a função. Então, se isso for suposto receber itens de carrinho de compras, posso chamar isso de obter itens do carrinho de compras. Tudo bem, então esse é o nome da função. No entanto, a rota, eu quero especificar um valor porque eu não quero quando você chama a função, você tem que dizer slash api nome da função e, em seguida, essa função em repouso mais uma vez Os padrões de API fariam com que você chamasse esse EPI, uma estrutura. Mas, com base no seu verbo em parâmetros potenciais, valores sendo possíveis, então, ele não saberia qual função exatamente você está se referindo. Então, vamos renomear essa rota para que ela pareça um pouco mais com a aparência da nossa API restante. Vou chamá-lo de itens de carrinho de compras. Então, o esperado porque já será a barra de URL, barra de API e, em seguida, o nome da função. Mas quando eu especifico isso como uma raiz, então ele não saberia que, a partir da solicitação HTTP, algo entrando nessa raiz após a API de barra vai para essa função, certo? A próxima coisa é que eu não quero que essa função publique. Eu queria recuperar alguns foram remover essa postagem. E só para garantir que tudo pareça bom, também vou renomear a função em si para refletir o nome da função para que tudo pareça uniforme. Para nulo, vou remover tudo isso. Eu posso simplesmente remover tudo isso da função porque o que vamos fazer requer tudo isso por c. Esse é o único a ser obtido. Não. Mais uma vez, estamos fazendo nossa API RISD, então isso significa que preciso de uma para criar. Então eu vou copiar tudo isso e fui chamar isso de criar guarda de compras que eu tento, precisamos dar esse nome ao método. E este será o post porque não está recebendo desta vez. Está criando uma minha criação inteira. Você deve usar a postagem e , em seguida, ela tem a mesma raiz. Portanto, será uma solicitação de post para essa EPA ou aquela rota HTTP. Este é solicitado que as raízes HTTP sejam solicitadas. Podemos fazer a mesma coisa para PUT e excluir. Put seria para atualizar, excluir. Nada que seja autoexplicativo. Carrinho de compras de comida que frequento. Ou deixe-me apenas ter certeza de que meus métodos são realmente reflexivos do que será a operação. Então exclua o carrinho de compras, eu, uh, Tim, excluo item do carrinho de compras. Esta é uma solicitação PUT e esta é uma solicitação de exclusão. Tudo bem, mais uma vez, estamos apenas mapeando raízes antigas. Eles podem mudar à medida que avançamos. Podemos ver algo que queríamos mudar. Claro, vamos mudar parâmetros quando estivermos focados em cada um deles. Mas para mim, estou apenas mapeando-os para que tenhamos o panorama geral. Há outro tipo de get porque talvez queiramos outros específicos. Então, se quiséssemos um item de carrinho de compras específico, então ele receberá um item de carrinho de compras, não dezenas. Isso também seria um get colocado para a raiz seria barra de item do carrinho de compras. E então vamos usar um parâmetro de vinculação para que você saiba que eles devem esperar algo chamado ID. Depois. Vou pegar todos os itens que temos. Obtém por ID para muito item de carrinho de compras, se você quiser se qualificar, basta dizer que você é muito claro e sabe que é para isso que serve. Mas tudo isso é, esse é o ID. Temos o Create, que é apenas um post. E então temos o nó PUT e delete que somos uma boa ideia do quadro geral. Quando voltarmos, podemos começar a trabalhar neles um por um. 24. Configure a Função POST (Criar) HTTP Azure: Tudo bem, então estamos de volta e vamos começar com a criação de itens do carrinho de compras. O primeiro, vamos atualizar ou registrar a mensagem. Só vou dizer criando item de carrinho de compras. Na solicitação, temos os dados entrando. Já vimos que essa solicitação Good of olhou no corpo, na URL. E como é um post, esperamos que os dados entrem no corpo. Vou começar com uma variável chamada string solicita dados, onde vamos aguardar nova instância do leitor de stream. E esse leitor de fluxo entrará no parâmetro de solicitações HTTP req dot body. Então queremos ler, ler para terminar bastante assíncrono. Tudo bem? Agora que a lemos, isso retornará esse corpo JSON. Queremos serializá-lo em nosso objeto de item de carrinho de compras. Então, vou salvar o item var é igual a, usarei convertidos JSON. Json convert vem da biblioteca soft da Newton e isso já estava incluído. Aqui. É basicamente um requisito para funções acionadas por HTTP. Já vimos, já o usamos antes. Bem, meu ponto é que é como se qualquer outro bolso fosse apenas um pacote NuGet. Então, se você já sabe como obter pacotes e você pode simplesmente ir para Gerenciar pacote NuGet e adicioná-lo aqui sem nenhum escrúpulos. Queremos o objeto de desserialização de pontos de conversão GSM. Queríamos desserializar em nosso objeto de item de carrinho de compras para criar. E então fornecemos a ele os dados da solicitação, que sabemos que é JSON, na natureza. Depois que fizermos tudo isso, gostaríamos de editar algum banco de dados. Nosso banco de dados será do tipo item de carrinho de compras porque queremos os padrões. Antes de fazer tudo isso, deixe-me criar uma nova instância. Ok, deixe-me mudar isso de item para dados. E então eu queria dizer que o item var aqui é igual a uma nova instância do item do carrinho de compras. Carrinho de compras. Eu me viro. Este novo item do carrinho de compras vai pegar o nome do item, que vem dos dados, nome do item do ponto de dados. Assim que tivermos esse objeto , gostaríamos de ver se queríamos salvá-lo em um banco de dados. Ainda não estou pronto para iniciar toda a conexão com as coisas do banco de dados. Então, o que vou fazer é apenas usar uma lista estática, mas estou chamando um carrinho de compras itens é igual a uma nova instância. Então, aqui em baixo, vou apenas dizer um carrinho de compras, ponto de itens Adicionar, Novo Item. Agora, vamos fazer uma pausa por um minuto e refletir sobre a relevância de usar essa lista. O que os prós e contras estão obviamente em uma configuração real, não estaria usando uma lista como essa, estaria usando um banco de dados. No entanto, ainda não estou pronto para o banco de dados. Então, vamos usar a lista. Agora, a coisa com função para cima é um Enquanto ele estiver em execução, ele estará armazenando quaisquer dados, quaisquer variáveis durante o tempo de execução. Então, enquanto estamos testando, isso é perfeito porque podemos chamar todos os métodos diferentes e estaríamos interagindo com a mesma lista. Uma configuração de produção. Lembre-se de que as funções são capazes de dimensionar. Isso significa que, se você for implantar isso enquanto ele pode funcionar em alguns cenários enquanto o aplicativo de função estiver em execução. Porque lembre-se de que, em algumas plantas, ele realmente será desligado até que você tenha que dividi-lo novamente. Então esse é um perigo, mas para nos deixar supor que isso não acontece, ele pode ser dimensionado para ter várias instâncias. Então você acabaria com várias instâncias da lista, o que é outro perigo. Então, é claro que é por isso que gostaríamos um suporte de banco de dados para nulo. Vamos usar nossa lista. Depois de adicionarmos à lista, podemos retornar resultados de um novo objeto. E acabei de passar o novo item, a lista inteira, mas apenas o item que não foi criado. É isso mesmo. Todos os nossos erros para nosso item criar carrinho de compras desapareceram. E esse é o primeiro passo. Então, quando voltarmos, entraremos no nosso get. Vamos apenas fazer os dois entra em um objetivo, obtém tudo vs. obter por ID. 25. Configuração: Funções HTTP Azure: Tudo bem pessoal, então estamos de volta nesta lição, vamos nos concentrar ou obter métodos. O primeiro método, que é obter todos os itens que um é bastante simples. Então minha mensagem vai dizer “get”, recebendo todos os itens do carrinho de compras. Então tudo o que realmente teremos que fazer é voltar. Então, neste momento, realmente iria consultar o banco de dados e dizer me dê, tudo bem, Neste caso, não temos realmente um banco de dados, só temos essa lista. Então, tudo o que vou fazer é retornar, ok, Resultado do objeto com a lista. Essa é a lista dos itens do carrinho de compras. E uma vez que você quiser, tudo, você chega a todos. Então, é praticamente isso. Tenho um erro aqui. Desculpe, perdi meu novo retorno, novo ok, resultados de objetos. Lá vamos nós. É isso mesmo. Para o get é por ID. É um pouco, é preciso um pouco mais acabado, certo? Então, sim, temos a mesma regra. Sabemos que este está esperando que um valor de ID chegue. Portanto, esse valor de ID geralmente vem como um parâmetro. Em uma solicitação HTTP. Ele poderia ter entrado como HTTP ou parâmetro. Vou adicionar um novo parâmetro aqui como um ID de fluxo de valor. Então eu usarei apenas o ID da string de vírgula representará o valor de ID que deve ser passado quando essa chamada de função for feita. Na verdade, vou colocar isso como a última coisa. Vou colocá-lo após o ID do fluxo do logger. Depois que esse método é chamado, esperamos esse ID. Agora, uma vez que tivermos esse ID, e vou reescrever a mensagem do logger, recebendo o item do carrinho de compras com ID. E então vou encapsular o valor de id que está sendo passado. Desculpe, em interpolar, para encapsular, saiba que eu tenho isso. Vou dizer que o item do carrinho de compras var é igual a, vou para a minha lista de itens do carrinho de compras. Então vou ver pontos que poderíamos usar achar. Mas vou ficar com o que estou mais confortável com primeiro ou o padrão porque quero fazer primeiro ou padrão. Se não o encontrar, ele retornará com um nulo. Primeiro padrão de estrela e, em seguida, Controlar pontos para usar o link system.in. E então colocamos nossa expressão do Lambda. Então q dot ID fora do carrinho de compras, item do carrinho de compras será igual ao valor de id que é passado. E depois que fizermos isso, fui saber o cheque. Vejo que o Visual Studio está me ajudando. Se o item do carrinho de compras for nulo, ou seja, embora obviamente não retornasse nada , teríamos que retornar um novo resultado de objeto não telefonado. Então isso é um 404. Caso contrário. Caso contrário. Ok, então aqui está uma diferença entre, porque você pode notar que você tem resultados de objetos versus resultados. Vamos ver os resultados das chaves antigas diferentes dos resultados do Objeto Chave Antigo. A diferença é que, quando você retorna aos resultados do objeto, você precisa inserir dados quando não estiver retornando detalhes. Portanto, neste caso, não tenho dados para retornar à espera de algum valor. Tenho que dizer resultados não telefonados. Então eles realmente queriam vê-lo pensando que são realmente os mesmos quatro sobre quatro, mas qual deles usar quando apropriado. Vamos retornar um resultado não encontrado. Caso contrário, retornaremos resultados de um novo objeto com esse item de carrinho de compras específico em mãos para que a cor tenha obtido os detalhes. Vamos revisar rapidamente para obter vários itens, obter carrinho de compras Eu tento, Tudo o que estou fazendo é esgotar a cotação de consulta sem aspas, executar uma consulta no armazenamento de dados e retornar tudo sabe o que um armazenamento de dados é pelo menos. Então, estou apenas retornando o que está nessa lista. Quando quisermos por ID, tenho que especificar que quero que o ID do parâmetro seja prisionado. Ambos já estão conseguindo, já sabemos as raízes o que é este, cortar o IID, daí minha necessidade para o ID. E então, uma vez que eu tenha essa ideia churn rondo query para encontrar esse objeto no Datastore. Se eu não o encontrar, retornarei não seguindo os resultados. Caso contrário, retornarei os resultados do objeto chave antigo. É isso mesmo para os métodos get da nossa API rest. 26. Configuração, POST (Atualização) Função HTTP Azure: Tudo bem pessoal. Então, vamos pular para o nosso PUT que estamos analisando o item de atualização ou carrinho de compras. Não. Temos que fazer mais algumas alterações porque quando queremos atualizar, teríamos que passar um ID bem como os dados a serem atualizados, certo? Então, saímos para fazer o que fizemos aqui, que é incluir ID, parâmetro ID. Lá vamos nós. E temos que atualizar nossas raízes porque também precisamos desse ID de material no final das raízes da atualização. Em seguida, podemos mensagem de registro da barra GnG, atualizando o item do carrinho de compras com ID. Isso está dentro. Não, temos que fazer uma espécie de operação híbrida. A primeira coisa que temos que encontrar os dados para que possamos repetir o que fizemos no Git. Vou apenas ir em frente e ver me recebendo este item de carrinho de compras que tem o id que foi passado como parâmetro. Se não o encontrarmos, retorne não telefonado. Tudo bem. Em seguida, teremos que repetir algo como o que fizemos com a criação. Alguns saíram para analisar os dados recebidos. Isso estaria analisando o item do carrinho de compras de atualização. E então, em uma operação maior, poderíamos usar algo como o ultimate bird para mapear entre os dados recebidos e o item do carrinho de compras para fazer as atualizações. Mas esta é uma operação muito simples. Então, o que vou fazer é simplesmente atualizar o item do carrinho de compras, sinalizador de pontos coletados e deixar você ser igual ao fluxo coletado de pontos de dados. Então você está atualizando. Isso deve significar que você está mudando o booleano de verdadeiro para falso ou vice-versa. Isso é tudo o que realmente vamos atualizar. Então, no final de tudo isso, vamos retornar bem, resultados do objeto. E vou devolver o item atualizado do carrinho de compras. O objeto que é realmente tudo o que existe para a atualização. Então, vamos passar por isso novamente porque eu meio que peguei código de diferentes partes. Então deixe-me explicar o que estamos fazendo. Primeiro, estamos encontrando o item do carrinho de compras com o ID correspondente que foi passado por meio do parâmetro. Então vamos dizer que se nada foi encontrado, devolvemos um 404. Caso contrário, continuará a ver me obter os dados que entraram na solicitação porque com um put, os dados estariam no corpo. É muito semelhante a como seria no corpo da postagem. Dê-me os dados do corpo, pirataria se inclina para o modelo correspondente para atualização. E depois vamos atualizar manualmente. Então eu estou fazendo isso manualmente em uma operação maior, como eu disse, você provavelmente usaria biblioteca automática ou, ou alguma outra de terceiros ou para converter ou fazer isso para duas operações muito simples são operações muito simples, então vamos fazer isso. E então retornamos o objeto atualizado como parte dos resultados de retorno. É isso mesmo para configurar o PUT. Quando voltarmos, faremos nossa última, que é a exclusão. 27. Configure a função DELETE HTTP Azure: Tudo bem, então vamos começar com a operação de exclusão. Então eu acho que estamos fazendo isso tempo suficiente. Se você quiser clicar em Pausa e tentar fazer isso sozinho, então eu encorajaria isso. Caso contrário, podemos simplesmente percorrer isso. Já escrevi o código. Configure o método de exclusão do item do carrinho de compras antes. O que não fizemos foi oficial para torcer. Portanto, a raiz mais uma vez exigirá um valor de ID lá. E temos o ID de string de parâmetro correspondente atualizado a mensagem de log. E mais uma vez, tentamos encontrá-lo. Se não estiver lá, dizemos que não encontramos resultados. No entanto, se continuarmos, dizemos removê-lo da lista de carrinho de compras e , em seguida, retorne os resultados importantes antigos. Note que não está bem, resultados do objeto, ambos OK, resultado, pois não há dados para retornar. E é isso mesmo para o método de exclusão, certo? Então, com isso, se apenas fizermos Control Shift e B, podemos construir e garantir que não temos erros em nenhum lugar em nosso código. Podemos ver que temos erros de compilação 0 bem-sucedidos e podemos continuar. Então, agora que realizamos todas as quatro operações, quando voltarmos, passaremos por alguns testes. Usamos o Postman para chamar os diferentes endpoints e garantir que ele esteja funcionando ou que nossas funções estejam funcionando da maneira que esperamos. 28. Teste funções do Azure com a PostMan: Tudo bem, então é hora do teste. Fizemos todo o trabalho duro. Vamos colocá-lo à prova para que possamos clicar no botão Iniciar aqui no Visual Studio para começar a falar. Ou, se você estiver usando o Visual Studio Code até agora, você sabe como executá-lo. E então, em nosso console, que acompanha a execução, obtemos uma lista de todas as funções, então vemos todas elas pelo nome, graças ao atributo de nome da função que adicionamos. Mas também percebemos que cada um tem uma raiz. Sim, as regras teriam sido baseadas no nome fornecido por padrão. No entanto, nós anulamos isso e colocaremos nossas próprias raízes. E lá você pode ver como você pode chamar cada método de acordo com a rota. Se testarmos com carteiro ou qualquer outra ferramenta de teste HTTP, e eu disser, ok, chame os métodos get all. Observe que para obter todos os itens do carrinho de compras, vou chamar esse URL para que você possa realmente destacá-lo e depois copiá-lo e colá-lo no Postman clique em Executar. E então você veria aqui que você iria pegar essas coisas, essas 200, ok. Mas nada porque não colocamos nenhum dado. Claro, você também verá que o registro é atualizado. Então, obter todo o carrinho de compras que eu tento. E então foi executado. Naquele momento. Vamos tentar criar novos itens de carrinho de compras. Então, eu apenas alteraria esse método para postar. E então, no corpo, depois de ter certeza de que eu envio algum JSON, então muda para RA e, em seguida, James F para G está ligado. E o que especificamos? Para criar? Estamos aceitando apenas o nome do item. Então, vou ver o nome do item e dois pontos. E lembre-se de colocar aspas, depois dois pontos, e então isso seria apenas do Postman. Então, quando clico em Enviar, vamos ver. Em seguida, você verá que ele responde com o IID recém-criado, esse carimbo de data/hora, o nome do item e, se ele for coletado, isso é falso. Se eu tentar novamente meu gueto original, basta abrir uma nova guia, usar o mesmo que suas balas estavam usando um get e eu envio. Então estou vendo que estou recebendo dinheiro desse item da lista. Se eu tentar meu outro get, este requer o ID. Então fui ver uma barra e depois passar esse valor de ID, copiar, colar lá, então eu só deveria recuperar um objeto. Lá vamos nós. Acho que isso está funcionando bem, deixe-me tentar a atualização. Então, estou apenas criando banheiras de acordo. Então, mais uma vez, temos esse URL, colamos lá ou, na verdade, eu deveria ter usado esse URL para as atualizações. Precisamos desse valor de ID, vamos fazer um put. E então, dentro do JSON bruto do corpo da solicitação, verei que coletado não é verdadeiro dois pontos e o valor verdadeiro. Deixe-me enviar, você vê aqui ele retorna, eles serão objeto aquecido Latina saber que não é verdade. Então, se eu voltar para o presente, receber todos os envios novamente, então vou receber de volta o atualizado. Como eu disse, se você chamar essas funções dentro da mesma sessão, fui chamá-la de sessão. Então estamos executando, certo? Não, estamos ligando um após o outro, um após o outro. Ele está atualizando a mesma lista sempre. Então é por isso que você está obtendo esses resultados. Claro, se pararmos e reiniciarmos, essa lista será esvaziada. Então, é da mesma forma que uma espuma aparece quando está funcionando. Se você estiver usando essa lista, então não há problema. Uma vez que as habilidades de TI acabem e, em seguida, como backup de vento depois, você só sabe que perderá esses dados. Então você não precisa ter cuidado com isso. Mas mais tarde, mais uma vez, vamos analisar o uso de armazenamento persistente na forma de tabelas 0 são qualquer outra mídia de armazenamento que você preferir. Então, é realmente isso. Então, o último que vou fazer é excluir. Então, usarei esse URL aqui. E desta vez o tipo de método é excluído. Temos o ID e tudo mais. Eu não preciso que um corpo sujeito responda a 100 crianças velhas e todo o conteúdo. Se eu voltar e tentar executar uma consulta e nada voltar, se eu recriar, recebo um novo ID. E então, se eu tentei olhar lá de novo, vejo tudo. Isso é literalmente tudo o que há, citar sem aspas tudo o que há para nossa API rest. Quanto mais difícil se tornar esse Bs com base em marcadores de necessidades de sua empresa no final do dia, é assim que é fácil criar uma API restante inteira usando apenas o Azure Functions. 29. Teste funções com interface de usuário: Agora, uma parte fundamental de qualquer API é o desenvolvimento, é como ela interage com os aplicativos clientes. Isso pode ser um aplicativo móvel, pode ser uma web up, etc. Nesse caso, criei um simples blades onde o código pautado para interagir com os diferentes endpoints do nosso z são api de funções. Enquanto o executa. Sabemos que já temos todas as raízes. Tudo o que fiz foi adaptar a página de dados da Fitch a partir do modelo típico de blazer. E o que ele faz é testar a partir do laser quando eles colocam você em um item aqui e dizem Criar, ele realmente atualizará às vezes o que acontece é que quando você interrompe com o console aqui, isso fará com que ele positivo. Basta pressionar enter, ele continuará. Você vê aqui que ele realmente fez a chamada criar item de carrinho de compras. E então ele precisa ser recuperado. E há nosso novo item de carrinho de compras. Se eu disser um teste do blazer um, e deixe-me apenas ter certeza de que o console sabe que ele deve operar normalmente quando eu clico em Criar atualizações e nozes baixas na lista. Se eu clicar no tick para coletado, você verá aqui que ele chamará a porta. Aqui vamos nós. Então, coloque-o, atualize-o. E então, se eu remover, mais uma vez, continuo interagindo com suas pausas. Quando clico em Remover, ele deve remover o item. Deixe-me tentar isso de novo. Lá vamos nós. Então deixe-me criar mais alguns e depois deixe-me excluí-los. Cada vez que eu clicar em Excluir, você o verá atualizando a interface. Então, vou orientá-lo pelo código que escrevi para isso. Não é realmente um curso blazer. Não estou ensinando, em última análise, o bizarro de outros cursos para isso. Mas apenas dentro do contexto, vou mostrar que, do ponto de vista do blazer, ele não sabe ou se importa com o que é a infraestrutura subjacente dessa API restante. Só vai estar fazendo, há coisas relativas à nossa API restante? Eu criei um novo projeto e foi apenas um agradável Web Assembly. Maneiras simples de fazer isso. Basta ir para a solução, clicar com o botão direito do mouse em Adicionar novo projeto. Você procura blazer WebAssembly up. Estou usando dotnet procura ir em frente e criá-lo. E então, por padrão, você vai ter algum endereço aqui, endereço BCE com ambientalista que ela é dito para ser o endereço base de onde eu sei que nossas funções serão transmitindo de. Tudo bem, então sabemos que esse é o porto. Teríamos feito alguns testes com o Postman. Sabemos que essa é a nossa API padrão escrita, certo? Então esse é o endereço base para o cliente HTTP que está sendo usado em nossas crenças estão em alta. Outra coisa que eu queria apontar é que tivemos que configurar núcleos. Núcleos é referência de origem cruzada. Certo, sinto muito. Aqui está a definição. Compartilhamento de recursos de origem cruzada. Lá vamos nós. Esse é um protocolo ou conjuntos de regras que regem sua API interage com recursos que não estão no mesmo servidor. Enquanto estávamos executando o aplicativo de função antecipando com pós-dinheiro não viu nosso problema. No entanto, quando estou transmitindo, enviando uma solicitação de uma fonte externa que esses blades estão ativos quando ele está sendo executado, ele está sendo executado em uma porta diferente. Portanto, ele é visto como um aplicativo completamente diferente e, na verdade, o rejeitaria. Portanto, isso é tudo o que ativamos o CORS em um Azure Functions em nosso arquivo JSON de configurações de ponto local. Vamos para o host e abrimos um novo bloco de objetos onde dissemos que os núcleos eram estrelas, o que significa aceitar todas as solicitações. Eles não têm restrições. É claro que, quando o implantamos no Azure, isso será tratado no lado do Azure. Mas, para uma configuração local, temos que ter certeza de que está em vigor. Você pode ir em frente e fazer isso. Eu também teria replicado a pasta de modelos, então eu apenas os refiz, não ouço que as lâminas estão ativas. E, em vez disso, atualizei o namespace para o carrinho de compras, pelo menos modelos de pontos de blazer pois o nome do aplicativo é carrinho de compras, pelo menos blazer de pontos. Você terá os modelos ou acesso aos módulos lá. Outra coisa que eu teria feito seria atualizar, é claro, o piloto de pontos de dados Fitch. Ou se você quisesse fazer um novo pH, isso depende de você. Mas acabei de fazer tudo em uma página e vou orientá-lo pelo código que foi escrito. O título da página, temos as tags h1 e p. Isso é tudo apenas semântica. Você não precisa fazer isso. Em seguida, tenho o formulário de edição do topo, onde tenho o texto de entrada que estou vinculando a um objeto chamado item create e aceitando o nome do item. Então, aqui no formulário de edição, o modelo é Item Create e no envio válido, vamos chamar o método Handler create. Então eu tenho este botão de envio para o meu formulário de edição. criação de itens geralmente é um item de carrinho de compras. E eu só tenho uma instância disso lá e tratei de criar. Vai ver a resposta sempre o cliente HTTP. O que o HTTP diz cliente HTTP que estou injetando no meu componente. Então isso já estaria lá porque vou buscar dados é realmente montar como você pode interagir com cliente HTTP para que você não precise colocar isso lá. Ele já deveria estar lá. Mas o que estou fazendo no identificador criar é esvaziar o post de pontos http enquanto JSON é coletor e, em seguida, postar o item do carrinho de compras. E, na verdade, acabei de notar que isso está errado. Isso deve ser criar item de carrinho de compras realmente não importa no grande esquema das coisas, mas vamos trabalhar com ele. Então, isso deve ser criado item de carrinho de compras. Então, estou postando um corpo JSON ou serialização JSON do item de carrinho de compras criativo. E ele vai abordar itens do carrinho de compras de barra api. Portanto, esse item de carrinho de compras de barra da API é anexado ao nosso URL base aqui no program.cs. Em seguida, estamos enviando o objeto de criação de item. Então dizemos que se for um sucesso marcado ou chave ou nenhum conteúdo ou o que quer que tenha visto, sabemos que os diferentes códigos representam coisas diferentes. Então, uma resposta chave antiga é bem-sucedida, então nós apenas as chamamos de peso no assíncrono inicializado, que basicamente redesenha todo o tema. Para o assíncrono não inicializado, apenas vemos itens que é uma matriz de itens de carrinho de compras é igual a http.get do item de carrinho de compras assíncrono JSON em uma forma de RE. E temos a mesma raiz lá. Eu não vou fazer tudo com arquitetura e melhores práticas neste exemplo em particular, estou apenas mostrando uma vitória rápida. Se você quiser tudo isso, você pode fazer malabarismos. Minhas crenças são cursos não inicializados. Async obtém todos os itens e os coloca dentro deste objeto, que é projetado para os itens manipulados criar basicamente apenas diz postar quaisquer dados que surgiram como ferramenta JSON, este endpoint e, em seguida vá em frente e atualize quando tudo for bem-sucedido, saiba que o resto seria apenas eu mudando o código de exemplo de previsões meteorológicas que estava lá e apenas usar itens são o que eu disse para custos e alteração dos cabeçalhos da tabela de acordo com meus novos cabeçalhos de tabela com base nos novos dados. Em seguida, para cada item nos itens, lembre-se de itens provenientes de nossa chamada de API. Estou apenas atualizando ou exibindo, desculpe, os diferentes valores. Não, para a seção de caixa de seleção, tenho uma entrada que é do tipo caixa de seleção. Acabei de dar uma aula em que parece legal. O valor será vinculado a qualquer item.quantity é um onchange. Este é um evento que significa que sempre que você alterar o valor da caixa de bate-papo, quero chamar essa caixa de seleção método clicada em passar o item e passar o valor dos eventos. Então, porque ele sabe que é uma caixa de seleção, esse evento terá dados, era verdadeiro ou falso, alteração, etc. Onde a política nesse valor. Quando esse método clicado na caixa de seleção for chamado, ele vai pegar esse item do carrinho de compras e isso pode ser facilmente, provavelmente realmente deveria ser a atualização. As portas, qualquer tipo de objeto que tivemos usado seus vários cursos com o confronto aqui porque este é do tipo carrinho de compras que eu tento. Então, só estou mostrando que estou pegando o objeto de item do carrinho de compras aqui. Estou tomando o valor de verificação como meu, pois meu valor de args de evento terá que torná-lo um objeto neste momento. Em seguida, formulo meu objeto de item de carrinho de compras de atualização e defino dividido que sei que precisa ser definido. E então eu fui enviar sobre g sun async, esse tipo de objeto. E vou chamar URL e, em seguida, usando a interpolação, estou apenas mantendo o item.name DID. É por isso que era importante passar o item. Porque ao fazer a atualização para atender aos dados necessários, tanto o item original quanto eu podemos usar o ID. Então, estou passando esse ID e todo o objeto com os dados que representam a atualização. E então, se foi bem sucedido, então você redesenhar. Então, para a exclusão, temos um botão simples. Dê a ela alguma classe de bootstrap e, em seguida, clique temos um evento de código semelhante e possível com o item. Portanto, os detalhes que podem ser excluídos do item , mesmo que realmente precisemos apenas desse ID. Então, vamos apenas dizer vínculos de vírus, http dot delete assíncrono, não como JSON porque não há JSON para passar dados razoáveis para analisar, basta excluir. E o URI seria APIs, aquele carrinho de compras que eu tento ou item.name DID e , em seguida, redesenhamos. É por isso que você entende isso. Começa em tempo real, olhar e sentir a interface do usuário porque continuo redesenhando cada vez que a operação foi bem-sucedida. É isso mesmo. Para sangramentos estão interagindo com a API. Claro, ele pode ficar um pouco mais complicado com base em suas necessidades ou o que quer que seja. Claro, a API pode ser um pouco mais complicada. Mas, mais uma vez, estamos recebendo vitórias rápidas. E depois de entender esses conceitos fundamentais, você sempre pode construir isso para suas operações futuras. É isso. Você pode fazer uma pausa nos diferentes pontos e replicar o código. Eu apenas percorro lentamente o suficiente que você possa fazer uma pausa nos diferentes intervalos. Você pode ver todo o código. E eu encorajaria você a criar mais endpoints ou mais comportamentos na API e criar mais páginas em componentes, interagir com a referida API. Mais uma vez, certifique-se de atualizar seu endereço base e certifique-se habilitar as configurações do curso na API para testá-las simultaneamente. Você não quer ir para a solução, clique com o botão direito do mouse em Properties. E então você gostaria de selecionar vários projetos de inicialização. Você pode colocar o início ou ambos, começar com uma depuração , o que preferir, com base no processo artístico. É isso mesmo para testar usando uma interface do usuário. 30. Interact com o CosmosDB: Bem-vindo de volta pessoal. Nesta lição, vamos passar por algumas das mudanças necessárias para começar a falar com o banco de dados. O banco de dados selecionado para este exercício é um banco de dados 0 Cosmos DB. Já temos alguma experiência em lidar com isso. Examinamos usá-lo como um gatilho de entrada ou ligação de entrada. E, no geral, acabamos de passar os dados e eles se comunicarão com o Cosmos DB. Nisso, vamos adotar uma abordagem um pouco diferente para usar apenas vinculações de entrada porque há certas operações que queremos fazer. Acho que é misto. Podemos escrever o código três tipos diferentes de ondas se usarmos a ligação de entrada, porque com base na situação, o tribunal vai parecer diferente ou podemos ser um pouco mais consistentes . Então, vou mais por consistência nessa situação. E vou mostrar a vocês como você pode configurar sua função para injeção de dependência no Havaí, usar o cliente Cosmos DB para essa injeção total, que pode ser usada em todo o lugar em qualquer lugar em qualquer lugar else em qualquer outra função. Para começar, quero que passemos para novos gets. Basta clicar com o botão direito do mouse em seu projeto de funções e o objetivo de gerenciar imagens e obter este. Microsoft construiu um ponto de extensão de ponto de 0 pontos de trabalhos na web Cosmos DB. Portanto, este pacote realmente oferece uma API para Cosmos DB, bem como armazenamento de tabelas, mas estaremos nos concentrando no Cosmos DB agora. A próxima coisa é criar uma classe de inicialização conhecida como classe de inicialização seria semelhante ao que você vê em cada aplicativo dotnet Core. Então, temos um blazer aqui em cima. Em dotnet procura. Parece um pouco mais condensado do que você provavelmente está acostumado, mas essa é praticamente aquela classe de inicialização que eles meio que condensaram em um arquivo. Isso basicamente bootstraps e quase serviços para ser prontamente. Estou disponível para injeção de dependência em qualquer lugar do aplicativo quando o aplicativo estiver executando o código de escrita R12. Então é isso que isso faz. Então, criamos o nosso próprio, estou chamando isso de startup.js. E vou mostrar o código e orientá-lo por cada linha para que tenhamos uma apreciação completa do que está acontecendo. Então, basta clicar com o botão direito do mouse na função, adicionar uma nova classe chamada Startup. CSU não pode receber um erro ou algum feedback que você está criando um tipo de função que já existe. Tudo bem. Você pode simplesmente apagar tudo isso ou qualquer coisa que não corresponda ao que eu tenho na minha tela. Você apenas vá em frente e carregue de acordo. Temos o primeiro conjunto de anotações, dois pontos e estamos fazendo uma inicialização de funções. Vai ser um tipo de inicialização. Você pode ter que incluir algumas referências ausentes à medida que avança, então faça isso de acordo. Ou namespaces são lista de carrinho de compras. Já sabemos disso. E então temos, ou desculpamos, nossa classe, inicialização, que está herdando da inicialização de funções. Em seguida, temos particulares que somente configuração raiz da configuração I é igual a um novo construtor de configuração onde estamos sentando a base para ser o diretório atual do ambiente, esse é o diretório do projeto. Estamos adicionando nosso arquivo JSON no settings.js IN true, mas, é claro, o settings.js local em. Então, sabemos como acessar isso mais tarde. E, em seguida, estamos adicionando variáveis de ambiente e, em seguida, apenas construímos. Então, é claro que isso lhe daria um erro dizendo que você precisa implementar a classe abstrata, que é a inicialização de funções e fazer isso geraria esse stub de método para você. É um vazio de substituição pública, configure. Tudo isso é gerado para você, ambos dentro desse método, o que queremos fazer é dizer serviços de ponto do construtor e adicionar um singleton. Um singleton significa que tudo o que você está adicionando aqui será acesso. Uma instância estará acessível na sua aplicação. Então, uma conexão ou Cosmos DB, a mesma conexão com o cosmos DB será usada cada vez que acessarmos essa dependência, praticamente certo? Se você quiser saber mais sobre injeção de dependência e trabalhos de retenção contra uma mina de ouro, é claro que eu vou passar com esse nulo. Portanto, a string de conexão var é igual a e, em seguida, ela aparece na configuração. Lembre-se de que a configuração compile todos esses elementos, incluindo nosso arquivo de configurações. Então, já temos essa configuração como arquivo, mesmo que o nome seja diferente, ele saberá contextualmente onde encontrar o que estamos vendo configuração e me dará a conexão Cosmos DB, qual é o que chamamos em nosso arquivo de configurações locais, certo? Então, já olhamos para isso. Estou usando o emulador e mostrarei em alguns bancos de dados que criamos. Portanto, apenas certifique-se de adicionar essa chave, conexão Cosmos DB e, em seguida, adicionamos essa chave do emulador de acordo. Então, estamos chamando essa conexão de banco e, em seguida, estamos vendo se ela é nula ou vazia, depois lançamos uma exceção. Caso contrário, retorne uma nova instância do construtor de força do cosmos com a compilação de ponto da cadeia de conexão. Então essa é a nossa classe de inicialização que configuramos mais uma vez para que possamos injetar quaisquer dependências que definimos. Definimos apenas um que é para o cliente cosmos. Não me deixe pular para o nosso Cosmos DB. Já temos alguma experiência com isso. Estes são nossos mililitros. Você pode ir em frente e ir para o emulador e criar este novo. Então, temos um novo banco de dados que estou chamando de itens do carrinho de compras. Então o nome da minha coleção são itens. E para minha chave ou por uma chave de partição, estou usando essas categorias de palavras. Então, vamos fazer algumas alterações nos modelos como os temos. Mas lembre-se de que as chaves de partição gostam de uma pesquisa de alta velocidade. Então, é como índices, seus registros ou documentos, aspas sem aspas, para que possam ser encontradas mais rapidamente. Então, estamos adicionando uma nova propriedade chamada categoria, o que faz sentido. É uma lista de itens de carrinho de compras. Qual é a categoria? É comida, é roupa? É uma necessidade, não quer, etc. Então, com isso, podemos construir nosso tecido nos dados e acelerar a pesquisa, acelerar as operações contra todo esse banco de dados. Você pode ir em frente e fazer isso. Depois de criar o banco de dados, eles analisam as alterações a serem feitas em nossos modelos. Então, a única mudança que estou fazendo é realmente no item do carrinho de compras. E estou criando um GNS3. Deixe-me ir com um item de carrinho de compras primeiro. Item de carrinho de compras, um de torná-lo herdar da entidade de tabela que é cortesia desta nova classe, Microsoft dot windows, tabela de pontos de armazenamento de pontos, que vem em nosso novo pacote. Então você pode deixá-lo herdar. Você não precisa necessariamente, mas a cotação do benefício cancelar a cotação deixando-a herdar é que a classe ou o modelo saberão realmente ter acesso a todas as propriedades que obtém tocado sempre que nosso documento é armazenado para ver muitas outras metatags. Você provavelmente os notou desde quando fizemos o exercício do blog. Há várias outras metatags que elas são anexadas. Então, uma vez herdada de duas entidades, na verdade, será capaz de analisá-las. Não, também adicionei anotação de propriedade JSON à nossa propriedade id req. Desculpe, esta propriedade JSON basicamente vê que, Sim, eu sei que sou capital no mundo C-Sharp, tanto na JSON Web, por favor me encontre um id comum.A relevância disso é Cosmos DB está procurando para uma propriedade com ID comum. Quando sentarmos esse valor de ID, você obterá um monte de setas. Você pode experimentar você mesmo. Na verdade, tive um pequeno campo com a Hillary. Lembre-se disso, que precisava colocar isso lá. Então você pode realmente tentar. Depois de mostrar todo o código e tudo que tentou fazer é criar, preciso ver os erros que você recebe. Você reclamará que ela está faltando a coluna ID, mesmo que ela esteja lá. Então, só vemos quando você está no JSON, identifique como ID comum e seguida, o Cosmos DB poderá vê-lo e ver, ok, eu vejo as prisões de valor de id. Claro que não estamos sozinhos no Cosmos DB para gerar o ID. Estamos fazendo isso. Então, isso permanece o mesmo. Também adicionei outra propriedade chamada categoria. Como acabei de dizer, a categoria será nossa chave de partição. E assim como com o ID, precisamos informá-lo de que é uma categoria de chaves comuns. Claro, isso só precisa corresponder a regra do ano inteiro com a chave de partição. Então, vou deixá-lo assim. C maiúsculo para o comando Codebook Z para JSON. Então, dentro do criado, também estou colocando nessa categoria. Então, quando você está criando o item, você vê o nome e a categoria. E, claro, existem melhores maneiras de fazer isso. Você poderia usar enums, você poderia usar uma lista de seleção, etc. Mas, por enquanto, vamos apenas mantê-lo simples apenas para que possamos entender o exercício no tempo quatro, as atualizações que são realmente opcionais. Então, na verdade, vou retirá-lo e chamarei de código quando chegarmos lá. Então, vou remover isso para que a atualização não mude. Então, estamos apenas adicionando categoria aqui. E para o item do carrinho de compras, estamos acrescentando que os alunos de Andy na propriedade, bem como a propriedade JSON acima do ID. Estava vindo bem e vamos pular para a nossa função. Não, você notaria um, eu removi todas as palavras-chave estáticas, públicas. Essa era uma classe estática pública. Eu removi isso porque classes estáticas não podem ter construtores. Precisamos do construto de injeção oral. E outra coisa é que desculpe, acabei de remover essa linha. Então, se você começou a tocar novamente desconsiderado, peço desculpas. Então outra coisa é que não podemos ter métodos estáticos porque temos que modificar o código lá. E isso significa que temos que usar o privado. Campos que estão entrando. Ao explicarmos o que está acontecendo aqui, só estou mostrando o erudito que você obteria se levantar o método é estático, portanto, nenhuma classe estática nem métodos estáticos. Tudo bem, vamos passar linha por linha e ver o que está acontecendo aqui. Então, primeiro, estou injetando o cosmos afirma que o cosmos client está vindo desde o início. Portanto, isso está retornando uma instância ou a dependência necessária para que possamos acessar o cliente Cosmos. Então, vou escrever um construtor circulado para construtores CTO, nossa banheira, banheira. E então você poderia realmente escrever nos clientes cosmos. E, em seguida, usando pontos de controle, ele oferecerá para inicializar e injetar o campo para você. Então, vou mostrar atalhos de teclado. Você pode escrevê-lo rapidamente. Queríamos um cliente cosmos privado somente leitura. E isso é inicializado dentro do nosso construtor. E então temos um contêiner privado, contêiner de documentos. E então veremos que o contêiner de documentos é igual ao cliente Cosmos. Pare contêiner pelo nome itens do carrinho de compras com os colegas nos itens. Portanto, se você passar o mouse sobre isso, verá que ele pede do banco de dados e o ID do contêiner. Com essa ferramenta. Com o contêiner de documentos, agora posso acessar o banco de dados, os itens feitos para todas as operações de que preciso. Eu estava afirmando que acho isso um pouco mais consistente para fazer com algumas linhas do que escrever em gatilhos individuais são código de vinculação por método. O que teria acontecido é que eu teria escrever o Cosmos DB. Depois do inicializador Cosmos DB para ter os valores da cadeia de conexão. Eu vou fazer isso rápido, geralmente, como seria . É isso. Então é assim que nossa notação seria como uma ligação de entrada. Então, quando analisamos as ligações de entrada anteriormente, fizemos isso com o projeto TypeScript, onde realmente modificamos a função dot js arquivo JSON. Não há função que o arquivo JSON seja gerado para nós quando estamos usando os projetos C-sharp. Então, na verdade, colocamos as ligações e gatilhos aqui mesmo em nossa função As em rotação. Então, ele diria Cosmos DB, qual é o nome do banco de dados, qual é o nome da coleção e, em seguida, a cadeia de conexão, que, claro, apenas apontaria para o nome nas configurações do aplicativo. E então chamaríamos isso de cliente de documento, o cliente sabe com base na situação, você pode acabar usando diferentes tipos de dados aqui para obter todos os itens. Usaríamos o cliente e, em seguida, o código de consulta ficaria assim. Tudo bem, então, primeiro, teríamos que encontrar um URI ou gerar um URI para a coleção. Então vou dizer que o URI ou o ponto de fábrica criam, desculpe, criam URI de coleção de documentos e, em seguida, damos a ele. Então aqui você está vendo que estou repetindo essas cordas por todo o lado. Você provavelmente gostaria de pensar usar uma constante mais uma constante para o nome do banco de dados ou preocupação com o nome da coleção, etc. Não suportando isso, nós simplesmente passaríamos o ID do banco de dados e a coleção. E então nós diríamos que documento a consulta relativa ao tipo de dados onde um barco consultar. E, em seguida, o cliente documentou o ponto cliente cria consulta de documento E, em seguida, passamos o URI como consulta de documento. E tudo isso pode ser estendido para o hub where cláusula é igual a dizer como estamos e, em seguida, colocar em alguma condição pela qual você queria encontrar os documentos. Pode ser que você queira encontrar ou fazer como uma pesquisa que seria útil para algo como uma pesquisa. De qualquer forma, isso retornaria todos os documentos e em seguida, diríamos que, embora a consulta tenha mais resultados, nós os consultaríamos e, em seguida, potencialmente preenchemos pelo menos que pretendemos retornar. Então, tínhamos essa lista de top. Eu removi isso também. E só estou usando aqui localmente. Então, na verdade, você simplesmente adicionaria cada item à lista. Isso era o que você estava fazendo, não foi adotado essa abordagem Eu só estou mostrando porque é bom conhecer suas opções. Então, vou comentar isso e vou comentar isso. Portanto, pelo menos quando você olha para o código-fonte mais tarde, você pode ver que isso teria correspondido a esse código. No entanto, por causa de injetar o cliente no topo, agora posso ir direto e C. Então, primeiro, minha lista gerada aqui é declarada. E então eu digo que os itens var são iguais ao ponto do contêiner do documento obter consulta de item eu iterador em relação ao tipo item do carrinho de compras. Isso vai ser como tem que sair e apenas obter tudo e eles verão que alguns itens têm mais resultados. Nós simplesmente seguiríamos em frente e adicionaríamos. Uma ferramenta de três polegadas ou uma nova lista. Tudo bem, então a resposta var é igual aos itens que são lidos em seguida assíncrono. E então nós apenas colocamos esse intervalo em nossa lista suspensa, em nossa lista. E então é isso que retornaremos. Venha pensar nisso. Eu provavelmente poderia até mesmo esses gráficos de linha. Deixe-me ver se isso funcionaria. E itens C lidos por pontos. Em seguida, é ver pontos. Ok, então é um curso suave assíncrono que eu adoraria a nossa largura. Bem, então, se eu fizer isso nossos pesos, então eu seria capaz de fazer uma lista de tarefas sobre o que é devolvido. Lá vamos nós. Então, provavelmente nem preciso de tudo isso de qualquer maneira. Duas linhas. Você vê, às vezes você escreve algo e então você percebe que eu poderia ter escrito um pouco melhor. Então, vou comentar que, por enquanto , podemos voltar e testar e validar se meu refator funciona conforme o esperado. Mas você vê o objetivo de obter os itens e então nós os obtemos está em itens que os pontos lidos fazem o assíncrono, que basicamente o resultado não são os itens que estavam acima que estão em nossas cuecas ou entre parênteses para que podemos chamar a lista de dois no que for retornado. Tudo bem, isso é o que estamos retornando quando tentamos obter tudo. Então, vamos seguir em frente. O obtém por ID. Então aqui é onde seria como para like com base no que fizemos anteriormente, onde realmente tínhamos essa vinculação, onde procuramos o ID para a chave de partição, que neste caso é categoria. Então aqui eu modifiquei a rota para dizer me dê ID e chave de partição. Então esses são os valores que vou usar para executar minha consulta. Eu poderia realmente ter usado o mesmo tipo de ligação que teria usado anteriormente dentro desse método aqui. Isso realmente nos ajudaria a obter o único registro que corresponde a esse ID e a chave de partição. Então, aqui está um exemplo de como isso seria, esse código de vinculação. Portanto, Cosmos DB, temos o mesmo nome do banco de dados, nome da coleção e string de conexão. E então fui dizer a ele que o ID está vinculado ao ID que vem do parâmetro aqui. A chave de partição da mesma forma está vinculada à chave de partição que vem aqui, e então isso será espalhado. Vá para Cosmos DB, faça a pesquisa e armazene o resultado em vez do item do carrinho de compras. E depois que tivermos o item do carrinho de compras, você não seria tão fácil quanto retornar resultados de objetos volumosos, o item do carrinho de compras. Mas, como eu disse, prefiro um tipo de consistência porque esse código de vinculação vai parecer quase totalmente diferente desse código de vinculação. E você tem que ter muito cuidado e eu não estou dizendo que é ruim, eu não estou de forma alguma batendo no código. Estou vendo que não é minha preferência, mas estou mostrando quais são suas opções. Então, vou comentar isso que o PCAOB seja um ponto de referência. Mas o que eu fiz aqui é dizer que o item var é igual ao nosso contêiner de documentos de pesos, leia o item assíncrono. Então, obtenha a consulta de item I iterador. Isso é tudo o que chegamos à nossa coleção. Este é um que você quer, um vai querer um item de carrinho de compras e eu dou a ele o ID, e eu lhe dou a chave de partição, que é categoria. Claro, também estendi a listagem de parâmetros para incluir o ID e a categoria. E acabei de fazer uma rota que aponto observar para ter a categoria de barra de ID nela. Quando você está tentando obter, você deve passar o ID do que está recebendo, bem como o nome da categoria. Você pode falar com glicose. Isso é o que fazemos. E, em seguida, o item voltará com um código de status. Tudo bem, então ele vai dizer que se o código de status é equivalente ao código de status HTTP, telefone, então retornaremos não os resultados do telefone. Tudo bem, agradável e simples. Caso contrário, vamos em frente e retornamos os resultados importantes antigos estão ok. Resultados do objeto com o recurso item.name. Então você pode ver que entrou em erupção em uma tentativa porque eu estava fazendo algo errado quando escrevi isso e eu precisava ver a exceção. Então você não pode fazer isso se precisar, mas é realmente e realmente não necessariamente. Então eu fui removê-lo apenas para simplificar o código e mostrar exatamente o que é necessário. É assim que é todo. Você procuraria um registro do armazenamento de dados Cosmos DB. Agora vamos rever o que acontece quando fazemos nosso Create. Tudo bem, então o que estamos fazendo aqui realmente e realmente é ver que queremos fazer o mesmo tipo de vinculações. Então, é claro que eu comentei, mas se você olhar para ele, é o mesmo tipo de vinculação, exceto que esta seria uma ligação externa nas ligações de saída. Portanto, esta é uma vinculação de entrada. Esta é uma ligação de saída porque, em seguida, ela vai produzir algo para o Cosmos DB. Então, essencialmente, ele está obtendo o banco de dados de coleção Cosmos DB, sabemos tudo isso. Mas então o último parâmetro aqui. É do coletor assíncrono tipo I em relação ao tipo de dados. Sabemos que queremos um processo e, em seguida, o nome dele. Então deixe-me colocá-lo na mesma linha para que pareça um pouco mais uniforme. Esse é o tipo de dados que temos que usar porque estamos operando de forma assíncrona. Se você não estivesse fazendo isso de forma assíncrona, então faremos uma variável Alt. Você não pode usar verbais antigos em vez de um método assíncrono, temos que usar o coletor assíncrono relação ao tipo de dados e, em seguida, ao item do carrinho de compras. E, mais tarde, no código, depois de recebermos o item do carrinho de compras e tudo, teria que fazer algo assim para adicioná-lo à coleção. Então, vamos ver. Itens do carrinho de compras ALT. Então, um carro com esse nome que deveria ter sido itens de carrinho de compras. Só estou nomeando isso porque sabemos que é uma ALT. Está tudo colocando no Cosmos DB, certo? Portanto, itens do carrinho de compras, não adicione assíncrono, e então passaremos o item que ele deve estar adicionando. Isso é realmente o que aconteceria no final dessa operação. O código antigo comentado, tanto quanto comentado mais frio. O que estamos fazendo, no entanto, é que estamos vendo, claro que sabemos que obtemos os dados do corpo, analisamos de acordo e, em seguida, criamos um novo item do tipo de cartões de compras onde nós passe o nome e a categoria que veio por meio de nossa solicitação. E então vemos quantidade do documento e o ponto r criar item assíncrono. Nós fornecemos o item e, em seguida, damos a ele o valor da chave de partição. A relevância desse valor de chave de partição é que estamos usando a categoria que foi enviada como dados, certo? Então, quando eu disse essa categoria, quando você está criando esse item e essa categoria, estamos criando para nossa definição desse valor. Então, quando fizemos nosso exemplo de blog, onde eu usaria o ID para ID e chave de partição. Nesse caso, estou mostrando um exemplo mais prático. Agora, você realmente gostaria de cortá-lo com base em algo como categoria ou agrupamentos. Estamos usando a categoria como o agrupamento. Então, uma vez que você fizer isso, apenas retornamos os resultados do objeto chave antigo com o item de acordo. Assim, qualquer uma dessas linhas funcionaria em relação ao difícil não comentado de entrar no tribunal de adultos. Vejamos a atualização e, como eu removi a categoria do item do carrinho de compras de atualização, estamos recebendo esse erro, mas quando chegamos lá, podemos vê-lo. Não, eu não vou gastar tempo procurando alternativas para o put e a exclusão que você pode ir e pesquisá-las. Eu só vou avançar e mostrar como eu fiz isso. Então, atualizei a raiz ou a necessidade de atualizar a rota para incluir a categoria. Então eu não coloquei na categoria porque do jeito que estamos fazendo isso, sempre precisamos dessa chave de partição. Então eu preciso estender isso para a categoria. Claro que o método é colocado. Então, estamos recebendo os dados da solicitação, analisando-os. E então eu vou ver se nossos itens, vou pegar o item do banco de dados. Então, estamos usando o mesmo código que teria usado no single GIT, certo? Bem, desta vez a chave de partição está vindo da nossa categoria de parâmetros, ou apenas assumiremos maneiras. Então, preciso ter certeza de colocar a categoria de string. E depois que ele encontrar o item ou não, ele verificará enquanto chave. Se ele o encontrou, seguimos em frente para dizer recurso de ponto de item. Os dados após a conclusão, os dados de doutorado são armazenados no recurso item.name. É por isso que retornamos recurso de ponto de item saltado não apenas no item. Não sei se eu apontei isso antes. Item.name, resource e, em seguida, atualizamos o que precisamos atualizar para nenhum lugar que eu queria atualizar no Coletado. Portanto, se você estendê-lo para ter nome em qualquer que seja, item.name resource pensou nessa propriedade. E então somos pesos documento contêiner ponto upsert item async, onde enviamos de volta o recurso ponto do item por muito. Então, depois de atualizarmos o recurso ponto do item, nós o enviamos de volta. Então é isso que vamos retornar de qualquer maneira, como os dados atualizados. Na exclusão, atualizamos novamente a raiz. Então, estamos tomando a categoria como uma chave de partição. E então vamos ver um item de exclusão de contêiner de documento de pesos está vendo. Estamos vendo que estamos excluindo um item de carrinho de compras. Queremos excluir o ID e essa chave de partição específica. E então retornamos o resultado. É basicamente isso para esta operação. Tudo bem pessoal, então vamos testá-lo em qualquer coisa que fazemos. Sempre que fizermos algo legal, temos que testá-lo. Vou apenas falar Carteiro e já fiz um teste para o pós-guerra que criei opor e dei a você a categoria de frutas. Aqui está um retorno bem-sucedido. Podemos ir e pegar. Então isso está ficando tudo e eu tenho dois registros lá, o sol que e eu temos maçãs. Um deles está na categoria de alimentos, um está em uma categoria de frutas. Então, mais cedo, quando eu era estatística, eu estava usando necessidades e desejos como meu teste. E o que eu notei foi que ele realmente retornou um 500, certo? Então eu tenho um cartão de identificação de carrinho, chaves de partição, então isso realmente deve me dar um 404. Significa que você não consegue encontrar o que estou procurando. Um 500 indica que há um problema no meu servidor que não é preciso. Se você olhar aqui, verá que ele está realmente lançando uma exceção porque o cliente HTTP que está fazendo a chamada para o cosmos DB tem um método lá que diz garantir que nosso que diz garantir o código de sucesso. Se ele vir algo diferente de 200 ou um desses 200 códigos de resposta, na verdade, ele executará uma exceção. Então, mesmo que esteja vendo que é um 404, ele está lançando uma exceção que está se manifestando como um 500 para o cliente, que não queremos. Então, o que eu fiz foi refatorá-lo um pouco. Então, estou mostrando o código que está sendo chamado e que está lançando uma exceção. Meu refator faria com que eu fizesse um teste que chama dentro da tentativa. Em seguida, retorno os resultados do objeto chave antigo e, em seguida, 40 catch. Vou dizer que pegue a exceção cosmos na forma de um objeto chamado E. Então Cosmo, então a exceção é exceção personalizada que está sendo lançada por esse método. E então, quando o código de status for equivalente e podemos apenas usar a norma E do código de status embutido para não telefonar, queremos retornar um novo 404. Tudo bem, então esse é o meu fator literário. Então, vou reiniciar isso e tentar isso novamente. Se eu executar isso novamente, deixe-me apenas ter certeza de que isso está sendo executado. Então, se eu executar isso novamente e pressionar Enviar, não, não há instância ou não há indicação de uma exceção no log e estamos saindo do 404, então isso é muito melhor. Eu queria isso como comida. Deixe-me tentar um carrinho. Solicitações que não devem dar quatro ou quatro ou 500, e lá vamos nós. Podemos recuperar o registro com sucesso. Agora vamos tentar colocar. Inicialmente, eu tinha a categoria em que estou disposto a pegar a sacola e fui apenas deixá-la coletada é verdade que esses atualizam nosso valor de ID. Portanto, o ID e as chaves de partição necessárias para a colocação, deixe-me colocar os dois e depois atualizar. Então agora você verá que isso é verdade. Então, inicialmente, sabemos que era falso. Podemos ver que é verdade. A atualização funciona. Em seguida, vamos excluir. E, mais uma vez, precisamos colocar nosso ID e uma chave de partição para a exclusão. Então deixe-me fazer isso, e isso é um 200. Certo. Então, se eu tentei voltar, só recebo um. Então, todo o nosso código está funcionando com nosso Cosmos DB. Claro, se você quiser validar ainda mais isso, você pode abrir o MLA ou criar olhando para o MLA para garantir que ele esteja lá e, em seguida, fazer todos os seus ajustes de acordo. Brinque com ele, explore, veja o que é possível. 31. Atualizações à interface do usuário: Tudo bem pessoal, então acabamos de passar por silencioso nosso código, configurando nosso aplicativo para usar o Cosmos DB, certo, então vamos passar rapidamente por algumas das mudanças na interface do usuário que precisam ser feitas. Desde que atualizamos as informações de raízes para alguns de nossos endpoints, como mudamos, o get também precisa da chave de partição, coisas assim. Portanto, é claro que os endpoints precisarão ser atualizados de acordo. Portanto, em nosso cliente, podemos deixar o endpoint da API de rota ou o endereço base como está. Mas, em nosso componente, farei alguns ajustes na atualização e na exclusão. Para as atualizações. Dissemos que sim, pegamos o ID, mas também queremos que as categorias já tenham acesso ao item. Então, vou dizer barra, adicionar o valor da categoria também o mesmo para Excluir. Vamos apenas adicionar na categoria. E isso é realmente tudo o que há para atualizar essas chamadas de endpoint. Claro, se você estiver estendendo para ter um discurso detalhado em que você clica, veja apenas os detalhes um registro que você precisará considerá-los. Quero dizer, basta excluir esse pedaço de código e mostrar outra atualização que foi feita. Inicialmente eu tinha isso como valor igual e nasceu para o bool, mas isso deve ser verificado. A caixa de seleção do tipo de entrada marcada é igual a qualquer valor que seja. E então temos esse evento e nada muda para qualquer outra coisa. Vou testar isso rapidamente. Tudo bem, essa é a nossa interface de usuário. Vou testar isso novamente para ajudar com o Cosmos DB. E a categoria seria aleatória. Crie um item de carrinho de compras. Lá vamos nós. Tudo bem. É claro que sempre podemos atualizar o código que ele esvazia as caixas de texto, desde que algo seja adicionado com sucesso. Saiba antes que você notasse que sim, ele estava chamando bala. O valor da verificação não estava sendo exibido quando era verdadeiro ou não, então acabamos de atualizar isso. Então, se eu verificar este, deixe-me abrir a janela do console para que você veja que ela vai chamar a atualização. Aí está o lugar o que é chamado com sucesso. Então, se eu navegar para longe dessa página no retorno, ela executará uma nova consulta. E às vezes, quando você interfere no console, ele faz uma pausa. Mas aí está, Essa é a nova consulta e saiba valor do cheque está sendo exibido. Então, se eu excluir, podemos ver que a função foi chamada, mas isso não é redesenho, então provavelmente posso revisitar isso. Mas se eu navegar e voltar e permitir que ele execute o git, veremos aqui que ele realmente foi excluído. Portanto, provavelmente podemos atualizar o código da interface do usuário para redesenhar corretamente depois que eu excluir. A correção rápida e fácil para isso é modificar ou clicar no método de retorno de chamada de evento. Então, em vez de fazer o que fizemos com os args do evento e, em seguida, chamamos o nome do método aqui. Vamos ter nosso sinal de anúncio, abrir parênteses, depois abrir e fechar. É mais como uma função de delegado e, estamos delegando-a ao nosso item clicado para excluir. Tudo bem, tão praticamente isso resolverá esse problema de redesenho porque a maneira como o componente carrega que estávamos fazendo isso antes, ele realmente tentaria recarregar tudo antes dele na verdade, registrou que a lista de itens foi atualizada. E outra coisa que você pode me ver fazer é usar uma lista em vez de uma matriz que é realmente efeito material normal, eu apenas tendo a preferir listas. Ambas as áreas podem ser mais eficientes. Isso é além do ponto nisso, neste momento, é assim que você pode fazer com que essa exclusão redesenhe a página corretamente. Mas é isso mesmo para as mudanças necessárias ao nosso cliente. 32. Revisão da seção - Crie a API REST.: Tudo bem, então onde é outro marco e vamos apenas revisar alguns dos principais pontos de discussão dessas atividades. Ponto principal número um, esperamos saber ter criado uma função com um arquivo ou um arquivo com uma função. Ninguém percebeu que podemos ter várias funções no mesmo arquivo de classe, o que, no caso de criarmos uma API rest seria um pouco mais eficiente em termos de não espalhar todos os relacionados endpoints ou comportamentos em vários arquivos, mas apenas tê-los em um arquivo para 1 de referência. Também analisamos o fato de que podemos definir os nomes das funções separados da raiz. Com nossa definição das regras, poderíamos realmente imitar API RESTful e o mentee e as ofertas padrão. Podemos obter diferentes operações como GET, post, PUT e delete incluídas. E nós também em ajuste antigo ou raízes com parâmetros que precisam ser passados nos quais seriam automaticamente desossados em relação a eles estarem presentes no cabeçalho do método. Então, essas são algumas coisas que nós vimos. Não olhamos para nenhuma segurança fará isso quando formos para o seu lado quando estamos publicando isso. Então, todos eles estão sendo executados em nível de autorização anônimos. Uma das razões pelas quais você não gostaria de fazer isso mostrado ou mesmo mestre é que cada pedido, essa chave tem que ser prisões. Nós olhamos para isso em lições futuras. Estou apenas apontando por que permanecemos anônimos para todas as nossas operações de API. Também analisamos a integração com nossos dados. E nós, vimos que você sempre poderia adicioná-lo como uma ligação com base no todo que você se integra a ela, o código ficará diferente. Então eu incluí os trechos comentados que meio que andariam de mãos dadas com a operação em manuscrito. No entanto, eu tinha adotado uma abordagem diferente porque quando usamos ligações, cada método baseado no tipo de vinculação ou no que estávamos fazendo. O banco pode exigir diferentes tipos de dados e maneiras diferentes de interagir com a referida vinculação. Em vez de ter isso, você sabe, todas essas mudanças em todo o lugar, eu fui com a opção de injeção de dependência onde estou usando os clientes cosmos. Configuramos uma classe de inicialização que teria inicializado a fonte que queremos nosso cliente cosmos. E ele está recebendo isso da conexão Cosmos DB, que é armazenada no meu SON settings.js local. E é claro que estamos emulando isso usando o emulador de armazenamento, pelo menos por não. E, tendo feito isso, eu posso saber apenas injetado em todos os lugares. Então, originalmente, teria obtido métodos estáticos e classes estáticas públicas. Eu tive que pegar toda a palavra-chave estática para dar suporte à nossa injeção de dependência com este contêiner de documentos, poderíamos realmente confiar. Estou mais consistente no meu livro WE de variedade no código para realizar certas coisas. Saiba que está sendo dito, é por isso que eu lhe dou as opções porque dobras diferentes, traços diferentes, situações diferentes podem exigir execuções diferentes, certo? Então, não necessariamente vendo que é assim que precisa ser feito, só estou mostrando a você do jeito que prefiro. Tudo bem. Portanto, isso é realmente tudo o que há para ou API. Também analisamos o fato de que, com o nosso Cosmos DB, temos que incluir nossa chave de partição. E ao fazer isso, tivemos que garantir que nosso modelo que representa nossa tabela Cosmos DB tenha Jesus On Property ID e propriedade JSON que corresponda ou nome da chave de partição. A última coisa que fizemos foi apenas a atualização ou a interface do usuário para garantir que ela fosse reflexiva as novas estradas e qualquer outra coisa. É isso mesmo para este módulo, espero que você tenha conseguido muito e eu quero que você se sinta inspirado a ir e tentar fazer isso sozinho. Você pode ver que o Photoshop é bastante leve. É uma maneira fácil de começar a escrever código e realizar coisas com toda a sobrecarga de arquivos de projeto de dois minutos e configurações necessárias com tudo isso dito e feito. Vejo você no próximo módulo. 33. Implantação de funções do Azure: Tudo bem pessoal, bem-vindos de volta. Nesta seção, vamos examinar a publicação ou um 0 funciona praticamente em um 0. Portanto, há várias nuances às quais precisamos prestar atenção. Já falamos sobre os modelos de hospedagem antes, mas vamos dar uma olhada neles novamente. E vamos explorar as necessidades que o processo de pensamento procurado precisa ser colocado quando vamos publicar nossa função . Então fique atento. 34. Publicar funções do Azure: Tudo bem pessoal, então vamos começar com nossa implantação. Então, vamos clicar com o botão direito do mouse ou uma função para cima e ir para Publicar. E então nós pegamos esse assistente. Então, queríamos publicar em um 0, selecionamos isso e, em seguida, precisamos especificar um alvo. Talvez eu tenha mencionado inadvertidamente anteriormente neste curso que, se você estiver usando o Windows, talvez queira usar o C-sharp e, em seguida, você pode usar outros idiomas para outras plataformas. A realidade, no entanto, é que .net é realmente multiplataforma. C-sharp funcionará tão bem no Windows quanto não marcado e Linux, essa é a realidade. Portanto, sua função acima do nível básico, pode ser implantada na versão Windows desta função para cima ou na versão Linux desta função para cima. Da mesma forma que Python, Java e TypeScript e JavaScript em qualquer uma dessas linguagens também podem ser suportados. Você também tem opções para publicá-los como contêineres com o Azure Container Registry, que pode permitir que você hospede sua imagem do Docker. No entanto, vou prosseguir com o Windows. Depois de selecionar o fim de semana do Windows, nenhuma visualização ou pesquisa pelo aplicativo Photoshop já tem uma função ativada dessa forma que eu criei desde o início, mas não vou usar isso. Eu queria criar um novo. Então, vou clicar em criar uma nova função para cima. E então ele vai me pedir o nome. Alguém acabou de ver uma API de hífen de carrinho de compras , o nome da assinatura. Claro, este é que você pode ser solicitado a entrar com seus 0 dois pontos, você possa continuar a fazer isso. Vou deixá-lo em um dos grupos de recursos existentes. Lá vamos nós. Função de r g. Se você não tiver nenhum grupo de recursos, você pode simplesmente clicar em Novo e, em seguida, criar um novo nome. Então temos nossos tipos de planos. Portanto, lembre-se de que temos o plano de consumo, o plano premium e o plano App Service. Então, apenas para recapitular quais são os tipos de plano e os diferentes prós e contras de cada um. O plano de consumo é o servidor, o baço é o plano mais acessível. Isso é prós e golpe é que ele realmente tem limitações com o tempo de execução. Depois de cerca de cinco minutos ou mais, todo o aplicativo vai realmente enrolar a cúpula. Então, ele desalocará recursos. E então, quando você fizer outra solicitação, levará tempo para enrolar novamente. Então, é claro, para testar vitórias rápidas, isso seria uma boa abordagem. No entanto, para um cenário real em uma configuração de produção que você precisa de uma eficiência máxima e tempo máximo de atividade, você provavelmente desejaria usar o premium onde ele não se resume a Recursos. Você terá recursos dedicados em todos os momentos e poderá acessar VNEts e outros recursos na rede. Isso é um nível de rede. Claro que isso custa um pouco mais. Sua outra opção seria fundida e o plano de serviço de aplicativo. Então, talvez você tenha um serviço de aplicativo executando nosso site já ou outra API. Na verdade, você poderia simplesmente implantá-lo nesse plano. Além disso, eu queria seguir esse plano de consumo. Depois de selecionar isso, você escolhe sua localização, é claro. E para mim, essa será a ferramenta Leste dos EUA. E então você escolhe suas histórias ou cones. Eu só tenho um, então isso pode permanecer. E, em seguida, seguimos em frente e clicamos em Criar. E depois disso for concluído, onde leva de volta a esta caixa de diálogo, onde podemos optar por executar a partir do arquivo de pacote. Então isso está marcado e é recomendável praticamente o que está dizendo é que ele realmente implante mais como um arquivo zip com todos os arquivos necessários, as DLLs e os arquivos de recursos que precisamos. E ele será montado como uma imagem do aplicativo em vez de os arquivos reais estarem lá. Com a velha tendência de entender os meandros disso, vou deixá-lo marcado afirma-se que é recomendado, então seguirei a recomendação deles. Então podemos clicar em Next. E então aqui eles querem que nós decidamos. Você quer publicar como um site normal? Antes de haver o CICD, era assim que costumávamos publicar. Ele geraria um arquivo publicado. Implante todos os arquivos em um local específico dentro da rede ou da sua máquina e, em seguida, ele pode copiá-los e colá-los no destino. Ou você quer usar o CICD com o GitHub? Então eu já adicionei esse GitHub. Se você quiser, você sempre pode ir em frente e fazer isso. Você pode adicionar o controle de origem usando essa opção que estaria no canto inferior direito do Visual Studio. Depois de fazer esse pequeno enviado para o GitHub, provavelmente você pode voltar aqui. Certo, alguém para usar o CICD com o GitHub Actions e depois terminar. Então isso significa que cada vez que eu verificar uma alteração, ela realmente acionará a implantação. Em nenhum lugar leva à nossa tela final, onde ela está nos dando um resumo de tudo o que levou, por favor. Na verdade, ele vai adicionar esse novo arquivo que é chamado de arquivo YAML. Um arquivo YAML, que é Kelly, tem todas as instruções de implantação que o GitHub usará para determinar o que precisa acontecer. Também obtemos uma prévia do URL que será gerado para nossos zeros. Então, tudo o que precisamos, podemos acessá-lo ao vivo por meio desse URL. É aí que nosso EPA estará acessível. E aqui, veremos algumas das dependências que o Application Insights precisa ser configurado. Vamos seguir em frente e fazer isso. Lembre-se de que gostaríamos de ter isso para o registro. Na verdade, você pode simplesmente ir em frente e clicar em Avançar através deste assistente e permitir que ele termine. Depois de fazer isso, certamente concordava com os dentes que estão configurados. Eles também estão mostrando que eles substituirão o armazenamento do Azure para localmente que estamos usando o emulador, mas uma vez que implantarmos saberá que ele deve estar usando o armazenamento real, cito. Tudo bem, então com tudo isso feito, e se você quisesse modificar o amplificador por qualquer motivo, ele não poderia ir para Mais Ações, edite. E está mostrando o que é necessário. Como eu disse, como eu disse, isso realmente será acionado quando fizermos um check-in. Se eu abrir a janela git changes, você verá que ela está adicionando todas essas alterações. E, em seguida, vou ver uma atividade de implantação, coluna de implantação. Então eu fui apenas vir e o coletor salvou todas as alterações e permitiu-o empurrar para o repositório. Podemos pular para o repositório no GitHub e podemos clicar naquele pequeno ponto que aparece ao lado do frango ou para confirmar números. Então, se eu fizer esses detalhes de entrada, vamos pular para o CID ver a tela CICD. Então, vamos dar alguns para terminar. Depois de alguns minutos, isso deve ser feito. Vamos pular para o nosso painel. Vejamos nossos recursos. Então, vou para todos os recursos e devo ver minha nova função. Lá vamos nós. Agora, antes de avançarmos com a função, lembre-se de que precisamos um Cosmos DB ou qualquer tipo de banco de dados que você teria usado. Você precisa que exista para ter essa conexão pronta para teste. Vou despejar o nosso painel e já criei o Cosmos DB, mas vou orientá-lo pelo processo independentemente. Então você pode ir para Todos os Serviços e depois procurar o Cosmos DB. Depois de ter o Cosmos DB, você criaria. Em seguida, estamos usando o SQL principal. Não, nesta tela, você escolhe os grupos de recursos. Então eu recomendo que você escolha o mesmo grupo de recursos que sua função para cima, é claro, você insere NameNode sem oposição. A nomeação é muito rigorosa, então você não pode usar letras maiúsculas ou qualquer coisa. Então eu teria chamado os itens do carrinho de compras. Claro, isso é realmente apenas um nome de conta, então você não precisa necessariamente chamá-lo assim, mas você dá esse nome se ele disser que não está disponível, você apenas tenta torná-lo um pouco mais personalizado. E então você escolhe um local que seja melhor para você. Mais uma vez, recomendo escolher um local o mais próximo possível de onde a função foi implantada. Depois de fazer isso, você pode escolher se deseja provisionar taxa de transferência ou sem servidor. E se você escolher sem servidor, obviamente não tem as opções abaixo. Se você escolher throughputs provisionados, poderá optar por aparecer que aplicam esse desconto de nível gratuito. Saiba o que experimentei no passado é que não consegui prosseguir com o desconto de nível gratuito na segunda terceira bandeja. Então, estou apenas apontando esse velho. Se você tentar com ele aplicado e acabar tendo uma implantação de campo, você teria que excluir esse recurso cohere, tente novamente. E eu recomendo que você não se inscreva. Claro, se for sua primeira vez, então você pode deixá-lo nisso. Mas se você escolher não se inscrever, ele começará a custar-lhe ou você pode simplesmente escolher sem servidor. Você também pode alterar a política curvada para economizar custos. Portanto, como este não é um sistema de produção, você não precisa necessariamente ser geo-redundante. Você pode fazer lojas de backup redundantes locais para que ele custe menos dinheiro. Mas se sua produção e eu recomendo que você deixe isso em geo-redundante, essas são as configurações reais para reais que você teria que ter certeza de que estão lá. E o que vou fazer é saltar para minha conta já provisionada do Cosmos DB. Quando você estiver aqui, você quer ir para o Data Explorer? Não, Este Data Explorer, parece exatamente com o que teríamos experimentado com o emulador. Então você cria seu novo banco de dados acordo com a forma como você teria escrito um código, é claro. E praticamente o que você fez nas forças armadas, basta repetir essas etapas para criar seu banco de dados e o contêiner, bem como a chave de partição dentro desta. Tudo bem, então com toda essa configuração, queremos ter certeza de que obtemos a cadeia de conexão correta. Então, aqui está uma cadeia de conexão primária. Podemos copiar isso e depois voltar à nossa emoção. Então, vou apenas ir até o painel, pular para a função para cima. Em seguida, dentro da configuração, precisamos adicionar essa chave de conexão primária. Lembre-se em nosso código, kudos configuram que precisaríamos procurar no ponto perturbador JSON localmente, que teria sido o arquivo JSON de ponto de configurações locais. Isso é o que você é reconhecido como as coisas opostas. No entanto, em uma configuração implantada, precisamos configurar ou Configurações do aplicativo. Você verá apenas uma nova configuração de aplicativo fornecer o nome apropriado relação ao que escrevemos no código, que tem conexão Cosmos DB. E então você cola a chave do clínico primário aqui. Eu já fiz isso. Aqui está. Eu adicionei esse dinheiro. Bem, a conexão Cosmos DB e o valor. Depois de ter toda essa configuração, você poderá prosseguir para o teste. Para testar, podemos clicar em funções, e isso nos dará uma lista de todas as funções que foram implantadas neste. Se eu clicar em qualquer um deles, vamos começar com o carrinho de compras que eu tento. Aqui você verá um painel de todas as execuções. Você já viu como esse painel já parece. Se você for para o trimestre e testar, observe que não é possível escrever código para a função aqui porque ela foi realmente implantada a partir do Visual Studio. Portanto, todas as edições precisam acontecer no Visual Studio. É realmente apenas montá-lo e tem o mínimo no que diz respeito às configurações . Então, aqui está mostrando que o script israelense carregando dessa DLL, essa é a versão compilada de todo o código-fonte, certo? Isso é o que veríamos lá. Mas se voltarmos e obtivéssemos o URL da função, poderemos obter esse URL, que podemos colar no navegador para testar. Se você quiser monitorar, como vimos antes, você pode simplesmente ir para o monitor e ir para registros. E quando isso estiver conectado e aberto em execução, você pode prosseguir para o teste. Então, vou abrir em uma nova guia do navegador, desculpe e cole. Aqui estou recebendo esse suporte de matriz vazio. Mas então, se eu olhar no logout, veja que ele chamou a função e não havia nada para compartilhar. Tudo bem, então isso significa usar o Postman ou qualquer outra ferramenta de API, eu posso simular o mesmo tipo de causa que estou acostumado. Então, aqui é onde teríamos criado um item de carrinho de compras em vez de postar no host local alguém para substituir tudo isso nosso novo URL para nossos Sites do Azure, enviar a solicitação. E lá eu tenho isso. É uma resposta de 200 OK. Isso significa que se eu atualizar essa solicitação para conhecer todos o MC no objeto no banco de dados. É isso mesmo para publicar ou funcionar até o Microsoft Azure. 35. Implemente e teste, a aplicação do Blazor UI: Tudo bem pessoal. Então, nesta lição, vamos atualizar nosso cliente. Então, o que eu fiz foi saltar para o Visual Studio. Eu tenho o arquivo CS do programa e vou alterar esse caminho do caminho das funções do host local para nosso caminho de funções implantadas. No painel. Vou pegar esse URL, pois esse é o nosso novo URL base. E fui substituir essa linha de código. Então, vou apenas duplicar o comentário original e colar esse novo endereço com essa peça, então vamos testá-lo. Então, vou clicar com o botão direito do mouse neste projeto e ir para a depuração e começar com a depuração antiga. Quando navegamos até nosso tom de dados de busca, você pode ver aqui que estou recebendo um erro. Então, se eu for inspecionar e procurar no console para ver o fio, você verá que ele não conseguiu terminar. Isso é tudo o que realmente está dizendo. E se você procurar acima disso, verá que ele diz que o acesso para buscar esse endereço dessa origem foi bloqueado para uma política de curso. Então eu mencionei as políticas do curso anteriormente, é claro que é o protocolo de segurança de recursos de origem cruzada. Em outras palavras, duas coisas precisam estar na mesma rede ou em um domínio ou uma infraestrutura de estrutura para que o acesso seja concedido. O que eu preciso fazer é voltar para as funções para cima, ir até a política do curso. Lá vamos nós. Em seguida, adicione o URL. Depois que isso for adicionado ao Salvar, voltarei e tentarei novamente e percebo que não há erro. Não, tenho dados vindos como você está bem. Tudo bem, então agora que verifiquei que isso está funcionando, vamos voltar para o program.cs. E o que eu queria fazer é configurar isso, que se estivermos em produção, usamos o link Produção para entrevistas. O delegado. Tudo bem. Para que eu possa configurá-lo uma vez. Fui ver, me dar um endereço de var B, criar uma variável chamada endereço base e defini-la para ser esse novo URI. Ou melhor, deixe-me defini-la para ser essa string, que é a nossa local. E então eu fui dizer, se o ambiente de host de ponto do construtor, é, bem, esse é o endereço de desenvolvimento. Vou dizer que é produção. Esta é uma maneira agradável e fácil de verificar se você está em produção quando você está usando um blazer WebAssembly up, então vou ver o endereço base é igual a essa string, que é o nosso endereço publicado. Então eu posso ter uma linha onde vejo problemas de serviços desfocados atrás de mim. endereço é um novo URI fora do valor do endereço base. Com isso feito, será dinâmico. Pode haver maneiras mais elegantes de fazer isso, mas, e tudo isso funcionará. Vamos publicar nosso up. Só vou clicar com o botão direito do mouse. Vá para baixo para publicar, publicar. Lá vamos nós. Então vou criar um novo perfil. Então, o perfil que existe já é para o movimento completo, mas desta vez estou criando um novo perfil. Escolherei um 0 e vou publicá-lo em outro serviço de aplicativo. E ele perguntará quais instâncias de serviço UPS aqui. Vamos ter alguns já. Eu não vou usar nenhum desses provavelmente pode. Tudo bem. Só vou fazer um novo. Então, vou criar um novo. Esse seria o plano do App Service. O plano do App Service é praticamente o b's. Em seguida, você implanta nesse BCE, este serviço de aplicativo em si. Vou criar um novo plano de hospedagem. Vou chamá-la de lista de carrinho de compras e colocá-la no mesmo grupo de recursos da nossa função. A importância de atribuir coisas à mesma função, ao mesmo grupo de recursos, seria que, se você não quisesse mais o ativo e os recursos para isso, você pode simplesmente excluir o grupo de recursos e tudo nele. E essa é uma maneira agradável e fácil de limpar. Eu só vou colocá-los lá também. E vou colocar isso em um plano gratuito. Clicando em Novo. Escolho minha localização e, em seguida, posso ir para o plano gratuito. Mas, claro, com base no seu contexto, você não quer escolher o plano que melhor se adapte às suas necessidades. Vou usar gratuitamente para esta demonstração. Vamos clicar em Criar. Quando isso for feito, posso ir em frente e clicar em Próximo. E publicarei isso com a configuração do CMC ICD conforme a função para cima. Apenas termine. Tudo bem, e então as páginas de verão me informam qual URL dependente do meu aplicativo será. Nesse ponto, posso ir para obter alterações e dizer implantação de configuração para blazer, Comentários Todos e sincronizar. E, se você quiser novamente, pule para o GitHub e assista a essa implantação. Está feito. Então, vamos pular para os lados publicados. Lembre-se, podemos apenas obter esse URL do perfil publicado ou ir para o painel TO e obtê-lo do recém-implantado. Eu apenas role para buscar dados apenas para garantir que eles possam se comunicar. Ele não pode. Você pode adivinhar e me dizer por quê? Bem, se você adivinhou que as políticas do curso não estão configuradas, então você adivinhou corretamente, certo? Aqui podemos vê-lo. Ainda é um curso compatível. Por que está reclamando de ambos os núcleos? Porque esse é um novo nome de domínio separado do que tínhamos usado inicialmente, certo? Tenho que voltar para a função para cima, pular para a configuração da política do curso e esse novo URL. Deixe-me apenas ter certeza de que estou usando o formato. Salve e aproveite os frutos do nosso trabalho que está publicando nossos clientes configurados, que está se comunicando com nossa função. Há outras coisas que podemos fazer com essas outras configurações que podemos fazer ao longo do caminho para atender a isso mais sem problemas. Vou discuti-los mais tarde, mas, por enquanto, publicamos com sucesso a API e o nosso cliente. 36. Configurando a segurança: Tudo bem, então agora vamos discutir segurança. Vamos ver que passamos o mouse para cima. Sim. Queremos proteger a função e não queremos permitir que cada n, qualquer pessoa possa acessar dados ou apenas a escola em qualquer lugar que quiser. Então, como você pode ver até agora, os URLs estão bastante abertos para a função, qualquer pessoa que tenha um controle da URL pode descobrir o padrão ou, se eles o viram pelo menos uma vez, eles só precisam colocar barra API E , em seguida, esse endpoint para poder acessá-lo. Não. Existem diferentes maneiras proteger uma API no nível muito básico, você pode colocar como uma chave desativada ou solicitar que uma chave off-key seja apresentada no cabeçalho. O padrão atual do setor está usando JWT ou JSON Web Tokens. Mas a cota negativa e os treinadores que você realmente teria que ir e configurar sua função para cima. Procure esses tokens, são essas chaves em cada solicitação. E você teria que se lembrar de fazer isso para cada função. Isso pode levar a sobrecarga, especialmente quando você tem várias funções e várias operações que você está suportando. Outra maneira seria usar as chaves que teríamos visto, as chaves UPC onde podemos sentar partir do padrão ou do nível de função anônimo versus o nível mestre do administrador. A desvantagem disso é que, depois de definir a chave, essa chave precisa estar presente no URL e essa chave não muda, a menos que você comande as alterações. Ou você terá que manter a necessidade do GnG sempre ou terá que expor essa chave. E a chave estaria presente na URL proveniente da configuração do cliente solicitante. De qualquer forma, para que alguém ainda possa obter essas informações e poder acessar sua API. Isso teria mais sentido se isso fosse como no nível de rede de máquina para máquina. Então, se você criar uma função ups e tiver como outro servidor configurado chamando a função. Isso significa que você não está vendo nenhum tráfego de URL, seu tráfego GTP passando no navegador ou monitora o Dr. MB, cheirar velho com muita facilidade. Então ele tinha as chaves será uma vitória muito rápida. No entanto, como temos o lado do cliente para cima, acho que é melhor impor uma segurança em um nível do lado do cliente ou fazer parecer que está em um nível do lado do cliente. Então, quando um usuário tentar entrar no aplicativo, ele terá que se autenticar aqui para acessar a função. Portanto, uma maneira fácil de começar a isso é pular para a opção de autenticação em nosso painel para nossa função. Em seguida, vamos adicionar um provedor de identidade. Agora, isso será como uma mini versão do Azure AD. Se você usou o Azure AD, sabe que pode usar provedores diferentes, aqueles que suportam o OAuth2 Standard. Se você não estiver tão familiarizado, pode conferir meus desenvolvedores do Microsoft Azure para dotnet onde passamos por configurar isso com o azure AD, seja para o negócio ou para palavras voltadas para palavras clientes. Mas esta é uma versão dois muito reduzida, que você nem precisa de uma compreensão completa do Azure AD para realizar o que estamos prestes a fazer. Em primeiro lugar, escolhemos o provedor de identidade sabendo que cada um deles pode exigir alguma quantidade de configuração. Claro, para Twitter, Google e Facebook, você terá dois globais lá e registrará seu aplicativo e todo tipo de coisas. Alguém para escolher o caminho dessa resistência. Só vou usar a Microsoft. Então ele só vai me perguntar, ok, o que eu quero para distribuição? Sim, armazenamento ou cones. O suporte que um oponente digita, você provavelmente quer prestar um pouco de atenção aqui para ter certeza de que você vai escolher o que é melhor para sua operação. Posso escolher apenas o locatário atual, o que significa que o locatário sendo a conta que o aplicativo foi implantado em qualquer usuário que tenha acesso a esse documento é fácil nesse locatário até agora no que diz respeito ao seu AD, eles somente aqueles que eu também posso dizer qualquer Azure AD Directory. Então, se forem vários inquilinos, posso escolher isso. Posso ver qualquer conta do Active Directory e pessoal da Microsoft, e posso vê-lo apenas contas pessoais da Microsoft. Vou com este. Mesmo que este funcione provavelmente sobre, mais uma vez, o Azure AD, o gerenciamento de usuários. É por isso que o que você escolhe é muito importante. Mais uma vez, se você quiser mais detalhes sobre isso, você pode contar isso no outro curso. Faremos isso com qualquer Azure AD e contas pessoais da Microsoft. Isso deve permitir que eu faça login com meu pessoal conhecido como sua conta se eu tivesse uma autenticação de serviço nas configurações, como restringimos o acesso? Quando fui ver, você pode apenas ler, exigindo autenticação do autor, garante que todos precisarão se autenticar. Se você permitir solicitações não autenticadas, precisará do seu próprio código. Isso não é problema. Só precisarei de autenticação. Então, quando você estiver aquecendo aqui, basta chamar a API ou a função para cima. Eu preciso de autenticação. Para autenticação em solicitações autenticadas. Podemos escolher aquele com base em como você deseja sua experiência de usuário. E isso redirecionará para a Microsoft e armazenaremos o Tolkien. Então, basta clicar em adicionar. Com tudo isso feito e adicionado ou percebido. Nós pegamos a tela e nulo. Devemos poder desfrutar de alguma quantidade de autenticação. Então, se eu tentar ir para o URL para a função diretamente, só vai me redirecionar para autorizar ou autenticar. Se eu ainda não estivesse conectado, ele me pediria para colocar minhas credenciais e, em seguida, isso me permitiria acessar aqui. Está vendo que estou solicitando permissão para essa API. E eu gostaria de aceitar isso. Depois de aceitar isso, isso me dará consentimento. E então eu posso ir para a função sem janela e dizer que essa atividade é que ela vai parar de funcionar em nosso blazer. Isso é algo novo por vários motivos. Você verá que um corpo é, e o que está acontecendo é que ele está dizendo que ele não pode redirecionar para o URL de login porque sou eu redirecionado do URL da API, do URL do site. Portanto, há muito mais configuração que precisa entrar lá. E isso não vai acontecer nesta lição em particular. Eu realmente só queria mostrar como você configuraria e até mesmo protegeria as funções. Mas, em seguida, preparar o blazer para uma configuração 0 AD está fora do escopo do conteúdo do Azure Functions deste curso. Mas só estou mostrando algumas das ramificações em coisas que você precisa cuidar. Assim, você sempre pode voltar para sua API e, na verdade modificar diferentes aspectos dessa autenticação que você adicionou. Você realmente adicionou como seu AD em uma suíte muito expressa, certo? Então, em vez de ir para o Azure AD e city02 manualmente, apenas adicionando autenticação nisso, você teria realmente dito a ele que deseja que Azure AD proteja a segurança. E você pode voltar, você pode editar a autenticação, você pode simplesmente desativá-la. Se você não quiser ou habilitar, você pode alterar as regras aqui com base no que você precisa. Você também pode ir até o provedor de identidade e clicar e modificar outras coisas. Embora as coisas sejam os diferentes aspectos das sessões do Azure AD que foram aplicadas. Mais uma vez, veja os endpoints aqui. Você pode acessar seu cliente em seu locatário, para cima, desculpe, um cliente e IDs de aplicativo. Você pode acessar o URL do ID do aplicativo. Se você precisar construir isso, você pode. Como eu disse, no entanto, o Azure AD não está no escopo deste curso, então não vou entrar em muitos detalhes do que é possível. Então, é realmente o quão fácil é proteger sua função em praticamente qualquer que você implantar. Um serviço de aplicativo que você implanta pode ser protegido com a mesma facilidade. 37. Revisão de seções - Publicar o aplicativo de função do Azure: Tudo bem pessoal, então nesta seção nós cobrimos algumas coisas. Analisamos como podemos publicar nosso Azure up qual estamos trabalhando no Visual Studio. Também analisamos algumas das mudanças que serão necessárias tanto para o publicado como para qualquer outro cliente que significa que precisa interagir com ele. Nós configuramos uma prova publicada para a função e nosso aplicativo cliente, o que estava realmente lá como um demonstrativo que sou peça, mas não são realmente os pontos focais, então não gastou muito tempo nele. Mas conseguimos implantá-los usando pipelines CICD cortesia do GitHub e ver como você mistura tudo de forma fácil e perfeita. Também analisamos algumas opções de segurança para nossas funções usando o Azure AD e tudo pode simplesmente fluir. No final disso, você poderá colocar suas 0 funções no Azure e prontas para produção. 38. CONCLUSÃO: Pessoal, parabéns por chegar ao final deste curso, onde você aprendeu tudo o que precisa saber sobre funções. Neste curso, abordamos a configuração de uma função 0 usando o portal. Como podemos escrever funções aqui no portal, os diferentes tipos de gatilhos que podem ser usados. Assim, podemos ter uma função acionada por blob versus um temporizador acionado, ou talvez o mais comumente usado, que é um acionador HTTP uma função. Você também analisou o fato ter modelos de implantação diferentes. Você tem o sem servidor versus o plano premium versus o plano de consumo, cada um com seu próprio benefício. Também passamos e construímos nosso próprio conjunto de funções que implantamos por conta própria e aplicativos, como a prisão totalmente API. Aqui conseguimos não ter que escrever muito código e não precisamos nos preocupar com nenhum servidor e configurar o IIS. Tudo o que fizemos foi escrever um monte de funções que interagem com um banco de dados Cosmos DB muito simples podem ser chamadas de qualquer cliente. Uma vez implantado em um 0, analisamos como podemos acessá-los pelas políticas de curso de configuração de fim de semana inteiro da Internet para garantir que eles estejam totalmente acessíveis. Tudo o que precisamos é desse asterisco para dizer que qualquer um pode acessá-lo. Também analisamos como podemos protegê-lo usando o Azure AD. Não obstante o exemplo muito específico qual passamos, também exploramos diferentes opções de funções, como funções duráveis. Analisamos os diferentes tipos de ligações que podem ser usadas. E analisamos todas as diferentes ferramentas que podem se unir para nos ajudar a chegar onde estamos. Então, analisamos os emuladores, analisamos as ferramentas principais, analisamos o Visual Studio Code vs Visual Studio. Seja qual for a sua plataforma, existe uma ferramenta que atende a você com tudo o que foi dito e feito. Obrigado por vir comigo nesta jornada. E mal posso esperar para ver o que você produz.