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.