Transcripciones
1. Introducción: Hola y bienvenidos a mi curso, Microsoft Azure Functies desarrollando soluciones sin servidor. Soy tu instructor de guerra Williams y he sido ingeniero
de software, conferencia y practicante de código
durante la última década. En este curso, nos
vamos a centrar en las funciones de Azure
y cómo funcionan. Nos fijamos en cómo crearlos, probarlos, desplegarlos. Miramos los diferentes tipos de activadores de
funciones y todo el fin de semana MIS ellos interactúan
con servicios externos, también aprovisionados por
Azure y
de lo contrario, pasando por todos estos conceptos, también lo
haremos interactuar con
diferentes herramientas de desarrollo, todas orientadas a
ayudarnos a ser lo más productivos
posible. Herramientas como Visual Studio, visual Studio Code como 0
Funciones, herramientas básicas. Miramos el emulador
de almacenamiento y el emulador cosmos DB. Sepa que probablemente eres un poco borroso en cuanto a qué son las funciones de
Azure. Sus derivaciones telefónicas es
una de las formas más rápidas y fáciles de hacer
que tu código funcione en Azure mientras se mantiene un modelo rentable y
sin servidor. Es decir,
se puede escribir una aplicación sin tener que preocuparse por
la infraestructura o cualquier servidor ni nada. Y puede desplegarlo en la
Nube y tener
algo en funcionamiento en
cuestión de minutos. También es compatible con
muchos idiomas. Así que a pesar de que nos
centraremos en dotnet y C-Sharp, también
puedes usar JavaScript,
TypeScript, Python, Java, y otros lenguajes
justo fuera de la caja. Ahora a lo largo del curso, nos
enfocaremos como sus funciones, pero vamos a interactuar con
otras tecnologías de Azure, como Azure Storage, Azure AD,
Azure Cosmos DB, Application
Insights y app servicios. Déjame volver a decir lo
emocionado que estoy de tenerte en este curso y no puedo esperar para empezar. Nos vemos pronto.
2. Introducción a las funciones en Azure: En esta sección, vamos
a estar desmitificando algunos de los misterios que rodean los conceptos de Función Azure. Uno, estoy asumiendo que
ya tienes un activo como conos de
época y que tienes suficientes créditos para pasar por las actividades
relacionadas con este curso. Algunas de las cosas
van a costar dinero, pero aún no estamos en la parte
costando dinero. Solo quiero que nos
pongamos cómodos con el portal de Azure
funciona como llegamos a interactuar con funciones y
algunos de los conceptos y palabras clave que rodean sus
operaciones. Así que quédese por ahí. Vamos a llegar a
entender exactamente qué son las funciones
un 0 y mirar
las diversas formas en que se
pueden usar.
3. Crea una aplicación de función: Muy bien, así que vamos a entrar a la derecha en la comprensión de un 0 funciones. Ahora en este punto estoy
haciendo algunas suposiciones. Uno, que ya tengas un
conos activos de Microsoft Azure y sí tienes configuración de
tu tarjeta de crédito o tienes los créditos gratuitos
disponibles como algunas de las actividades
para la duración de este curso
costará algo de dinero. Pero en realidad no estamos en la parte de hacer dinero todavía
o la parte del gasto de dinero. Sólo estamos mirando
los conceptos fundamentales. Ya he iniciado sesión
en mi cuenta de Azure. Puedes llegar al portal de Azure yendo a portal.azure.com e inicia sesión con esa
cuenta que habías usado para crear tu cuenta. Y luego verás un tablero de mandos. Puede o no
parecer el mío realmente poner algo de tiempo y esfuerzo en
personalizar este. Ya ves aquí tengo
algunos recursos que se despliegan
desde otro curso. Y verás, tendrás la capacidad de
personalizar esto. Siempre puedes ir a Nuevo
Dashboard, tablero en blanco, o simplemente puedes editar
éste y puedes cambiar taus todos los nuestros y
personalizarlos como desees. No, vamos a saltar por encima a las funciones
arriba o al menos el listado de servicios
y crear una función de una función up
Israeli an App Service. Por lo que habrías visto
la palabra clave sin servidor siendo anunciada cuando
veas un 0 funciones. Es sin servidor porque no
hay ningún
servidor físico involucrado. Es un servicio que se está ofreciendo que nos
permite alojar funciones en. Por lo que en realidad puedo simplemente
ir a Todos los Servicios aquí. Entonces puedo filtrar
y decir función. Y luego a partir de aquí
veré que puedo crear
una función arriba. Cuando hago eso, puedo hacer clic en
Crear, Crear Función arriba. Para proceder, voy
a pasar por un mago. Entonces, en primer lugar, ¿cuáles son
tus suscripciones? Así que cuando tienes
diferentes suscripciones, probablemente
estés en prueba. Probablemente estés en pruebas de slash
dev de pago como yo. Probablemente estés
en uno especial para tu empresa o
para tu organización, sea cual sea que elijas la que
vas a usar. Sólo tengo uno. Te gustaría crear
un nuevo grupo de recursos. Para que puedas seguir adelante
y golpear Crear Nuevo. Y voy a ver función, RG, función dash, dash RG. Haga clic. Ok. ¿Qué queremos que sea
nombrada esta función? Voy a nombrarme
con el curso que es Azure, Funciones, fundamentos de
guión, saber cuándo estás haciendo
eso, como puedes ver, en realidad
va a ser
una dirección pública orientada. Entonces, qué puedes hacer
para que sea más personalizado en caso de
que eso no esté disponible. También puedes poner dash
y tus iniciales o tu nombre o una parte de tu nombre solo para que sea un
poco más único. Eso va a ser en
URL pública, de acceso
público que
nos permitiría navegar a las
funciones que se
desplegarán nuestro acceso
las funciones que se despliegan en el espacio central
desde cualquier lugar en el mundo. Estoy seguro que todos sabemos
cómo funcionan las URLs escritas. Muy bien, entonces a continuación
queremos decir publicado, queremos código o un contenedor
Docker por ahora, voy a ir con código. ¿ Qué pila de tiempo de ejecución queremos? Una función 0 soporta muchos idiomas
diferentes. Vemos que cuenta con soporte para el framework
o plataforma dotnet. Podemos usar NodeJS, Python, Java, polar, Show,
custom, y hay otros
lenguajes que se están agregando. Muy irregularidad
para este curso sobre vamos a estar
enfocándonos en dotnet. Por lo que elegiremos eso entonces
elegimos la versión. Dotnet 60 es la última
y la más grande. Por lo que procederemos con eso. En el momento que estábamos
haciendo este curso, pueden tener una versión posterior. Puedes sentirte libre
de usar eso también. Si no estás hasta dotnet seis, también
puedes elegir dotnet
Core 3.1 podría ser necesario si no tienes Visual Studio 2022 o superior en el momento en que
estás haciendo este curso, eso está bien, pero yo seré
mostrando con hecho a las seis. Y entonces su razón sería el centro de datos más cercano a
su ubicación geográfica. Si estás en Australia, quieres elegir el Australia que esté más cerca de ti. Estoy en el Caribe. El mejor para mí
suele ser del Este de Estados Unidos. Y elegiré un taburete que sea nuevo datacenter al este de Estados Unidos. Después de hacer todo eso, sólo
podemos hacer click
a través y ver el otro potencial sentado para poder configurar
una cuenta de almacenamiento porque tenemos que
crear un enlace a una cuenta de almacenamiento para blobs y colas
y mesas de almacenamiento, cualquier forma de interrupción
con esas. Podemos elegir un sistema
operativo. Dejaré esto como Windows. También podemos elegir un tipo de plan, no el tipo de plan va a afectar
directamente el costeo y mantener los recursos
se cargan para apoyar
sus funciones arriba. Por lo que al hacer clic, aprender más, puedes crecer para que
la documentación, por lo que el plan de consumo se
escalará automáticamente y solo
pagarás
los recursos de cómputo cuando tus
funciones se estén ejecutando. El inconveniente de esto es que realmente
apagarán o D destinarán los recursos
después de un periodo de inactividad. Y luego cuando los
necesitas de nuevo, ahí los tiraron hacia arriba,
pero esto puede llevar tiempo, así que es como que en realidad no siempre está a bordo entonces se desgarrará para que
te ahorre dinero en el largo
correr, sin embargo, si es algo
que siempre necesitas, entonces este podría
no ser necesariamente el mejor plan para ti ¿verdad? Ahora. El plan premium
automáticamente habilidades basadas en la demanda y
no hay periodos inactivos, por lo que siempre está escalando y siempre está encendido cuando lo necesitas, está ahí en todo momento. Otra cosa a tener en cuenta también
es el tiempo de ejecución. Entonces el plan de consumo
básicamente tiene un límite de, si no me equivoco, 20 minutos. Entonces eso significa que nuestra función dejará de correr
los 20 minutos. En tanto que el plan premium, no tendrá
ese límite de tiempo. Por lo que correrá más tiempo que el tiempo máximo de ejecución que nos
otorga el plan de
consumo. Como dije,
tienes que saber cuáles son tus contextos y qué
necesitas de él. El plan dedicado realmente le dará ese
plan de App Service tipo de tiempo de ejecución, lo que
significa que tendrá recursos
dedicados para su función AP, su función. Y no tendrás que adivinar
y deletrear para decir: Vale, estoy gastando en exceso
en el gasto. Se escalará automáticamente y es mucho más
predictivo si sabes que vas a
necesitar funciones y vas a estar
haciendo esto a largo plazo. Probablemente quieras
usar la planta dedicada porque entonces en realidad puedes estimar
adecuadamente
cuáles
serán tus costos a un cierto
tipo de carga. Puedes elegir el
que necesites acuerdo a tu contexto
para este curso más, vamos a seguir adelante con
el plan de consumo de sal, que se lo dice como plan
de servicio. A continuación pasamos al lado
de las redes. No hay mucho ni nada que configurar
aquí porque
prácticamente ya está configurado para ser público frente
a Internet. Por lo que realmente no necesitamos hacer ningún
ajuste de red virtual aquí, podemos pasar al
monitoreo donde podemos activar Application Insights. Y eso nos permite
disparar registros y monitorear las funciones mientras
están ejecutando el tiempo de ejecución y los errores que están recibiendo
todos esos. Por lo que te recomendaría
que habilites eso. cuesta un
poco de dinero, pero creo que
vale la pena a la larga. Y luego tags, esas son buenas para crear un nomenclatura recursos, especialmente en un entorno
donde es posible que tenga muchos recursos son
bastante similares la naturaleza que sirve a
diferentes propósitos. Entonces las etiquetas pueden ayudar a aislarlas y ayudarte con la construcción y asignación
de
recursos a largo plazo. Pero podemos omitir eso por null. Y luego vamos a
Revisar y Crear. Una vez verificamos que
todo es lo que
queremos, solo podemos golpear Create. Cuando se complete ese proceso, siempre se
puede
hacer clic en Ir al recurso. Una vez en adelante, Ir al recurso. Si alguna vez has desplegado
un Servicio de App, va a tener un verso de tablero muy
similar, tipo de sensación similar. Si no, entonces eso está bien. Este es el tablero
que estás obteniendo. Por lo que verás aquí
que obtiene algunos gráficos, algunas métricas sobre notificaciones en
tiempo de ejecución. Puedes hacer control de acceso para ver qué usuario en
tu organización o en tu Azure AD puede hacer lo que
en este recurso en particular, podemos configurar alertas de seguridad para cualquier intrusión o
posibles intrusiones. Podemos configurar eventos. Y luego por supuesto, la razón por la que estamos aquí, podemos empezar a crear funciones. Alguien para dejarlo ahí. No, acabamos de
ver cómo se crea una función arriba y los diferentes
tipos de modelos de alojamiento, los diferentes modelos de precios
que están disponibles para usted. Y por supuesto, el contexto determina las decisiones
que tomas. Vamos a
pasar por algunos conceptos en las próximas lecciones.
4. Triggers y enlaces: Muy bien chicos, En esta
lección vamos a estar mirando disparadores
y enlaces, y aún no estamos haciendo
ninguna codificación. Todavía estamos explorando en el tablero para ver qué franjas, qué significa el lingo y cómo podemos conectar
los puntos entre lo que son
nuestras necesidades y ver las Funciones Azure nos lo
proporcionará. Ya creamos nuestra
función arriba y una vez más, eso no va al
servicio UPS que ha sido albergar todas las funciones que
necesitan ser ejecutadas. Para que podamos llegar allí
yendo a esta URL. Y si hago clic en él, verás que dice, mis funciones están en
marcha y en funcionamiento. Por supuesto que
no hay fonetistas para yo navegue,
así que eso está bien. Si bajo a esa sección
que dice funciones y hago clic en funciones, entonces me permite ver todas las funciones
que tendría, el gatillo y el estado. Entonces si hago clic en Crear, trae este
sangrado que luego me
permite definir el entorno de
desarrollo. Ves aquí que
tenemos algunas opciones que estaremos viendo más adelante. Y luego nos piden
que seleccionemos una plantilla. Esto es bastante bueno y
puedes ver que tienes bastantes opciones en
esa sección de plantilla. El disparador
representa la acción que hace que la función se ejecute, porque una función
solo se va a sentar ahí. Todos, en este punto, estoy asumiendo a nuestros programadores, por lo que todos sabemos que
las funciones necesitan estar en un programa y necesitan ser
convocadas para ser ejecutadas. No, Lo que pasa con
las funciones de Azure es que
en realidad son más como funciones
independientes, pero tienen disparadores
y un disparador es lo que pedirá
para su ejecución. Entonces si nos fijamos en las necesidades
que la columna plantillas, verás los diferentes tipos
desencadenados que están disponibles
bajo estas plantillas. Por lo que tienes el activador HTTP, es
decir, una función que se
ejecutará cada vez reciba una solicitud HTTP
y responderá. Entonces si sabes acerca de las APIs, eso es todo una API. Haces un HTTP llamado tal vez incluya datos,
tal vez no lo hagas. Pero con base en esa llamada, la API responderá de acuerdo
a cómo entendió la llamada relativa a los datos que puede o no se le hayan dado. Entonces esa es una función
activada HTTP. Como tu función,
tienes disparadores de temporizador, que
significa que puedes
ponerlo en un temporizador, ejecutar cada cinco minutos, ejecutar una vez al día, etcétera Entonces, ya sabes, tienes ese Programador de
Windows o tienes
esos trabajos de Cron en Linux, puedes usar disparadores de temporizador
en el espacio Cloud para hacer ese tipo de
ejecuciones en segundo plano. No voy a
pasar y explicar lo que es cada tipo, pero siempre se puede
simplemente pasar y leer las
descripciones, ¿verdad? Así que mientras unas
demandas de Zuora crean cosas, en realidad
te está educando para que puedas tomar la decisión judicial que tienes a
medida que desencadena tus tiendas de cola, tienes disparadores de Bus de Servicio, tema o cue disparadores basados en cuál estás
usando para el Bus de Servicio, tienes
disparadores Cosmos DB, ¿verdad? Y luego en el mismo aliento
tienes lo que llamas fijaciones. Encuadernación es básicamente
que te estás suscribiendo a una función relacionada con no funciones
o características sentarse y
leer o escribir datos. Por lo que tiene enlaces de entrada
y salida. Entonces cuando decimos eso, solo te
estoy dando
este escenario para que
puedas apreciar lo que estoy viendo. Si tienes un
disparador de temporizador que se supone que debe sacar
una imagen alt del Blob Storage o sacar
un mensaje de la cola y poner algo
en Blob Storage. Entonces digamos que tenías una forma más fácil mostrada que
era el servicio más disparado. Saber que este teléfono fue
mostrado va a tener un enlace a la cola y
va a tener un
enlace a la blob. Esto va a permitir que puedas
suscribirte a estos dos servicios de terceros que quiero establecer de
terceros quiero decir, no
están exactamente
relacionados con la función. Son servicios independientes
de Azure. Entonces el enlace de entrada sería, estoy leyendo de la cola. El enlace de salida sería, estoy escribiendo al Blob Storage. No quiero tener que
escribir si me llevó 50 líneas de código en programa
irregular a blob de consumo y conectarme a ella y saber
exactamente a dónde voy. Probablemente tomará de
tres a cinco líneas debido a esa característica de
enlaces. Esa es una característica muy poderosa, te
permite cortar mucho el código
de calderas y simplemente llegar directamente al grano e implementar la lógica empresarial. Por lo que es muy útil implementar funciones o
funcionalidad más bien que necesitas como juicios a
presión, sabes exactamente lo que quieres. No tienes tiempo para
escribir demasiado código. Eso es lo que estas
plantillas de disparador traen a la mesa. Y la capacidad de simplemente enlazar la función a un recurso
externo hace que sea muy fácil desplegar una aplicación que toque muchas partes
diferentes de un 0. Eso es realmente todo lo
que quería discutir aquí. Todavía no estamos creando
una función todavía. Todavía nos estamos calentando hasta
el tablero y el lingo. Cuando volvamos,
estaremos hablando las herramientas de desarrollo que están disponibles para nosotros aunque no
vamos a ir demasiado en profundidad. Lo que acabamos de discutir, cuáles son las posibilidades.
5. herramientas de desarrollo: Muy bien, así que la
última vez que estamos aquí, estamos viendo los diferentes
tipos de desencadenadores que pueden tener Azure Functions. No, demos el paso
más allá y en realidad miremos las herramientas
que nos rodearían, creando
en realidad
una interacción. Habíamos dicho funciones,
no upsilon una, sería la opción
más obvia que es usar el
portal porque los puertos, esa es una herramienta muy,
muy poderosa. Se sienta en el navegador. Se necesita unos recursos muy mínimos
en su máquina real. Por lo que esta probablemente sería la característica o la
opción más bien, no muchas personas
podrían terminar eligiendo cuando vas
a Crear función, la primera que hay
está desarrollando portal. Puedes elegir tu
plantilla y luego presionar Crear después de
darle un nombre, digamos probar el portal. La función Http hace algo así que sabemos exactamente qué es nivel de
autorización
que tiene que ver con los niveles de autorización que
vamos a estar dando a las personas para
interactuar con esta función. Así que sólo voy a
decir una función, simplemente interactúas como
un nivel funcional versus anónimo versus admin. Entonces lo que sucede es que
cuando usas la función, necesitas una clave de noción completa. Cuando usas admin, necesitas una clave maestra y en realidad
puedes administrar esas claves debajo la sección de administración de claves aquí. Entonces si acabo de decir anónimo, entonces no se necesitan llaves. Así que sólo voy a
hacer esto por esto, acabamos de golpear Create y eso nos
da tablero más pequeño. Podemos ir y
mirar el código y ejecutar y probar
aquí mismo en el portal. Y como dije, no me estoy metiendo demasiado en
el código, ¿verdad? No, no voy a
explicar qué es esto. Solo te estoy mostrando que
este es un editor de texto aquí
mismo en el navegador
para que puedas guardarlo, puedes probarlo y
ejecutarlo aquí mismo. Puedes hacer todo lo
que necesites hacer. Podemos obtener la URL de la función. Todo eso puede pasar
justo aquí en el portal. Entonces esa es la opción a para que tu
herramienta escriba una función. Ninguna opción B sería Visual Studio y
Visual Studio aquí. El que estoy usando es instalador de
Visual Studio 2022 Community
Edition. Te gustaría asegurarte de
que tienes seleccionada esa carga de trabajo de desarrollo de
Azure. Entonces, entre todas las demás
cargas de trabajo que puedas necesitar, asegúrate de haber incluido el flujo de trabajo de desarrollo de Azure. Y luego una vez que
tengas esa carga de trabajo, cuando estés creando
nuestros proyectos, serás una carga
o se te dará la opción de crear
una a 0 funciones proyectos. Esto sería,
esto sería
útil si tienes todo un proyecto de
desarrollo, estás trabajando en equipo. Quieres control fuente, gestión y todas estas cosas. Y tienes esa
solución con una serie de funciones que podrías desplegar. Herramienta la función hacia arriba. Y si usas la irregularidad de Visual
Studio, entonces no necesito
comercializarte como una muy buena herramienta de
desarrollo. Otra opción que tendrías sería Visual Studio Code. Y siempre puedes
ir a las extensiones e instalarlas como tus herramientas. Entonces como 0 herramientas
vendrán con un montón de extensiones para todo tipo
de desarrollo de Azure, incluyendo un 0 funciones. Si no quieres
todo el conjunto de herramientas, por supuesto, puedes
buscar específicamente las Funciones de Azure, pero ¿por qué no solo
instalar todas las herramientas? Ahora esta opción es
perfecta para ti si estás usando Linux o Mac, porque el código de Visual Studio
es de código abierto y
multiplataforma. Por lo que no se limita a la PC con Windows como podría ser
Visual Studio. Sería una buena alternativa una
vez más tener el código en su máquina y control
fuente y así sucesivamente, fuera de él estar
en el portal. Ahora la siguiente opción,
que es cierto, nunca
he
intentado usar, pero está ahí. Entonces lo haremos,
discutiremos que
sería el cualquier editor más herramientas
básicas, ¿verdad? Para que podamos seguir adelante y usar Node.JS e instalar
de estas bibliotecas. Y luego nos dicen cómo
podemos empezar a decir que podemos
probarlo o podemos crear un proyecto hasta cómo puedes publicarlo. Entonces si no hay GS es tu preferencia, entonces puedes seguir adelante y seguir estas instrucciones
y pasar por eso. Pero como dije, no estamos haciendo ninguna codificación en esta lección en
particular, realidad
voy a
eliminar esta función porque no la necesito
. Más allá de saber. Cuando volvamos seguiremos discutiendo algunos conceptos más y
luego cerraremos
esta sección y nos metemos bien en algo de la diversión por la que
vinimos aquí.
6. Revisión de secciones: introducción de funciones en Azure: Muy bien, así que
veamos esos como notas sexuales. Revisemos lo que logramos. Uno, miramos
lo que se necesita para crear una función a 0 arriba. Y discutimos el hecho de que la función es una sola
unidad de despliegue. Es un App Service
que va
a estar alojando una
serie de funciones. Por lo que se puede crear una función y puede tener diferentes plantillas,
son disparadores diferentes. Entonces la plantilla es solo
el frío predefinido, pero siempre se puede
desplegar cualquier tipo de plantilla y leer
el código en consecuencia. Pero tenemos
disparadores diferentes que activarán las funciones. Ya miramos una función
activada HTTP. Contamos con temporizador tendremos q, tenemos Bus de Servicio activado. Tenemos una serie de ellas que
podemos utilizar, duraderas y MQ. Posteriormente veremos lo realmente significan las Funciones Durables. Pero el punto es
que tenemos todas estas opciones disponibles para nosotros. También analizamos algunas
de las herramientas de desarrollo que tenemos a nuestro alcance. Estaremos usando Visual Studio o estaré usando
Visual Studio. Pero en su mayoría, si no, todo lo que hago se puede
lograr en el portal
así como usar las otras herramientas
si es necesario utilizarlas. Cuando volvamos
vamos a profundizar en interactuar con funciones usando el
portal un poco más y nos vamos a ensuciar
las manos con algún código,
aferrarnos a una prueba o funcional y vendido para mirar
la ejecución y realidad ver lo que se necesita para crear e implementar
algunas Funciones de Azure.
7. Funciones de Azure en el el portal web de Azure: Muy bien chicos, bienvenidos de nuevo. En esta lección,
vamos
a entrar en el fondo y estaremos creando
algunas funciones de Azure aquí
mismo en el portal web. Entonces vamos a estar
viendo ejemplos de proyecciones de películas desencadenadas por
HTTP. Estaríamos mirando las funciones
activadas por temporizador. Y vamos a
mirar uno con Blob Storage, pesar de que puedes usar esos mismos pasos y desplegar
cualquier tipo de función que
necesites de acuerdo
al reloj que necesites ya el gatillo estará enfocando
en esos tres ejemplos. Y también estaremos
mirando cómo puedes probar. Bueno, podemos
mirar los registros que las cosas que puedes hacer
con las funciones solo para asegurarnos de que lo estás haciendo correctamente y cubriendo
todas las bases. Así que quédese por ahí. Tenemos mucha diversión sobrecarga.
8. Crea una función activada de la petición HTTP: Muy bien, así que
empecemos creando una función
activada de peticiones HTTP. Y eso ya lo hicimos. Por lo que sólo vamos
a retocar nuestros pasos. Estamos en la función arriba y luego bajamos
dos funciones, luego hacemos clic en Crear arriba arriba. Y entonces eso nos da la lista. Y de esa lista
queremos el disparador HTTP. Haz clic en eso,
le das un nombre de función. Solo voy a nombrarlo HTTP, solicitar hyphen funk,
o una función. Déjame escribirlo. Y luego aquí para
la autorización de Endo desnatada en el último tiempo, pero voy a ir mucho
más despacio esta vez y explicar con más detalle cuando nosotros, cuando elegimos el
nivel de autorización para función, lo que va a pasar
es que cualquier, cualquier dispositivo, cualquier color a esta
función necesita proporcionar una clave que sea específica
para esta función. Entonces al crear una función
y obtenemos una clave, y esta clave debe estar presente
en cada solicitud a esta función para
que realmente se active. Cuando decimos anónimo, está abierto, cualquiera
puede acceder a ella. No hay necesidad de nuestra clave ni ninguna de las restricciones
de seguridad adicionales. Entonces cuando usamos admin, significa que el administrador que
era una clave maestra que
permitiría al administrador ejecutar
cualquier función,
cualquier función en absoluto , pero solo a
nivel admin no puede ejecutarse. Voy a dejar esto
en el nivel de función para null y
voy a golpear Crear. Ahora que nuestra función
ha sido creada, podemos bajar al
código y probar sangrado. Una vez que estemos en esta cuchilla nos
va a mostrar algún código de función de calderas. Muchas cosas que
se definen para nosotros. Notarás que la
extensión de archivo aquí es dot CSS. Entonces, en base a la plantilla
que estás usando, es
decir, estás usando JavaScript
o usando C-sharp, etc. Entonces esa extensión
de archivo por supuesto será diferente. Y si dejas caer eso hacia abajo, verás que
también tienes un
archivo de lectura me dot MD o para Mark no te
sientas a lo que
tendrías en GitHub o un 0 DevOps para fines de
documentación. Y también tienes
función dot JSON. Y esta función dot JSON archivo básicamente solo tiene
configuraciones para diferentes vinculaciones y diferentes metadatos
sobre la función. Entonces aquí puedes ver que es
específico que estamos usando el disparador HTTP y está aceptando los métodos
de GET y post. Entonces si queríamos hacer poner
y tal vez parche y eliminar, etc, solo amplías toda
esa sección. Hay cuatro métodos. Hay momentos en los que puede
necesitar modificar este archivo, pero por ahora no necesariamente
necesitamos modificarlo. Así que sólo dejaremos eso paz y volvamos
a nuestro Randolph CS6. Y lo que vamos a hacer
aquí es mirar a través del código. Entonces es un código realmente simple
donde usar algunas bibliotecas. Y aquí estamos incluyendo biblioteca
de terceros que probablemente
tendrías fuera para conseguir con NuGet si estás haciendo una aplicación
dotnet irregular. Pero estamos usando algunas
bibliotecas aquí. Y luego tenemos un método que devuelve un resultado de acción ocular. Así que si alguna vez has
trabajado con APIs, estarías familiarizado son
incluso nuestro MVC regular up. Estarías familiarizado con
el resultado de la acción ocular. Tenga en cuenta que
la función activada HTTP suele ser muy útil para fingir
o no fingir, sino para actuar como una API. Y también es muy útil
para responder a webhooks. Entonces cualquier cosa que sea el tráfico HTTP en la función activada HTTP , en
términos generales, está equipado para manejar
ese tipo de operación. Y por lo que
en realidad podría construir una API completa o lógica de
aplicación completa usando un conjunto de
solicitudes HTTP activadas funciones, cada una respondiendo a la solicitud
específica en consecuencia. Aquí, dentro de nuestro método, vemos que llegamos al
parámetro es solicitud GTP. Me llamaré a Rick,
y también estamos poniendo en una instancia de nuestro maderero. Entonces estamos registrando información de
primera línea donde están viendo que esto
fue un proceso. Se llamó estamos
tramitando nuestra solicitud. Entonces estamos obteniendo
de la solicitud una cadena de consulta con
el nombre nombre. Entonces estamos obteniendo el valor
de la cadena de consulta con el nombre nombre. Y lo estamos almacenando dentro
de esta variable llamada name. Y luego estamos viendo
el proceso del órgano de solicitud que solicita órgano, por favor. Estoy buscando ese cuerpo de solicitud si es JSON o lo transmita a JSON, mire dentro de él y vea
si puede encontrar nombre. Aquí está diciendo que
o bien vas a encontrar la cadena de consulta
con el nombre del nombre en la cadena de consulta
en la propia URL. O puedes buscar en el cuerpo de solicitud en
caso de que pueda haber sido una solicitud de post y
buscar algunos datos que
tengan el nombre nombre, por favor dame ese cuerpo. Eso es todo lo
que sólo está haciendo. Podría haber estado en
cualquiera de los dos son porque por lo general mandas ya sea
hacia arriba o yo consigo lo que hay aquí. El código solo te muestra
que aquí es donde obtienes un valor de cadena de consulta y aquí es donde obtiene algo
de un encuestador solicita. Eso es todo lo que
realmente está pasando. Entonces va a formular
un mensaje de respuesta. Y es bueno decir si esta variable de nombre
no es nula o vacía, o lo siento, si es más pequeña, vacía, entonces dales
un error C y que
hay que pausarla ya sea en la cadena de núcleo o
en el órgano de solicitud. Y si no es dólar vacío, entonces vamos a
imprimir Hola nombre. Esto se ejecutó con éxito. Entonces regresamos, vale, que es un 200 resultados
si estás familiarizado con códigos de respuesta
HTTP, ¿de acuerdo? La función OK devuelve un código de respuesta 200
así como ese mensaje. Muy bien, eso fue
un recorrido por el código. No va a modificarlo. Esto lo va a probar. Así que probemos y corremos. Vemos aquí en primer lugar va
a decir OK y probando, ¿
estás haciendo un post
o una llamada al método get? En segundo lugar, qué tipo
de clave, correcto, así puedo usar el monstruo de la
llave maestra porque en el portal somos los administradores y una llave maestra podemos hacer
todo de todos modos. Bueno, solo podrías
probarlo con una clave de función, ya que eso es lo que lo
desplegamos para usar. Puedes agregar un parámetro aquí o puedes cambiar el cuerpo aquí. Entonces voy a mi nombre
dentro del cuerpo. Esa es una solicitud de publicación. Entonces cuando haga clic en Ejecutar, entonces voy a obtener la respuesta ALU de
salida alpha 200, hola, el nombre que entré. Esto se desencadenó con éxito. Entonces esa es una buena prueba. Ahora vamos a saltar de nuevo a la entrada y cambiar los parámetros. Entonces estoy haciendo una solicitud GET
esta vez y estoy poniendo esa consulta y estoy llamando al nombre de
la variable. Entonces los parámetros en el nombre y el valor siguen siendo mi nombre. Y sólo voy a decir dash get. Y no sé si
estás experimentando esto, pero mientras utilizas el portal, tengo que presionar un
botón y luego
esperar a que aparezca el personaje. Entonces esa es una de las razones
que realmente no les gusta trabajar en el portal
directamente así, al
menos para este
tipo de operación. Es un poco lento para mí, pero puedes hacerme saber si
estás experimentando eso también. Pero cuando hago clic en Ejecutar, entonces obtenemos los mismos resultados. Esta vez lo estaba obteniendo de la cadena de consulta en lugar del cuerpo de solicitud como
lo hizo para el post. Ahora si pierdo el nombre de este
parámetro de consulta y luego ejecuto, entonces llegamos a nuestro error. Esta espuma activada HTTP
Sean ejecutó con éxito. Pero por favor pase los datos
como se espera. Eso es más o menos espera. La
función activada HTTP funciona. Solicito entra con datos. Escribimos código para analizar
a través de los datos, manipularlo a lo que
necesitemos hacer con él. Y entonces tal vez enviamos de vuelta, escribimos un registro para
que en realidad podamos
tramitar la ruta de ejecución. Pero también solo les dejamos
saber el tipo de respuesta. Así que en realidad podría responder NC, si el parámetro de consulta no
era nulo, entonces devolver un nuevo tal vez malos resultados de objeto de
solicitud, ¿
verdad? Algo así. Eso es más o menos trabajos
de retención. No, en realidad puedo obtener la URL de la función haciendo clic en
este botón arriba. Entonces dirá,
dame el defecto. Bueno, ¿qué enlace quieres? Por lo que en realidad va a
incluir la clave en esa URL. ¿ Quiero la llave maestra o
quiero una tecla de función? Por lo que fui a
dejarlo en defecto. Y si echamos un
vistazo a esa URL, y sólo voy a
usar Notepad Plus Plus. Aquí vemos que tenemos
la URL a la función arriba. Y luego dice slash API, y luego el nombre
de la función. Y luego el código es igual a, y luego esta cadena callada, que es esa clave, Esa es la tecla de función. Entonces si necesitaba ejecutar
esto desde cualquier tipo de aplicación
que estoy escribiendo, entonces tengo que ejecutarlo de nuevo. Por lo que estás mirando
mínimo así. Sin ese código,
nunca llegaría al destino. Simplemente rechazaría por completo
la solicitud. Si pasamos por las
otras páginas que nos
están disponibles
desde esta pantalla, podemos ir a la integración lo que nos
permite editar
ciertas cosas. Por lo que el candidato disparador, podemos editar la función, podemos modificar las entradas y las salidas son
algún mini diagrama de flujo, sólo para decir que aquí
es donde está empezando, este es el proceso y
esto es lo que se espera. Podemos bajar al monitor, que básicamente nos muestra todas
las ejecuciones y dueño de casa
para ellos tuvieron éxito, ¿cuántos de ellos fallaron? Entonces podemos ir a
las teclas de función, que nos mostrarán nuestras claves. Siempre podemos hacer click para ver el valor porque estamos
usando la tecla de función, esa es nuestra clave de función si alguna vez
necesitas recuperarla, si necesitas renovarlo,
restablecerlo, etc., lo que sea que
necesites hacer, eso
es más o menos para configurar una función activada HTTP.
9. Crea una función activada para temporizar: El siguiente tipo de función que
vamos a estar
mirando es una función
disparada por temporizador. Por lo que esto arrojó a funciones. Adelante y haz clic en Crear, y esta vez queremos que se active el
temporizador. Por lo que hicimos clic Timer Trigger
y podemos darle un nombre, alguien para sentarse función
disparada temporizador. Entonces podemos configurar el horario. El horario se basa en
una expresión crónica. Entonces si estás familiarizado
con Linux, um, entonces las expresiones crónicas
son solo forma en que
representas el intervalo en el que
quieres que algo
se repita. Entonces puedes ver aquí
que está en forma
de segundo, luego minuto,
entonces todo lo que somos así cada
asterisco básicamente representa
esa unidad de tiempo. Más o menos aquí. Está viendo 0 segundos,
pero cinco minutos. Entonces si cambio esto a uno, entonces eso sería como siempre minutos en lugar de
más de cinco minutos. Y entonces ese asterisco
representaría el menor que el d y luego el día de la semana o el mes
y día de la semana. Entonces eso es todo lo que
realmente programarías que puede tomar un poco de
acostumbrarte si no estás
familiarizado con cómo es, pero es un constructos muy
poderosos para entender y apreciar. Así que vamos a seguir adelante y crear esta función disparada temporizador. Una vez creado eso, podemos
saltar hacia abajo al código y probar. Y usted ve aquí que es un poco relativamente simple de código. Tenemos una función llamada Ron, y tiene un parámetro
llamado mi temporizador, cual tiene todas las
cosas que puede necesitar rodeando un objeto
que le permita enganchar. Soy detalles sobre
el temporizador que se está
utilizando y tiene la biblioteca de
registro también. Estará registrando a la información o
haciendo un
registrador de información otro cada vez que se ejecute mostrando la marca de tiempo. Si miro en los
registros cada minuto, vas a estar
viendo a este poblado, así que lo voy a dejar tan minutos y luego
mostrarte las secuelas. Muy bien, así que
esperé dos minutos. Y ahí se puede ver
la ejecución por minuto uno y la ejecución
por segunda vez. ¿ Está bien? Eso es más o menos lo que el servicio de
temporizador te trae. Estoy seguro de que estás pensando diferentes aplicaciones
que esto podría tener, podría ser en una aplicación
donde necesitas
hacer una limpieza todas las
mañanas o todas las noches, o necesitas procesamiento por lotes para saltar en todos los días
en un momento determinado. Tiene una serie
de aplicaciones para temporizador, funciones
activadas con temporizador. En esta situación
no lo necesito corriendo
en segundo plano. Si no quieres que se
ejecute en segundo plano, siempre
puedes simplemente deshabilitarlo. Y ya
miramos cómo podemos eliminar una función. Así que acabo de desactivar este sobre tal vez en el futuro
cuando lo usamos de nuevo, pero eso
es realmente todo para un todo. Creas
funciones activadas por temporizador y cómo funcionan.
10. Crea una función disparado: Muy bien, a continuación,
veamos lo que se necesita para crear una función
activada por blob. Entonces vamos a crear en la hoja, vamos a buscar blob. Tan pronto como se carga. Ahí vamos. Entonces como tu
disparador Blob Storage, correcto. Por lo que ves que hay un número de ellos y te animo
a que en realidad los pruebes. Podrías tenerlos
útiles fuera de estas manifestaciones
que estoy haciendo. Por lo que te animo
a seguir adelante e intentar ver cómo se ve el
trimestre, a
ver cómo se ve el
código de encuadernación. Pero aquí cuando hacemos el disparador
Blob Storage, puedo cambiar el nombre para que sea la función activada por
blob. Y entonces nuestro camino
va a ser, básicamente el camino va
a estar ¿dónde debo mirar? Slash, terminan por expresión
vinculante, ¿qué debo buscar? Entonces aquí estoy diciendo que
estoy buscando el nombre de lo que
esté en el blob. Esa es una expresión vinculante. Dame el nombre para que
me permita acceder a ese hilo. Y luego la conexión de la
cuenta de almacenamiento, es más o menos va a preguntar qué icono de almacenamiento debo usar? Por lo que va a ser
predeterminado a uno ya asociado con el AP en el
que
se hospeda la función. Por lo que voy a seguir adelante y pegaré Create. Y para éste, vayamos al código y a prueba, donde veremos que tenemos información que viene de uno, la corriente que
se llama mi blob. Y luego el nombre que es esa expresión vinculante
que configuramos. Y luego tenemos el maderero. Por supuesto, esto es
sentarse y ver esa blob. Ahora pasemos
a la función dot JSON y miremos de nuevo. Por lo que tenemos el nombre
del tipo Blob Trigger, tenemos la ruta, muestras, elementos de trabajo
guión, recortar el nombre. Entonces lo que tenemos que hacer es tener un blob que
exista con ese nombre. Si miro en mis
cuentas de almacenamiento y para llegar
al almacenamiento, voy a ir y por si no
estás familiarizado, puedes ir al tablero de instrumentos, tal vez
lo veas bajo
todos los recursos. Si no, entonces solo puedes
ir a cuentas de almacenamiento. Y luego puedes hacer clic en cuentas
de almacenamiento. Este no-muestra todos
tus contenedores. Por lo que estos contenedores son realmente la especie en la que se almacenarán
los archivos. No quiero tener un
contenedor con ese nombre. Sea cual sea el nombre que me sentaría ahí algunos artículos de trabajo punteados
era el predeterminado. No cambiamos eso. Qué IPC lo cambia, sea cual sea el
nombre que pongas ahí, tienes
que asegurarte de que tienes un blob que existe con ese nombre. Entonces voy a crear
ese contenedor y solo
seguir adelante y hacer eso y
saber que existe. Puedo empezar a agregar archivos. Así que sólo voy a subir un archivo de prueba que
tengo en mi computadora. Por lo que sólo voy a hacer clic en
Subir, seleccionar el archivo. Y a veces esto
podría ser más rápido si tienes el Explorador
de almacenamiento. Entonces eso es en realidad una
herramienta de terceros que si
lo deseas, podrías instalar Microsoft
Azure Storage Explorer que te
permita manejar todas
sus cuentas de almacenamiento y
todo desde tu computadora, pero eso es una conversación
para otro momento. Divide el archivo y luego elige mi archivo de prueba y súbelo. Y ves que lo
subí en pestaña. Si vuelvo
a la función y miro el registro que
ves aquí está registrando que ve un nuevo
archivo y esa es la ruta. Ya ves el nombre ahí,
blob dash test.txt. Ves el tiempo creativo inserción del tiempo en
todas estas cosas. Así es como
puedes sentarte y ver el oído de almacenamiento para ver. A lo mejor querías comprimir imágenes tan pronto
como se suban. A lo mejor quieras
moverlos o renombrarlos. Hay una serie
de cosas que puedes hacer con algo como esto. Una vez más, tus contextos
siempre determinarán tu aplicación.
11. Revisión de secciones: diferentes funciones de Azure: Entonces, ¿dónde está el final
de esta sección? Y sólo vamos a
revisar lo que hemos aprendido. Uno por si te lo perdiste la
primera vez que lo volvimos a hacer, y lo hicimos tres veces más. Sabemos cómo
crear una nueva función. Entonces dentro de nuestra función arriba, crearíamos y luego
elegimos de la lista,
la, las plantillas que
mejor se adapten a lo que necesitamos. Es mejor simplemente crearlo desde los diez pies en lugar de
crear uno y luego
personalizarlo para otro. Pero solo trabajemos con
lo que nos da como plantillas. Y miramos
el gatillo HTTP, miramos el disparador de
temporizador y
miramos el disparador Blob
Storage. No obstante, en base a los
diferentes recursos y servicios con los que puede
terminar interactuando, solo puede comenzar con la plantilla adecuada
desde el principio. Al mirar nuestras
solicitudes HTTP en las que
enfocarnos, vimos que obtenemos un mini
dashboard que nos
permite ver especie de las ejecuciones en
cuáles fallaron, cuántas veces
tenemos causa exitosa, tal vez 400 llamadas, cláusula
500, etcétera Todos estos, um, están fácilmente disponibles para nosotros. Podemos obtener la URL de la función, que establecimos tiene el código o la clave
adjunta, lo que nos permite
conectarlo a cualquier aplicación. También discutimos que al
crear la función, al
menos la función HTTP, podemos crearla como anónima
o para acceso anónimo para un nivel de función seguridad o mezquita entregar seguridad
o nivel de administrador seguridad. Miramos todo eso. Este está restringido fuera del nivel de función tal como está. El código más prueba. Podemos mirar el código
que necesitamos modificar. Por supuesto, lo que éste hace es que se vea tanto en
la cadena de consulta el cuerpo de
la solicitud en función del tipo de solicitudes
que estamos haciendo, no
usaríamos una y no
la otra tal vez o ambas. Depende de tu contexto. Siempre podemos probar
por su cuenta desde esta interfaz y
podemos ver los registros aquí
mismo para ver qué
está sucediendo
en base a nuestra información de log
que escribimos en nuestro código. Entonces esta es la era de la consola nos
da todos los datos. En consecuencia. Saber, cuando
vamos a la integración, nos da un
bonito tipo
de flujo de trabajo tipo de pantalla que
nos permite modificar algunas de las
fijaciones y estaremos mirando fijaciones más adelante. Por lo que tenemos fijaciones de entrada
y fijaciones de salida. Tenemos el gatillo
que podemos modificar. Podemos volver a saltar al código. Si miramos en monitor, vemos aquí que obtenemos acceso a los insights de la
aplicación. Porque recuerda que
habilitamos eso cuando creamos la función arriba. Para que podamos ver todas
las invocaciones. Cada vez que se ejecutaba, cuál fue el resultado, cuánto tiempo tardó, fue una
ejecución exitosa o no. También podemos buscar en los registros para registros más detallados de todo lo
que sucedió o está sucediendo
con la app. En ese momento. También podemos bajar a las teclas de
función y
podemos crear una nueva clave de
función si queremos, podemos revocar una, podemos renovar. Si necesitamos tener un control
completo sobre
cómo funciona esta función. Y todo eso es solo
la función de solicitud HTTP. Pero también vimos
que si bien similar, cada tipo de función tiene sus propios matices basados en
lo que está ahí. El temporizador activó uno, hará algo cada tanto a menudo basado en la
expresión Cron que especificamos. El Blob uno iba a
vernos espacio para que nuestro archivo se cayera allí y luego
puede procesarlo. Entonces todas estas cosas son posibles con todo eso hecho, hemos completado esta sección. Cuando volvamos,
vamos a estar mirando uso de Visual Studio para
crear una función arriba. Y veremos cuáles son las
diferencias entre
hacerlo en el portal y usar
Visual Studio en nuestra máquina.
12. Funciones en Visual Studio: Muy bien, por lo que en esta sección
vamos a estar creando algunas funciones son una función
usando Visual Studio. Lo que he hecho aquí es que he saltado a Oporto, crea, fui a funciones
y luego seleccioné el Visual Studio de
la lista desplegable. Y esbozan
todo lo que
necesitas para ponerlo
en marcha. Todavía se mencionan
en Visual Studio 2019. Entonces, si eso es con lo que
estás trabajando, entonces no hay problema que
puedas seguir. Pero estaré usando
Visual Studio 2022 para este conjunto de actividades. Simplemente puedes seguir a lo largo de
estas instrucciones. Y realmente y
verdaderamente eso es
más o menos lo que fui a estar
pasando contigo. Si quieres simplemente
leer eso y saltarte el resto de estas lecciones,
entonces eso depende de ti. Pero por ahora, voy a seguir y acabaremos
en el siguiente video, saltaremos a Visual
Studio y empecemos.
13. Crea una aplicación de función: Muy bien, entonces en este punto estoy asumiendo que
ya has instalado Visual Studio y ya has configurado tu carga de trabajo de Azure, como discutimos al
inicio de este curso. Para empezar,
vamos a
saltar y crear un nuevo proyecto. Y luego puedes filtrar. Siempre puedes
buscar solo periodo de plantillas para como tus funciones. O si ya lo hiciste de inmediato. En algún momento en el tiempo, sería a un lado. Aquí. Sólo voy a ver
un 0 funciones Fundamentos. Ese es el nombre del
proyecto y la solución. Y luego acabo de golpear Create. En ese punto me van
a hacer algunas preguntas. Uno, ¿qué tipo de
plantilla me gustaría? Entonces similar al portal donde podríamos
elegir una plantilla, me
están preguntando, ¿Quieres un servicio tanto
disparador, etc, etcétera lo verás en las plantillas. Esta vez voy
a ir con
los vacíos para que podamos hacer
un poco de exploración. Entonces voy a
decir vacío y luego puedo usar un emulador de almacenamiento. Entonces, si estás haciendo esto
sin tal vez tener acceso
directo a la suscripción de
Azure, o aún no has llegado tan
lejos con Azure, en realidad
podrías simplemente usar un emulador de almacenamiento donde vamos a pretender que tienes un almacenamiento de conos comprados fuera curso con algunas limitaciones. Así que sólo voy a
proceder con todo eso y seguir adelante
y golpear Create. Entonces una vez creado ese proyecto, podemos mirar algunos de los archivos
que tenemos a nuestro alcance. Por lo que quería empezar
con los archivos del proyecto. Entonces en dotnet, cosas desde.net Core de
tres puntos uno O boards, al hacer clic en el archivo de enfoque
CS, realidad se
puede ver
el archivo XML detrás de él. Siempre puedes
hacer clic derecho e ir a Editar archivo de proyecto y también
obtendrás esta vista. Este archivo Eso es
un poco más grande. Este archivo realmente solo esboza la fuente a la
que estamos apuntando, la dotnet busca
framework y estamos usando versión de
Azure Functions para al momento de esta grabación, esta es la última y más grande. Y cuando
vamos a estar trabajando, tenemos que hacer referencia
al paquete Microsoft.Net.sdk funciones
dot. Y aquí está
hablando de dos archivos que se nos
dan host dot JSON y
local dot settings.js SON. Y nos están haciendo saber que los van
a copiar al directorio de salida
para el
settings.js local en cada uno nunca vaya
a un directorio publicado. Y eso es realmente
porque es un archivo local, pero veremos por qué en unos pocos. Entonces si saltamos al archivo
host dot JSON, es sólo un archivo de configuración. Está diciendo OK versión 2, veremos qué
significa eso en unos pocos, pero también tiene algunas
configuraciones están en el registro donde está
viendo que debe usar la Application Insights, que es lo que sabemos que
habilitamos en nuestra función arriba. Eso es realmente todo lo que
está pasando ahí. Cuando miramos la configuración del
lote local, JSON, nos
está haciendo
saber que no está encriptado y
tiene algunos valores. Entonces el almacenamiento a 0 Web Jobs, sabemos que
en realidad se supone que es la cuenta de almacenamiento que está
asociada a una función up. Pero porque estamos utilizando
el almacenamiento de desarrollo que se establece en true, así que ese es el valor que está viendo. Simplemente fingir que
existe más o menos. Y luego nos está dando a los océanos trabajo o tiempo de ejecución
que se establece en dotnet, que podría ser
algo como
basado en el tipo de lenguaje
que se está utilizando. Pero debido a que estamos usando C-sharp, necesitamos un tiempo de ejecución de dotnet. Entonces eso es por defecto
establecido en dotnet. Entonces ese es un recorrido básico
de estas funciones arriba. Y los dos archivos que tenemos. Cuando volvamos, en realidad
comenzaremos escribir algún código para
escribir una función.
14. Función de prueba en Visual Studio: Muy bien, así
que ahora que tenemos nuestro proyecto en marcha, lo que no tenemos es
una función real. Muy bien, así que voy a
hacer clic derecho en el proyecto, ir a Agregar, y luego fui
a ver nueva función de Azure. Cuando haga eso, elegiré el nombre de esta función
y simplemente dejaré la función predeterminada de
un punto CS no
quiero que esto no sea
dot CSS esta vez, pero dejaré el nombre predeterminado. Adelante y pulsa Agregar. Sé que esta ventana de diálogo
nos pregunta qué plantilla nos gustaría. Entonces tenemos eso primero cuando
estás creando un proyecto, fuimos con
uno vacío, pero su dinero. Por cada función que
vamos a crear, estamos viendo las mismas plantillas que habrían
visto en el portal. Y cada uno de ellos nos
estaría haciendo las mismas
preguntas de configuración que habríamos visto si lo estuviéramos creando en el portal con un temporizador
aún se llegaba a configurar el
horario con el blob, todavía llegamos a
configurar la conexión. Bueno, éste es un poco diferente a lo que
vimos antes, donde nos sentamos para montar el camino y varias cosas. Bueno, voy a ir con
un camino de menor resistencia. Vamos con el disparador
HTTP y
voy a elegir uno
anónimo esta vez. Y vamos a seguir adelante y sumar. Una vez que hacemos eso, obtenemos
este archivo de función. Y notaré que todo lo que conseguimos
fue que CSV archivo puntos, los puntos CS6 cinco. Tampoco tenemos una
función que JSON presente. Entonces lo que sucede es que cuando
usamos Visual Studio para
crear nuestras funciones, en realidad
lo va a
compilar hacia abajo en una DLL. Y si has estado usando
dotnet el tiempo suficiente, sabes lo que es una DLL. Y luego esa DLL,
tendremos todos los bits de información que el
portal necesita usar una vez que se despliegue para determinar cualquier configuración y cualquier otra
cosa que lo escribí. Entonces va a ser precompilado por Visual Studio y
simplemente implementado a Azure en lugar
de reunirse en un 0 y luego compilado en un 0
y luego se utilizará en Azure, como lo que estamos
haciendo en el portal. Por lo que
probablemente seas un espacio más familiar cuando estás escribiendo tu código y
tienes mejor acceso a inteligencia y recursos
aquí en Visual Studio, también
podemos manejar depuración mucho mejor
porque en realidad podríamos simplemente ejecutarlo en modo de
depuración y establecer nuestros puntos de ruptura al
igual que lo haríamos con cualquier otro tipo de aplicación que vamos a estar construyendo
dentro de Visual Studio. Aquí tenemos una clase estática y luego tenemos
el nombre de la función. Y luego tenemos un
método estático llamado run, que sabe que es
un disparador HTTP. Sabe que es
nivel de autorización es anónimo, que siempre puedo cambiar aquí para ser función
tanto por supuesto, tendrías que tener alguna configuración
más alrededor de eso con la clave, etcétera Pero eso es anónimo. Contamos con los diferentes tipos de solicitudes que se aceptan. Entonces GET y post. Y entonces podemos definir
una raíz y una serie de cosas que están
a nuestro alcance aquí mismo. Sin embargo, en última instancia, el código
o el código en el cuerpo de la función en sí
es más o menos
parecido a lo que habíamos
visto anteriormente. Si fuéramos a ejecutar esto
y sólo voy a golpear a F5 y voy a establecer un punto de ruptura solo para mostrarte
que depurando esos trabajos. Si pego a F5, se va
a Visual Studio. Cosas de Visual Studio. Si es tu primera vez, posible
que lo veas instalando algunas
herramientas a medida que avanza. Pero aquí vemos
que está abierto corriendo. Por lo que nos está haciendo saber que para
poder llegar a esta función, tenemos que enviar una solicitud a
través de esta URL. Voy a pedir prestada esa URL
y voy a usar una herramienta
que usamos para las
pruebas de EPA llamada Postman. Entonces si no tienes post-dinero, siempre
puedes seguir adelante
e instalarlo. Es bastante fácil
encontrar Posts ME n, pero es una buena herramienta
para tener simplemente descender solicitudes HTTP
aleatorias
cuando estás probando. Así que sólo voy a
seguir adelante y poner en la URL. Voy a dejarlo a medida que me dé. Y para los parámetros voy a poner en
ese parámetro de nombre. Y fui a ver prueba
del cartero como el valor. Entonces cuando envíe, se va a conectar a
nuestra app que está en tiempo de ejecución, IACUC tomando los puntos de ruptura. Así que ten en cuenta que está
estableciendo un punto de ruptura, en realidad
puedo
interrogar mis objetos. Entonces veamos
la propia solicitud. El objeto de solicitud tiene todo sobre
las solicitudes HTTP. Tiene un mito que
se estaba utilizando. El camino, todo lo que necesito saber más o menos
si no hago indagaciones, voy a ver que el okayed encontró uno en la lista y
tiene el nombre clave y el
valor prueba ajuste ahí. Puedo determinar que se
supone que tiene que conseguir el nombre correcto. Entonces si acabo de golpear F5, puedo quitar este
punto de ruptura saber, y acabo de golpear a F5
para que continúe. Entonces
surgió la ventana de la consola cuando se fue
al modo de depuración. Pero si vuelvo a Cartero, que es la herramienta que
hizo la solicitud, entonces vas a ver
que respondió con un 200. Ok, hola pruebas del cartero. Esta función activada HTTP se
ha ejecutado con éxito. Eso es sólo mantener las
pruebas locales pueden suceder, no. Por lo que en realidad podemos
usar herramientas como Cartero y cualquier otra
herramienta que puedas tener, tal vez Fiddler o
incluso tu navegador. Y tratar de hacer este
tipo de operaciones. Podemos depurar saber, y mejor podemos interrogar nuestra aplicación
o una función, lo siento, código ya que estamos construyendo
o
reglas de negocio para el nodo,
eso es realmente todo. Ahora sabemos cómo
crear una función usando Visual Studio Hall
para probarla y mantener integrarse con herramientas de
terceros en tu navegador para activar
HTTP o solicitudes. Sepa, a medida que
avanzamos, nos vamos a complicar un poco
más. Pero por ahora, eso
es todo por cómo
creamos una función
usando Visual Studio.
15. Revisión de secciones: funciones en Visual Studio: Muy bien chicos, así que eso es
realmente todo para esta sección, nos fijamos en cómo podemos
configurar Visual Studio 2022 o 2019 con el Azure
relacionado con sets. Por lo que instalamos como su carga de trabajo y eso nos permite
crear nuestras funciones. Y esto es realmente
sólo una función arriba. que veas aquí, cada función
que crearíamos en este proyecto sería un archivo independiente
que es una función. Cuando desplieguemos esto, lo que estaremos haciendo más adelante. Esto es sólo mojarse
los pies. Pero cuando implementamos todo
este proyecto, realmente
lo está desplegando
como una función con diferentes funciones. Si tenemos una serie
de cosas que desea
realizar y una
función por tarea, entonces tenemos un proyecto
con cada función para tarea, una configuración configuraciones
que rigen todas estas funciones
interactúan entre sí y probablemente cualquier otro servicio que
necesiten y cualquier servicio de terceros en
ese que se realice una implementación. Cuando regresemos, estaremos
viendo cómo puedes usar Visual Studio Code para desarrollar
tus Funciones de Azure.
16. Uso de las herramientas básicas de Azure de la función: Muy bien chicos, así que
vamos a entrar en ella para esta sección donde
estaremos discutiendo las funciones de Azure
usando Visual Studio Code así
como las herramientas principales. Así que estoy en un pH aquí, estamos trabajando con una
función 0 herramientas core es el encabezado para que
puedas llegar allí, puedes fácilmente simplemente Google
tu espuma derramando herramientas core, y es la
documentación de Microsoft Ciceronian, las herramientas centrales nos
permiten desarrollar y probar funciones localmente. Entonces esta es una mejor opción que Visual Studio
porque es multiplataforma. Por lo que crea un tiempo de ejecución
en su máquina para simular cómo debe verse el
tiempo de ejecución de la función 0. Y luego puedes desarrollar
y probar localmente, por
supuesto, antes de publicar. Por supuesto, una vez más, las visitas a la te permiten hacer eso, pero esa no siempre es
una opción basada en tu sistema operativo y otras limitaciones
que puedas tener. Qué podemos hacer con
las herramientas core, si nos desplazamos hacia abajo, vemos
las diferentes versiones. Así que en este momento estoy usando la versión cuatro porque estoy usando dotnet
seis balas, claro, basado en lo que sea atascado
en el que estés o cualquier
versión de dotnet, asegúrate de que vas
a usar la versión correcta de las herramientas básicas
para la instalación. Tenemos las
instrucciones para Windows, Mac OS y Linux, ¿verdad? Entonces, en base a tu sistema
operativo, vas adelante
y usas el que necesites. Estoy en Windows,
voy a usar el de 64 bits que lanza el típico instalador de Windows al
que estamos acostumbrados. Y podemos simplemente seguir adelante y golpear Next cada vez y
dejar que se instale. Y mientras eso está sucediendo
en segundo plano, solo
voy a señalar
hasta que también puedan llegar a las herramientas centrales de GitHub. que pueda ir al
proyecto de Azure y esperar con interés cuentas de
Azure Functions o
Azure más bien, Andrew for Azure
Function herramientas básicas como sus herramientas básicas de Funciones. Y luego que esos tienen instrucciones de
instalación de
acuerdo con lo atascado en el que estés, probablemente un poco más de
información de la que verías fácilmente en la documentación de
Microsoft. Por lo que esa opción también existe. Nadie dice terminado, sólo
voy a lanzar
mi código de Visual Studio. Y lo que normalmente
hago cada vez que tengo un nuevo proyecto para construir es simplemente seguir adelante
y crear una nueva carpeta. Creé y abro una nueva carpeta en
algún lugar de mi máquina. Y estoy
asumiendo que estás
familiarizado con Visual
Studio Code , pero si no, lo que normalmente hago es simplemente
hacer clic en Abrir carpeta y
navegar a donde quiero que sea crear la carpeta y luego usa esa carpeta
que acabo de crear. Y eso es lo que
crea mi proyecto. Voy a hacer todas mis
funciones 0 operaciones no relacionadas aquí mismo. En esta interfaz. Permítanme simplemente hacer esto un poco
más grande para que podamos verlo. Lo siguiente que
quería hacer es abrir una ventana de símbolo del sistema. Entonces si estás en Linux,
si estás en simulacro, podrías ser diferente
de
Hawaii, lo estoy usando, pero al final
del día, todos
podemos estar de acuerdo en que el símbolo del sistema se ve muy similar en
todas las plataformas todos los comandos que voy a
utilizar aquí serán utilizables en cualquier sistema operativo
que estés usando para verificar. Bueno, en primer lugar, lo
que hice fue navegar a la carpeta donde
sé que es mi proyecto. Y entonces no vi. Y ahí fue donde
fuimos a verificar que las herramientas core
se hayan instalado con éxito. Por lo que obtenemos este bonito
particular incontable. Y luego tenemos de
toda la documentación alrededor de los diferentes
comandos que podemos ejecutar. Aquí vemos unidad
crearía una nueva función arriba en la carpeta actual e inicializaría un repositorio de Git.
Así que probemos eso. Por lo que pasé por él
si UNC espacio en ella. Y entonces
me va a pedir que seleccione el tiempo de ejecución. Entonces por supuesto que quería dividir el tiempo de ejecución de dotnet
ya que estamos usando C Sharp y bajarlo, así que está haciendo lo suyo. Veo aquí está poblado
en los archivos fondo mientras
hacía lo suyo. No, intenté ese mismo comando dentro de la terminal que está
integrada en Visual Studio Code. Y como pueden ver,
tengo un error. Entonces esperaba que pudiéramos hacer todo desde el
interior de la terminal en lugar de Visual Studio Code. Pero claramente hay algunas limitaciones y
eso no es problema. Por lo que sólo tenemos
que entender qué herramienta se puede utilizar para
vatios cuando la necesitamos. Simplemente se crearon un vistazo a la
fuzzer. Tenemos esta carpeta de código
VS pensamiento la cual tiene un
archivo de extensión solo para asegurarnos de que las herramientas de Azure o las
herramientas de función 0 estén instaladas, danos la mejor experiencia posible en Código Visual Studio. También tenemos al gitignore. Creó ese archivo CSV con el
que estamos familiarizados y los otros dos
archivos JSON que
también ya estaban familiarizados. Si quisiera una nueva función
y solo, solo una nota, recuerda que cuando
hicimos func
init, nos pide runtime. Por lo que es posible que no necesariamente
quieras un tiempo de ejecución dotnet.net. Es posible que desee un pedido a tiempo o un tiempo de ejecución de Python basado en su sesgo hacia su
lenguaje de programación y entorno preferido. Y eso está completamente bien. El hecho es que soporta
muchos idiomas diferentes. Sólo me estoy enfocando en dotnet porque tengo una máquina
Windows. Y si estuvieras usando un simulacro y eso no es
realmente una excusa. Solo digo que me estoy
enfocando en dotnet porque eso es lo que estamos
haciendo para este curso. Entonces si quiero una nueva función, usaré eso si no volviste a
ver comando y
luego diría Nuevo. Y si no estás seguro, siempre
puedes
volver a subir y mirar los comandos que me
permitirían saber seleccionar de la lista
qué nuevo tipo R, qué plantilla
querría para mi nueva función. Entonces voy a elegir uno
que no hemos hecho antes, este pequeño
disparador Cosmos DB. Yo puedo hacer eso. Presiona Enter,
entonces va a decir cuál debería el nombre b. Fui a ver Cosmos DB función
activada. Y luego cuando presione enter, entonces seguirá adelante
y hará su magia. Y en segundo plano
verás el archivo emergente correspondiente
en tu código de Visual Studio. Eso resume todo el fin de semana, usa las herramientas básicas de Azure y la línea de comandos para
iniciar el proceso. Ahora la cosa es
que es posible que no
estés usando Visual Studio
Code como tu editor. Es posible que estés usando un editor
diferente, pero para usar las herramientas principales, en realidad
puedes hacer
todo aquí mismo. Y aunque estuvieras
usando Notepad Plus, Plus, podrías entrar y editar los archivos
que se estén
depositando en la carpeta una vez que estés ejecutando
tus comandos aquí. Entonces cuando volvamos vamos a ver
cómo gestionar el proyecto, fusionando solo Visual Studio Code.
17. Uso de Visual Studio: Muy bien chicos, así que
vamos a estar usando Visual Studio Code para iniciar una función
y arriba desde cero. Y vamos a estar
mirando las diferentes herramientas y diferentes matices que lo hacen
diferente de usar las herramientas principales y el propio
Visual Studio. Entonces dicho eso,
comencemos. Lo primero que quieres
asegurarte de que mencionamos esto antes, pero lo volveré a mencionar. Asegúrese de tener instalada
la
extensión Azure Functions. Conoce lo que tengo es la extensión
Azure Tools con la que vino con
Es un pack de extensión. Por lo que vino con un montón de extensiones relacionadas con
Azure. Y acabo de hacer eso porque
hago algunos desarrollos de Azure. Prefiero solo
tenerlos cuando esté listo para ellos luego ir a
cazar en su momento. No obstante, si no quieres todo
el parque, no hay problema. Simplemente puedes buscar
la
extensión Azure Functions solo
buscando aquí. Y ese solo te va
a dar lo que
necesitas para asegurarte de
que puedas hacer tu desarrollo de Azure Function. Simplemente leer a través de
la documentación es en realidad bastante
informativo y sí te
dice cómo puedes ir
sobre instalarla y
configurarla y ejecutarla y desplegarla. Cuando sea el momento adecuado. El emblema en la
documentación es ligeramente diferente al
emblema que tengo en pantalla, al
menos en el momento
de esta grabación. Pero eso está bien. Adivinando que
van a trabajar manera
muy similar de todos modos. Por lo que sólo voy
a hacer clic en eso como su sección y luego me
permite ver
todas las funciones. He creado una carpeta completamente nueva, que también puedes
hacer si lo necesitas,
pero solo vamos a trabajar a través de esto. Entonces aquí tengo la opción de
crear un nuevo proyecto, crear una nueva
función cuando
ya estoy en nuestro proyecto y
desplegar la función arriba, que sería
todo el proyecto. Así que acabo de empezar
con proyecto creativo. Lo cual luego me pregunta, raro, ¿quieres poner
este nuevo proyecto para que puedas ir a navegar y luego crea una nueva carpeta
donde sea que esté. Ya creé una
carpeta llamada como tu teléfono, código de
fundamentos de Sean. Es básicamente en el mismo
lugar que el anterior donde estaba usando las herramientas
centrales
nos dirá seguir adelante y seleccionar eso. Y luego incidentes
me pidieron que seleccionara un idioma. Voy a mezclar. Está por encima de él. Hemos estado lidiando con
C-Sharp todo este tiempo, principalmente porque era Windows
y porque he estado usando Visual Studio y estaremos usando Visual Studio en el
futuro, ambos en una sesión de código abierto. Todas estas son
opciones con las que
puedes tener a alguien con quien ir. Typescript hace
algo diferente, luego quieren una plantilla para la primera función que
podamos omitir que será similar a crear el proyecto
vacío en Visual Studio y luego agregar
las funciones más adelante. En esta situación,
solo voy a empezar con un disparador HTTP. Entonces déjame hacer eso. Dejaré el nombre predeterminado, presionaré Enter, y lo
haré anónimo. Y con todas esas
donas creando. Y luego terminó cuadrículas en un proyecto y luego
hizo un montón de cosas. Y se inicializa un
repositorio Git para mí con todos estos archivos predeterminados cuando
subo el listado del proyecto, tengo una carpeta de código VS que
tenga las extensiones e inicializando archivos
para asegurarme de que tengo la mejor experiencia al
usar Visual Studio Code, tengo una carpeta para el activador HTTP que
tiene la función dot js. Ya sabemos de qué
está lejos este expediente lo hemos visto antes. También tiene esos archivos de índice. Entonces, a diferencia del archivo C-Sharp, que tiene un archivo CSS de punto,
elegí TypeScript, por lo que no es un archivo TSV, que en realidad es solo un archivo JavaScript
encapsulado. Si conoces puerta, no hay desarrollo ni
angular y tal, entonces el código TypeScript se ve más o menos es solo una versión JavaScript
de lo que ya sabemos. Está tomando la solicitud
como una solicitud HTTP. Hace su contexto, que es el contexto de la
función donde el registro. Y luego vamos y obtenemos el nombre de la
cadena de consulta o del cuerpo. Entonces imprimimos
según si los datos regresaron o no. Tenemos algún expediente. Tenemos una función ignorar archivo, tengo un regalo ignorar archivo, y luego tenemos los archivos JSON
host. Por lo que ves aquí que el
tiempo de ejecución está roído en la última vez cuando
sería punto en ese archivo de paquete. Y tenemos un archivo de config TS. Muy bien. Esos son todos los archivos
que sacamos de la caja. Sólo voy a seguir adelante y ejecutar a este alguien para
empezar a depurar. posible que lo veas instalando algunas otras
cosas en tu computadora. Por supuesto, tener la última
versión de Node ya instalada en esta situación es imperativo para que esto realmente ejecute localmente porque
obviamente depende de náuseas, necesidad de tener Nodo y npm
instalar en tu maquina. Vemos aquí en la
consola que
tenemos la URL a nuestra función. No sostenemos el testículo
o sí podemos usar un navegador o
podríamos usar Cartero. Entonces para falsificar, solicita
a alguien que vaya por un cartero, voy a poner en la nueva URL, así que es lo que tú, o te dan aquí, slash api slash
HTTP trigger one. Y luego fui a poner en la cadena de
consulta para el nombre. Entonces fui a mandar eso. Ves aquí que el logotipo y el fondo
se volvieron locos, ¿verdad? Entonces bajó la actividad. Y por supuesto que obtuvimos esa
respuesta como una respuesta de 200 OK. Eso es más o menos por
usar código de Visual Studio, depurar la formación
en Visual Studio Code. Y luego podemos
por supuesto desplegables. Miramos todo eso. Vamos a pasar por todo
el desarrollo
de toda una suite de
funciones en unos pocos, pero solo
lo estamos dando paso a paso? No. Justo antes de seguir adelante, puedes seguir
adelante si quieres, pero no
necesariamente tienes que
poner en el tiempo de ejecución de las herramientas centrales. Es imperativo que
sepas qué versión del tiempo de ejecución de las herramientas principales frente a la versión
conmutada de
dotnet estás usando. Dotnet six sigue siendo un relativamente nuevo en el momento de
esta grabación. El utillaje no
siempre va a ser laborioso y 24 semanas. Entonces aquí pasé por los
mismos pasos, una vez más, creando un nuevo proyecto, pero elegí c-sharp esta vez. Y estás viendo
aquí que puedes usar.net Core tres
son dotnet F5. Fui a elegir dotnet F5, y luego fui a hacer un
disparador HTTP de la misma manera. Entonces claro dije que todo
esto abre una
nueva función al
quemar carpeta, lo siento. Sólo reutilizar todo aquí. Esa es una
función C-sharp que luce
igual a la que hemos estado viendo. Entonces, si acabo de hacer una carrera, solo
quería arruinar y
asegurarme de que mi tiempo de ejecución sea, me dejaría por construir un proyecto dotnet usando
Visual Studio Code. Fue como dije,
las herramientas podrían no necesariamente ser estables. Tiene que ser en ese momento, pero ojalá para cuando
estés haciendo este curso, todos esos matices se han ido. Entonces sí, fue exitoso. Aquí vemos que el tiempo de ejecución está
listo y estoy
depurando con éxito mi función de
bestia C-sharp. Estoy viendo todo eso para
decir que tal vez cuando giras con un núcleo de
herramientas y podrías estar en una versión y luego intentas editarlo en
Visual Studio Code
y luego intentas
ejecutarte Visual Studio Code
y luego intentas
ejecutarte en modo de debug en
Código de Visual Studio, es posible
que no necesariamente
tenga la mejor experiencia si las herramientas y
las versiones no son las mismas, podría terminar
recibiendo errores raros como
configuraciones faltantes y tal. Entonces solo apunto que en caso de que
termines así, es mejor empezar en un solo lugar y hacer
todo en un solo lugar. Entonces si comienzas con el código de
Visual Studio,
todo lo que hay. Lo mismo con Visual
Studio, etc, etcétera Con todo eso hecho y dicho, voy a llamar que se
cierra en esta lección. Espero que aprendas y campo equipado y listo para
el proyecto por delante.
18. Revisión de secciones: funciones de Azure en Visual Studio: Muy bien chicos, así sucesivamente. En esta sección nos fijamos herramientas
alternativas
a Visual Studio. Visual Studio es una gran
encuesta para bestia, por supuesto, pero no siempre es la mejor o la única opción
para algunas personas. Nos fijamos en el
hecho de que
en realidad se pueden obtener las herramientas centrales. Se puede girar hacia arriba desde allí. Puede utilizar un editor de
texto regular y algunos comandos en
el símbolo del sistema. Y al menos puedes tener una buena experiencia
desarrollando tu teléfono. muestra es desplegarlo e
interactuar con ellos. También miramos
Visual Studio Code, que es un enfermo muy crítico en lo que
Visual Studio te ofrece. Y cuenta con excelentes conjuntos de herramientas, una inteligencia para ayudarte a través de tus tareas de desarrollo. Le permite
depurar justo lo mismo que tomamos prestadas algunas cosas. Es una muy buena, como dije, por un segundo. Si no tienes Visual Studio o eso no es una opción para ti. Visual Studio Code es un
excelente recurso para usar cuando se desea desarrollar
sus funciones de Azure.
19. Encuadernaciones de funciones en Azure y funciones durables (orquestador): Hola chicos, bienvenidos de vuelta. En esta sección
vamos a estar mirando algunas otras características o funciones que probablemente aún no
hayamos cubierto. Así que fui a ir un poco más en
profundidad en los fijaciones de entrada y
salida. Lo tocamos antes, pero vamos a pasar por
algunos ejemplos prácticos. También vamos a ver Funciones
duraderas
y la historia del arte. Y vamos
a ver la configuración de un manejadores. Entonces vamos a estar usando Visual Studio Code para la
mayoría de estas actividades. Y verás cómo hacer que
las funciones sean un poco más robustas. Y todo el fin de semana les
dejó interactuar con otros servicios fuera de
un solo gatillo o una causa. Así que quédese por ahí. Tenemos bastantes
cosas por recorrer.
20. Vinculación de entrada y salida: Muy bien chicos, así que en esta lección fuimos
a estar mirando enlaces de
entrada y salida. Vinculaciones de entrada y salida para demasiados referidos literalmente
entrada y salida, una fuente de entrada y
destino para una salida. Por lo que ya creé
un proyecto completamente nuevo. Fui a la pestaña Azara aquí. Y luego dije crea un nuevo
proyecto y muestra un nodo o una plantilla TypeScript
para este en particular. Así que sólo vamos a estar
usando eso aquí. No, sí me doy cuenta
con las herramientas que algunas de las cosas por las que
vamos a pasar, verás
cosas diferentes basadas en la plantilla del proyecto que estás usando en la forma en que funcionan
las herramientas. Recuerda, mucho de
esto es completamente nuevo. Entonces con el tiempo podría
haber obedecido lo mismo y no
experimentar lo que yo podría
señalar como una brecha potencial. No obstante, estoy eligiendo este
camino de menor resistencia porque sí obtenemos un asistente cuando queremos agregar
un enlace de entrada. Cuando conseguimos ese
asistente y ponemos
la información adecuada
sobre lo que va a hacer es generar un bloque de
código de configuración que sea global. Así que no importa qué plantilla, aunque no consigas
el asistente en sí, aún
puedes ver si
no quieres seguir a
lo largo de nuestra cuenta, sigue con base en el tipo de
plantilla que hayas seleccionado. No obstante, cuando se
genera el código y luego
revisamos que en
realidad puedes pegarlo en tu propio archivo In dot JSON y
proceder solo una escena. En esos puntos. Les señalaré a
todos, ya sabes, otra cosa que vamos
a necesitar para esta actividad es el emulador de
almacenamiento Cosmos DB. Puedes conseguirlo a través una fácil búsqueda en Google,
solo búsqueda de Google, un emulador 0 Cosmos DB, ve a la
documentación de Microsoft y
puedes instalarlo en
tu PC con Windows. Sepa, si no
tienes esta opción, en realidad
puedes ir a
Azure y aprovisionar el
servicio Cosmos DB por tu cuenta. Y eso es bastante simple. Los pasos muy similares a lo que estaré haciendo
en el emulador. Podremos ser replicados en el
tablero sin importar. Entonces estaré usando el
emulador para esta actividad. Entonces Cosmos DB servirá
como nuestro enlace de entrada. Y luego cuando estemos listos
para la parte de salida de la misma, aprovisitaremos una mesa Azure o tal vez cuando lleguemos allí
podamos averiguarlo en base a la actividad que solo estoy
jugando de oído aquí. Cuando hayas instalado
el emulador de DB y lo inicies y
lo inicies saldrá en el navegador buscando
algo así. Y verías que te dice que se está ejecutando, te da el URI, te
da la clave principal, y te da la cadena de conexión de
parámetro. Vamos a necesitar todo eso. También puedes ir al Explorador. Puedes crear una nueva
base de datos y
puedes crear diferentes
contenedores ahí. Voy a quitar esto
porque quería
hacerlo desde cero
con ustedes chicos. Así que empecemos por conseguir esta cadena de conexión y luego saltar de nuevo
a nuestro proyecto. Lo que tenemos que hacer es dejar que
el proyecto ni sobre esta nueva cadena de conexión salte a tu archivo local dot
settings.js JSON. Y aquí, asegúrate de que
el almacenamiento de Azure Web Jobs esté viendo usar el
almacenamiento de desarrollo igual a true. Sea cual sea la forma
mostrada en tiempo de ejecución, sabemos que cuál es ese propósito
o el propósito de eso. Pero pongamos en nuestra cadena de
conexión. Así que sólo voy a
llamarlo Conexión Cosmos DB. Entonces voy a ver dos puntos
y luego poner en el valor que es esa cadena de
conexión primaria que acabamos de
sacar del emulador. Así que volvamos a saltar a nuestro emulador y
crear nuestra base de datos. Entonces en el explorador
de la nueva base de datos, y vamos a ser, digamos creando un blog. Lo que haremos es
asegurarnos de que
tengamos el TIG para el rendimiento de
provisión. Lo dejamos en escala auto. Y lo genial de los
emuladores que sea lo que configures como la configuración aquí, cuando estás haciendo
la versión MLA, a veces obtendrás una estimación lo suficientemente
precisa de cuánto costaría en un
razón particular en Azure. Por lo que es una buena herramienta para solo desarrollo local y
pruebas y prueba de conceptos. Lo llamaremos blog. Y entonces lo que haremos es
darte los nuevos contenedores. Por lo que basta con hacer clic en nuevo contenedor y elegiremos
el ID del contenedor. Contenedor sería postes. Y buena clave de
partición, clave de partición aquí presenta
indicaría valor a usar. Ese será el ID del blog. Por lo que sólo vamos a hacer clic OK. Y luego si dejamos caer publicaciones y mirando
los elementos que ves aquí, por lo que tendrás el
ID de la publicación
y el ID del blog es
la clave de partición. Mientras estamos aquí, lo que
vamos a hacer es poner en una entrada de blog y puedes
poner en unas cuantas entradas de blog, x2i concurso bala aquí. Sólo voy a poner un ID, ID blog, siendo ambos uno. El título, el bloque de
comentarios de contenido, sólo algo para
que parezca. ¿ Cómo son registros de blog reales nuestro documento se vería
como en Cosmos DB. Simplemente puedes
seguir adelante y hacer eso. Simplemente puedes hacer clic en nuevo elemento. Obtendrás esta sección editable y luego haces clic en
Guardar cuando hayas terminado. Y luego al final
de la operación, tu registro obtendrá
algunos metadatos más. No tienes que
preocuparte por eso. Pero así
debe verse el registro en Cosmos DB. Vamos a pasar a nuestra función dot archivo JSON y añadir
la configuración. Ahora hay dos formas de
agregar configuraciones, y
lo voy a hacer de la forma manual, o al menos
mostrarte la forma manual porque en base a las herramientas
y en base a la plantilla del
proyecto que puede haber hecho cola, es posible que
tenga o no esta opción. Por ejemplo, estoy usando las funciones TypeScript,
proyecto o plantilla. Cuando hago clic con el botón derecho, veo la opción ahí para agregar encuadernación. Y lo que esto hace
es que trae poco asistente que me
permite rellenar los diferentes puntos de configuraciones en función del tipo de configuración que estoy haciendo. No todos los tipos de
proyectos tienen eso porque me he dado cuenta de
que no está ahí en un
proyecto de funciones C-sharp o intentó. Así que sólo voy a
mostrarte cómo se vería. En términos generales, ya sea
que esté utilizando TypeScript, Python, Java, C-sharp, etc. En forma de JSON, aquí es donde se configuran todos los
enlaces. Entonces tenemos aquí, tenemos uno para el N. Así que cuando lo veas, significa que
es un enlace de entrada. Cuando veas significa que es
un enlace de salida. Por lo que ya teníamos
dos por defecto, ninguna parte agregando otra. solo puedas seguir adelante
y sumar la coma, iniciando un nuevo bloque de objetos. Y entonces el tipo es
Cosmos DB dirección está en el nombre es documento
de entrada. Podrías cambiar eso
a, podrías
llamarlo blogs, sea cual sea, lo que este nombre va a jugar un papel en el propio código. Por lo que lo llamo
el documento de entrada. Si estuviera utilizando el valor predeterminado, el asistente
habría predeterminado la palabra o
el documento de
entrada de nombre también. No obstante, el
nombre de la base de datos es blog. Creamos una colección
llamada posts. Entonces nombre de base de datos, nombre de
colección. Entonces tenemos conexión
cuerda sentada. Esto va a tener el
mismo nombre que la clínica mostrada arroyo que
habíamos creado antes. Y luego tenemos el ID
y el ID del nodo clave de partición. Aquí se va a referir a qué parámetros de enlace debo usar para obtener los valores de ID. Entonces cuando veo consulta, esto es como un super
global en este punto. Para ver esta consulta va a ser similar a la cadena de consulta
que está llegando. Así que recuerde que la plantilla
predeterminada para una
función activada HTTP tendría la consulta de punto de solicitud
dot el nombre de la variable. O en C-Sharp
estaríamos mirando consulta. Así que más o menos
consulta es justo
lo que reconoce como una variable de cadena de
consulta. Entonces una cadena de consulta
busca una variable llamada ID para la clave de partición, también
estamos usando historias de ID
y lo mismo, no, ambos
están en llaves rizadas porque es más
como un enlace. Parámetro de enlace
en contraposición al valor. Esos son los
parámetros vinculantes que queremos. No.
En realidad podría especificar como una consulta SQL aquí como uno
de los valores clave
consulta SQL que realmente
le permitiría en el contexto de un Cosmos DB y potencialmente otras variables de entrada
relacionadas con la base de datos, enlace de entrada, lo siento,
en realidad podría escribir su declaración SQL aquí para conseguir
que la
instrucción SQL más complicada si lo desea. Pero en este caso lo estamos
manteniendo sencillo. Todo lo que queremos es
pasar en el DNI. Debería ir a buscarlo
desde Cosmos DB para nosotros, y luego podemos
procesarlo después. Ahora solo
te daré una demo rápida de cómo se
vería el mago. Por lo que acaba de hacer clic derecho en la
función en la lista. Decir al encuadernación,
tú eliges , eliges el tipo. Déjame acercar para
que puedas ver mejor. Y entonces como dije,
estamos usando Cosmos DB, tú elegirías el nombre, así que lo dejaré como el predeterminado. Usted elige el nombre
de la base de datos, usted elige el nombre
de la colección. Usted elige entre la conexión, la cadena
de conexión de su Configuración, y luego
le da el ID del documento. Entonces eso habría
sido esta vinculante. Por lo que va a dicho consulta. Sólo para verlo raro
la clave de partición, yo hubiera dicho, ¿De dónde
estoy obteniendo el valor de la
clave de partición? Porque estoy usando el ID para
ambos para la clave de partición. Por eso digo consulta dot ID. No obstante, si fuera un
caso en
el que debería pasar el ID separado de
una clave de partición. Entonces podría decir clave
o lo que sea. Cualquiera que sea el nombre
del parámetro que estoy esperando como
clave de partición que especificaría aquí. Y entonces más o menos sólo vas a pasar y luego
presionaré Escape para cancelar si no quiero que
siga adelante y proceda. Pero una vez que hubiera
oprimido en el temor que consulta
SQL hubiera
generado ese bloque. Independientemente. También habría puesto en la consulta SQL y
habría estado en blanco. Y te aconsejaría que
acabas de quitar eso porque lo
he visto provoca problemas. Los problemas no son
realmente muy claros. Si utilizaras el asistente, habrías obtenido
una consulta SQL. Y habría estado en blanco. Mi consejo sería si
no eres vientos de usar
simplemente quitarlo, puedes proceder
con menos preocupación. Entonces ahora que hemos
configurado o Cosmos DB, hemos configurado el enlace, hemos configurado nuestra cadena de
conexión, vamos a escribir algún código, refactorizado este método para ti. Y fui a
señalar todos los cambios. Me refiero completo, solo puedes
eliminar todo entre el primer registro de contextos y
todo hasta el último, la llave de cierre, a la derecha, así que solo vacía o la función. Entonces se ve así. Lo siento. Deberían verse así.
Cuando termines de vaciarlo, puedes dejar eso si lo deseas. No hay problema. La primera modificación sería
a nuestros parámetros de función. Entonces tenemos los contextos, tenemos la solicitud. Sé que estoy agregando
los documentos de entrada. Entonces este documento de entrada, y como estoy
usando TypeScript, está muy fuertemente escrito. Pero sí te permite
poder perder a alguien
para ver cualquiera aquí. Pero podríamos especificar un tipo de
datos si lo necesitábamos, pero lo dejaré
como lo solicite cualquier contexto. Sé que estoy agregando puntos
de entrada, lo siento. Y luego cualquier código
había ahí desde antes. No, dentro del cuerpo de nuestra función otoño
va a hacer es decir si no entrada documento, entonces decir que no
pudimos encontrar ese ID, entonces podemos registrar ese mensaje, pero luego estaré respondiendo . Entonces contextos
respuesta punto o riesgos, estoy asumiendo que eso significa que la
respuesta es igual a. Y luego podemos especificar un modificador de
estado, el estado. E incluso en pruebas
en partes anteriores de esta escena del curso donde lo
pasamos en un valor equivocado
y aún conseguimos un 200. De acuerdo, a pesar de que no encontró el valor que se
suponía que debía estar ahí, lo cual está mal. Las respuestas HTTP deben
ser muy específicas. Entonces, si habilitas el desarrollo de
API, podrás
apreciarlo. Si no, entonces solo
sepan que necesitan ser específicos. Por lo que hasta mi dicho
5400 aquí está mal. Y así más como un
404404 significa no encontrado. Después de todo, estoy viendo
que no fue telefoneado. 500 sería si fuera como
un error fatal de mi lado, que no es el caso en
este escenario particular. Si no hay documento de entrada y aquí
no se proporcionó nada. Por lo que esto se está
sentando automáticamente y observando un valor vinculante que
entra a través de la solicitud. Eso es mucho lo vinculante
que como se especifica aquí. Si no
llegó ningún enlace Valley, entonces si ese valor vinculante no encontró nada
en la base de datos, porque lo que sucede
es una vez
que ve que automáticamente
va a ir a Cosmos DB y comprobar contra lo que sea
necesario para revisar de nuevo. Entonces si no encontraste nada más o
menos a la vez, así que para cuando llegue aquí, sabrá si has
encontrado algo o no. Está en JavaScript porque
básicamente está diciendo si no lo es, entonces decimos no telefoneado, y luego respondemos con un 404 y el mensaje, no
fue encontrado. Esto en la siguiente línea. Vamos a estar viendo
responder con un 200 y el cuerpo debe contener cualquier contenido que esté
en ese documento de entrada. Muy bien, así
que recuerda que eso es sólo el bloque
JSON de JSON. Entonces veamos cómo se ve
eso. Entonces voy a correr, como de costumbre, voy a usar
Cartero para ejecutar esa prueba. Entonces estoy pasando
ese parámetro,
esa cadena de consulta,
ID es igual a una, y estoy obteniendo esa
respuesta 200 con el contenido de ese ID de documento que no
estaba presente. Veamos. Pasé en diez. Entonces me sale el
cuatrocientos teléfono por el mensaje blog post y no encontré tantos documentos
como habrías agregado, que con cualquier identificación, etc, simplemente entrará
automáticamente. Entonces es entonces cuando vemos
un enlace de entrada. Tan pronto como se ejecuta el
método,
se supone que debo vincular a
este valor en particular. Y es
con el propósito de consultar este recurso en particular o interactuar con este servicio
en particular. En este ejemplo, o el
enlace de entrada está buscando un ID según nuestra
configuración aquí. Y una vez que vea ese ID, o una vez que se llame,
se va a triángulo
hacia el Cosmos DB para obtener el documento coincidente. Muy bien,
continuemos por esta línea de pensamiento y agreguemos
un enlace de salida. Por lo que ya he agregado la configuración y solo
puedes seguir adelante y
pop eso ahí dentro. Entonces un nuevo bloque de objetos. Y entonces el tipo
esta vez es Q, la dirección es Alt. Tenemos el nombre.
Ese es el nombre predeterminado que habría surgido en
el asistente, el nombre de la cola, le
damos un nombre y
luego la conexión, y esta vez necesita conexión de
almacenamiento. Y tenemos el almacenamiento Azure Web
Storage, Web Jobs. Una conexión ahí? No, por contexto para lo que
todo eso está apuntando. Si sacas a la
luz ese Azure Storage Explorer, vas a ver aquí bajo local y adjunto a
una cuentas de almacenamiento. Entonces una cuenta de almacenamiento
es más o menos donde irían tus blobs. Y luego también tiene
colas y mesas. Entonces estamos usando las señales que se formarán
en una cuenta de almacenamiento. Por supuesto, lo estamos
emulando en este momento. Si fuiste y aprovisionaste
sobre esto en Azure, entonces podrás
acceder a él abajo aquí. No obstante, localmente lo tenemos emulado para que podamos ir a
las señales y a la antigua Q, por lo que no tienes que
crear esta Q cuando
ejecutes los comandos que
podemos escribir. Si no existe ya, en
realidad seguirá adelante
y lo creará para ti. Esa es la belleza
de ella. Por lo que no tienes que crearlo en este momento. Sólo
te estoy mostrando dónde cuidar la creación
de la vieja Q. si fueras a
pasar por el mago para esa vinculación el déjame simplemente mostrarte cómo se
vería rápidamente. Entonces digamos que
queríamos un alt vinculante Wu herramientas que
queremos almacenamiento en cola. Entonces
nos pedirían el nombre. Por lo que habrá elemento
de cola de salida a cualquiera que sea el nombre. Probablemente no
le dieron un nombre diferente o realmente no importa
porque eso solo
creará una nueva
sección de cola de todos modos. Pero vamos a darle
un nombre diferente. Y luego
quisiéramos apuntar a la cadena de conexión de almacenamiento, que debido a que estamos haciendo local, estamos viendo usar la configuración de
desarrollo. Y entonces usted sería
capaz de proceder. Y entonces ese bloque
de configuración completo se
habría
generado para ti. Una vez más, tienes
dos formas de hacerlo. Si el asistente no es una opción, entonces siempre
se puede familiarizarse con esa configuración. Llaves. En nuestro trimestre se van
a hacer un ajuste. Estamos dentro de la sección donde no encontramos
nuestras publicaciones de blog. Sólo vamos a enviar
un mensaje a la cola. Sólo va a enviar ese mensaje de respuesta
a la cola. Entonces fui a ver un
contexto, puntos fijaciones. Recordar contextos enlaces de puntos
va a decir contextos. Ve y busca todas las
fijaciones que tienes. Y luego consígueme el elemento de la cola de
salida. Así lo llamamos aquí. Entonces el
mensaje de respuesta es lo que
quiero poner en esa cola
o lo que se pierda. Para que pudieras poner un mensaje
diferente. Es una cola de mensajería, por lo que generalmente se basa en texto. Ese es realmente el único cambio
que tenemos que hacer cuando corremos e intentamos encontrar una entrada de
blog que no existe. Y hasta ahora he estado
probando con diez. Veríamos que sí
recuperamos la respuesta igual. Pero si salto al Explorador de Almacenamiento
y miro ese Alt Q, voy a ver el mensaje o mensajes que se
depositan en la cola. Eso es más o menos agujero. Y alt, Alt binding, enlace
de salida funcionaría. Entonces el enlace de entrada
básicamente piedra en los relojes y dice cuando
obtengo este valor, automáticamente
voy a disparar un gatillo para recuperar algo
o hacer algo. Y los enlaces de salida es, esto es lo que
voy a enviar en este punto de la ejecución. Entonces como vimos que tienes
una serie de opciones de encuadernación. Puedes hacer un SMS, puedes hacer una señal, nuestra Actualización, Actualización Hub. Se puede hacer una rejilla de pecado, que es un servicio de correo electrónico. Y se puede hacer HTTP, lo que hemos estado haciendo. Ese es un tema, los meses de proteína de
unión GTP. Entonces contextos dot raise es
básicamente decir en contexto, ir y conseguir los rayos. Ese es el nombre de ella
es abreviatura de respuesta. Supongo que si quisieras cambiar
el nombre de eso, eso es todo lo que llevaría. Entonces eso es realmente todo para los enlaces de
entrada y salida. Necesitamos dos ejemplos muy
sencillos. Y al hacer estos ejemplos, también
analizamos diferentes herramientas de
terceros que podemos ayudar a usar la ayuda en
nuestras interacciones. Entonces incluso en Visual Studio Code, fui todo el camino
hasta el emulador para el Cosmos DB. Pero una vez
que tienes eso instalado, no necesariamente
tienes que entrar en el
cribado de gestión
real podría hacerlo desde aquí
mismo bajo la
base de datos está sección en Visual Studio Code porque
habrías visto añadir nuestro adjuntar un emulador aquí. ME toqué letal. Te
preguntaría si es core o DB para la API Mongo que seleccionas y automáticamente
codificaría el Cosmos DB local. Entonces esa es una forma agradable, fácil de llegar
a un 100 que la operación tome y cree una base de datos y la colección
desde aquí mismo. También podemos hacer administración
de máquinas virtuales, pero no tenemos
máquinas virtuales en este curso. Y puedes gestionar tus
funciones desde aquí, etcétera Entonces hay herramientas. Una vez que entiendas cómo
funcionan todos juntos, entonces
deberías estar bien. Si estás teniendo algún problema
con tu cuenta de almacenamiento, que podrías uno, solo
te sugeriría que actualices tu Storage Explorer, asegura de que sea la
última versión en retina. Estoy corriendo de 1 a dos. Fui yo estaba en
1.170 algunos temas porque han hecho algunas
actualizaciones desde 1 a dos. Y deberías tener el
mililitro de azurita para el desarrollo local de
Azure Storage instala nadie vez que estés
haciendo esta grabación, probablemente no
tengas estos problemas. Pero si estás trabajando con un conjunto de herramientas
más antiguo y entonces
no estás instalando más fresco de
lo que te aconsejaría simplemente
instalar fresco porque
eso me atrajo. Uno, el emulador de almacenamiento
es lo que habría venido con la versión original
del Explorador de almacenamiento, pero eso no ha
quedado en desuso ya que la azurita es lo nuevo y debió venir con
Visual Estudio 2022. No obstante, para mí, no funcionó del
todo de esa manera. Por cualquier razón, en cambio
uso el npm para instalar. Por lo que ya habrás tenido instalada la versión npm o Node JS it
posteriormente. Si no, puedes
seguir adelante y conseguirlo. Pero para mantenerse al día
con las actividades, si estuvieras usando TypeScript, solo tienes que saber que ya debiste
tenerla instalada. Simplemente puede abrir su
símbolo del sistema o su consola y ejecutar ese instalador
que instaló en segundo plano. Y luego querrías crear una carpeta en esa
ubicación o donde sea, y luego ejecutar este comando para que puedas asegurarte de que se esté
ejecutando en segundo plano. Esto anulará el emulador de Azure
Storage Explorer instalado previamente. Solo te estoy mostrando estas
cosas en caso de que te encuentres problemas porque los
temas son naturales, pero siempre es bueno
tener las soluciones. Puedes hacer todo
eso y luego reiniciar tu Explorador de almacenamiento y luego todo
debería poder conectarte. El síntoma de que no
funciona sería que la función no se ejecutará. Lo que intentas probar. Se hará una pausa. Y otro síntoma
es que cuando
intentas conectarte al emulador, te
contaría
sobre las conexiones se agotan el tiempo de espera nuestro rechazado. Entonces, si estás recibiendo
esos síntomas, entonces definitivamente
necesitas seguir adelante y conocer estas actualizaciones. Dicho esto,
eso es realmente todo para los enlaces de
entrada y salida. Por eso te animo a explorar, crea otras funciones que
crees que serían útiles. Función de temporizador activada
que enviaría un correo electrónico cada mañana o
cada semana, cosas así. Así que adelante y explora.
21. Funciones durables y patrones de la orquestación: Bienvenidos de vuelta chicos. En esta lección
vamos a estar hablando orquestación
duradera
o tratar con funciones. Entonces ese es otro tipo de
función que está disponible hacia hacia
en un 0 funciones. Podemos girarlo fácilmente usando la plantilla y lo
estaremos mirando. Pero antes de que lleguemos, solo
quiero pasar por ello. Un escrito sobre su sobre la documentación de Microsoft
para Funciones duraderas, forma
duradera de piedras, Eso es una extensión
de Azure Functions. Y básicamente utiliza el patrón de orquestador para
seguir a través de las cosas. Así que sólo para el contexto, me forma duradera que se muestra
es uno que se puede utilizar los flujos de trabajo definir
usando código de procedimiento. Por lo que nuestro flujo generalmente es que
quieres hacer esto entonces eso, entonces que entonces que
puedas requerir lunes mientras que la intervención
entre R-naught. Pero el punto es que no se
quiere llegar al paso tres a menos que los pasos 12 se hayan
completado con éxito. Por lo que una función duradera
realmente cargará
el estado de la operación para que
sepa qué decisión
tomar con cada
punto de referencia. También son capaces de llamar a otras funciones u otra
función duradera de forma sincrónica
y asíncrona. Y la salida se
almacena de manera confiable en variables locales. Nuestra historia como
funciones son duraderas y confiables y básicamente checkpoint cada vez que hacen una función o
peso o rendimiento. Entonces cada vez que
se llama a una función y
devuelve su valor, crea tal punto para
que sepa exactamente dónde está en la operación y el
estado nunca se pierde. Siempre está ahí. Siempre está haciendo
un seguimiento de lo que está sucediendo y dónde
está en el proceso. Pueden ser de larga duración, pueden ser segundos, días, meses sin terminar. Entonces tienes diferentes
patrones donde podrías estar llamando a una API de forma
asíncrona una y otra vez. Podrías estar tirando de
una fuente de datos para algo y querías
hacerlo continuamente. Las partes más importantes de esto son los camiones buscados el estado. Y siempre te permite
saber dónde estás
en la operación. Si quieres una mejor
comprensión, al
menos con la teoría, puedes leer a través del
documento es y más. Y se pueden ver algunos de los ejemplos de código en los
diferentes idiomas. Pero lo vamos a estar haciendo
juntos y estaremos usando Visual Studio Code
y una plantilla C-Sharp. Entonces por supuesto saltamos
a Visual Studio Code. Ya he creado una carpeta, un 0 funciones duraderas. Así es como lo llamé. No, saltamos a la pestaña Azure y a la sección de espuma
Océanos. Vamos a estar creando
una nueva función arriba. Entonces llegamos a nuestro mago habitual. Yo, sólo acerque para que
podamos ver con claridad, voy a elegir mi carpeta y luego estoy eligiendo
mi idioma. Entonces quiero nuestro propio tiempo. Por lo que tengo seis instalados. Por supuesto que eliges
tiempo de ejecución de acuerdo a tu contexto y por supuesto la versión sería relativa a esa versión cuatro
goles con dotnet seis. Y entonces quiero que sean capaces formar
derivaciones los hallazgos fácilmente. Siempre puedes empezar a escribir y lo
filtrará. Por lo que quería
funciones duraderas, orquestación. Y dejaré el nombre
predeterminado para no y espacio de nombres predeterminado. Entonces querían saber qué cuenta de almacenamiento
voy a usar el emulador local y permitirle generar un proyecto con él creado y
tenemos nuestro nuevo archivo de código. Sólo voy a
alejar un poco así que
ya estamos familiarizados con
cómo se ve el proyecto. Si miro en el archivo del proyecto
CS, usted ve aquí que tengo esta biblioteca
en particular la cual es muy importante para nuestras operaciones
duraderas. Entonces, si estuvieras usando
Visual Studio, solo revisa dos veces
y asegúrate de que este paquete esté
siendo referenciado. Si no, puedes ir a
buscarlo en nuevas puertas antes de crear la plantilla de función
duradera. Eso está bien. Pero entonces cuando tengamos
nuestro archivo de código, fin de semana, solo mira a través y solo
vamos
a mirar a través y hacer una prueba. No lo voy a modificar
demasiado ni nada. Solo queríamos entender qué exactamente está pasando aquí. Entonces tenemos la anotación que nos
dice o nombre funcional. Este nombre de función tiene, lo siento, esta función tiene una
función llamada
orquestador Ron que está
devolviendo lista de cadena. Y luego está pasando en
un gatillo de orquestación. Y se puede ver aquí
el contexto es de tipo que cogí contexto de
orquestación duradera. Por lo que está rastreando
todas las salidas. Y entonces va
a decir cada salida, el valor que se obtiene de llamar a
esta función con ese valor pasado. Entonces ya ves aquí, es
sólo una función que realmente tiene y esa es
las funciones duraderas, orquestación, C-sharp
One en la partitura. Hola. Es sólo una función
que se define aquí. Pero imagina si agregamos
múltiples funciones a las que querías llamar
una tras otra, solo
podrías definirlas
en ese orden específico. Entonces aquí está diciendo llamar a la función por ese nombre
y darle ese valor. Este valor se va a vincular. Aquí está nuestra función
que está llamando. Y a pesar de
que el nombre está aquí, la definición de la función
se llama sayHello. Y luego se necesita una
actividad desencadena. Por lo que este disparador de actividad es más o
menos
ese parámetro que se va a deshuesar. Se puede trabajar en madera como
un encuadernación de entrada. Podría ser algo para nuestro Cosmos DB o algo más,
ya sabes, sea lo que sea. Hemos pasado por
nuestras fijaciones de pasillo. Por lo que tenemos una apreciación
de cómo podría funcionar eso. Pero una vez que haces eso, una vez que pasas ese valor, entonces llevas a cabo
la operación con base en el valor que entró
y haces lo que sea. Entonces aquí sólo va a
saludar a cada uno de
estos idiomas, cada una de estas ciudades, lo siento. Sólo va a volver
hola con ese volumen. Eso es todo lo que realmente está haciendo. No. La última función
que obtienes aquí es una que se activa
a través de un disparador HTTP. Por lo que sabemos acerca de las funciones
activadas HTTP ya. Entonces eso significa cuando lo llamamos, cuando llamamos a esta
Función Durable y toda esta operación
duradera a través de
ese disparador HTTP, noté que su cliente de libro
está llamando a I cliente de
orquestación duradera y
lo llamas Starter. Entonces se va a iniciar la operación en
almacenado en el ID de instancia. Y todo esto está haciendo
es en empezar, iniciar una nueva asíncrona de
la función duradera, que fue lo que
miramos primero. El gatillo HTTP va a
activar la función duradera. Y la función duradera tiene sus operaciones
esbozadas, desencadenar esto. Que muchos fonetistas
en ese orden almacenaron sus salidas y
hacen un gran retorno. Al final de todo eso, se va a registrar y ver que comenzó con
el ID de instancia. Por lo que el ID de incidencia espera una
vez más que sea un camión que esta operación esté actualmente en curso o esté
terminada o lo que sea. Y puedes usar eso en
tus registros para la analítica. Y luego al
final de todo este disparadores solo van a ver comprobar respuesta
sobresaltada y dar
un estado, el ID de instancia. Entonces el ID de incidencia una vez más
sería la incidencia fuera este libro ¿están sucediendo
la castración? Y luego está revisando la respuesta de estado para
ver ¿está terminada? Estamos bien, lo que sea. Entonces como dije, almacena
el estado de mí explicando, veamos esto en acción. Entonces voy a ejecutar esta función y
fui a depurar de todos modos. Está bien, está en
los que están corriendo. Vas a ver aquí
en los registros que está
detectando que tiene el HTTP arranca para que estos sean método desencadenado
HTTP. Entonces tenemos la iteración de arco, y luego tenemos la actividad. Entonces eso es lo que llamaremos
la función que llama. Es una función de actividad. Y esta es la historia del arte. Es una película. Se trata de una simple espuma
activada HTTP que se muestra. Entonces cuando hago esa llamada, inicia
HTTP y estoy
dispuesto a controlar click, Control click por supuesto lo
habría lanzado en el navegador. Entonces mi navegador inicia, llamó a URL y
sabemos qué pasa cuando lo llamas la URL para
una función activada HTTP. Y en realidad siguió adelante y empieza la
matrícula más oscura, ¿verdad? Entonces a éste se le llamó, pero las API de host. Y luego ves aquí
donde dice hola fue llamado exitosamente y
regresó hola Tokio, hola Seattle, y hola Londres. Eso es evidencia de que
fue llamado con éxito. Pero mira esto también. Déjame ver si
puedo acercar un poco para que podamos ver mejor esos registros. Notarías que
cada vez que
hubiera realizado con éxito esa llamada, se remonta a esa historia
del arte O función. Llama, está
ejecutando la actividad. Después obtenemos el resultado
de la actividad. Entonces nos dice que se ha
ejecutado la actividad. Y luego se remonta a la golosina Arcbest o cada
vez que hace una llamada telefónica, devuelve el control
al orquestador. Y luego por supuesto, usted es el que trabaja en el flujo de trabajo. Por lo que pone en su lógica y su registro y sus decisiones basadas en la salida
o el éxito o falta de su falta de los mismos. Fuera de la función duradera, llamando a la actividad.
Eso es agujero. Puedes usar eso
a tu favor. Cuando llamaste HTTP función
desencadenada r dot URL, notarás es que
obtienes este bloque de JSON. Entonces, ¿utilizas cartero
o utilizaste el navegador? Realmente no importa,
pero lo que estás obteniendo es una consulta de estado obtiene valor URI, que tiene un URI que nos
dará el estado, el estado actual
de la historia del arte. Todo eso. Es ese URI fui a copiar eso y déjame simplemente
colocarlo en una nueva pestaña. Y ya ves aquí dice nombre, obtenemos el nombre de la misma, obtenemos el ID de instancia. Seguro. Obtenemos la pila de tiempo de ejecución. Por lo que se termina el cambio de este
caso. Entonces en cualquier punto en medio
de ella, si quieres ver
cuál es el estado de esta función duradera, ¿
se hace todavía? Esto todavía está en curso, entonces usted
podría simplemente ver, dame ese estatus. Eso es más o menos
para funciones duraderas. Por supuesto, es un ejemplo
realmente sencillo, pero espero que estés viendo las posibilidades y cómo podrías realmente usar este tipo de flujo de trabajo para operaciones más
complejas donde necesitas
camión. ¿Ya se ha hecho? ¿ Cuál es el estado
en medio de ella? Y tomar decisiones basadas en todos salen de una operación
entrando en otra.
22. Crea la API sin Serverless con Azure: Hey chicos, en esta
sección vamos
a bajar a algunas cosas divertidas. Así que hemos estado
mirando algunas muchas teorías, una gran cantidad de conceptos
y apenas llegar a entender el
funcionamiento interno de un 0 funciones. En esta sección, sin embargo, vamos a poner todo
lo que hemos aprendido, la prueba y estaremos
construyendo una API de descanso. Entonces solo estaremos usando funciones,
construyendo puntos finales antiguos. Si no estás familiarizado
con las API de descanso, puedes gotear mis
otros cursos sobre el desarrollo de API de
rest donde realmente
pasamos por
cómo construirlas usando toda una plantilla de
proyecto de desarrollo de
EPA desde Barco de Visual Studio aquí
vamos a estar usando Azure Functs. En este video. Empecemos a empezar. Vamos a estar usando
Visual Studio para éste. Apenas encontremos las zonas de espuma
ASOR. Una vez más, si no lo tienes a la izquierda, siempre
puedes buscar. Y si no lo tienes en absoluto, tendrás que ir
y conseguir el instalador
e instalar la carga de trabajo de Azure. Vamos a conseguir Azure Functs. Y esta a la que voy a llamar, lo
voy a llamar lista
de carrito de compras. Creo que eso es un ejemplo bastante
simple. Contamos con artículos que
Linda
carrito de compras y los
quitamos cuando los tengamos. Podemos simplemente seguir adelante
y crear eso. Y por ahora, voy a hacer una plantilla vacía para
el emulador de almacenamiento. Sí, queríamos usar
un emulador de almacenamiento. Ya fuimos. Eso funciona. Y sólo por
contexto, este punto,
los ceros, el tradicional
Azure Storage, Emily me dijo y no
necesariamente que funcionara correctamente. Y habría
mencionado que
tendrías que usar azi, cierto. Así que para
asegurarte después de haberlo instalado
que se está ejecutando, siempre
puedes ejecutar ese
comando azurite y luego lo verás
iniciando todos los servicios. Entonces si encuentras alguna
dificultad
para conectarte a tu tendencia para usar estos servicios emulados y
enviarlo no se puede conectar, solo ejecuta ese
comando azi, ¿verdad? Muy bien. Sólo voy a tener eso
corriendo en segundo plano. Extranjero. Oh, déjame seguir adelante y
crear esta plantilla vacía. Cuando volvamos, vamos a
empezar con la creación o funciones y mirar el concepto de pasillo
van a colocarlo en términos de construir nuestra API de
descanso como estructura.
23. Configuración de rutas de API: Muy bien, así que
empecemos esto. Voy a agregar función, así que nueva función de Azure. Y dado que estamos tratando
con una estructura similar a la API, entonces todas mis funciones
necesitan ser activadas HTTP. Voy a llamar a esta función de carrito de
compras o carritos de compras API. Llamémoslo así y añadamos. Entonces voy a ir
con el disparador HTTP. Fui a hacerlo anónimo al
menos por ahora. Y haz clic en Agregar. Muy bien, así que en ninguna parte
más funcional, no cuándo empezar a
modificar todavía. En cambio, voy a
seguir adelante y poner en
algunas otras cosas. Entonces voy a
añadir una carpeta nueva, voy a llamarla modelos. Lo que pasa con el
desarrollo de API es que típicamente no lo harás. modelos son detalles que rigen los datos de
vatios con los que expone la interrupción de
slash
para cada solicitud. Voy a tener un modelo de
carrito de compras, en primer lugar. Y fui a conocer a
este interno, interno significa que puede ser
utilizado por cualquier cosa dentro
del mismo proyecto para que pueda
dejarlo como interno o no. Y voy a añadir
algunas propiedades. Acabo de seguir adelante e hice
las tres cláusulas y
puedes simplemente mirarlas y
replicarlas en consecuencia. Por lo que tenemos el artículo del carrito de
compras o un carrito de compras en general. En realidad este debería ser
un artículo de carrito de compras. Permítanme simplemente actualizar el nombre
del expediente en consecuencia. Permítanme simplemente hacer el artículo del carrito tiene un ID que sólo voy
a utilizar como una cadena GUID. Tengo una escritura creada, y luego tengo el nombre del artículo, y luego he recogido
o no, ya sabes qué, como en nuestra
lista de compras, se
quita el artículo una vez que lo hayas
puesto en el carrito. Eso es más o menos lo que es. Significante. Entonces tenemos uno para decreto. Por supuesto, para el Crear. No estoy dispuesto a
exponer todo. No quiero que el usuario
esté a cargo del
ID ni lo cree. Y booleanos default, default. Por lo que no nos perdemos especificar que están necesitando eso del usuario. Estoy asumiendo que aún
no se ha recogido. Todo lo que necesitamos es el
nombre del artículo. Para la actualización. Puede estar cambiando
el nombre del artículo. También podrías estar
cambiando recogido o
solo podría subirlos para solo ver que
sí, está recogido o no. Entonces creo que voy
a mantenerlo sencillo y solo trabajar con eso más adelante cuando nos
conectemos a la base de datos, entonces tendremos que
crear algunos modelos más. Pero para el nodo esto es todo lo
que necesitamos. Una API de descanso. Estos serían lo que llamas detalles o objetos de
transferencia de datos. Una vez más, si esos términos
están familiarizados con ellos, siempre
puedes consultar mi
curso sobre desarrollo de API. No obstante, ha hecho de
nuevo a nuestra función. Entonces lo que vamos a hacer aquí es realmente establecer o raíces. Entonces lo que pasa con las funciones es que por defecto estamos
obteniendo esta clase, sí, y luego estamos obteniendo
una función con R1. En este caso está diciendo que
puedes hacer, puedes hacer post. Realmente no
necesitamos nada que hacer ambos porque en nuestro
resto API sentado, debería ser muy estricto. Uno por publicar uno olvida ya visto en
el nivel muy básico. Pero cada función debe estar cargo de una operación
en ese momento. Entonces como estamos imitando esa estructura API resto
y estándar, nos fuimos a modificar esto. Lo que puedo hacer es
cambiar el nombre de la función. Entonces si esto se supone que tiene que
conseguir artículos de carrito de compras, puedo llamar a esto get
shopping cart items. Muy bien, así que ese es
el nombre de la función. No obstante, la ruta, quiero especificar un valor porque no
quiero no cuando
llamas a la función, hay
que decir slash api slash este nombre de función y luego esa función en una vez más descansa Estándares API tendrían que llamar a este EPI,
una estructura. Pero en base a tu verbo
sobre parámetros potenciales, los valores son posibles a lo largo de
entonces no sabría a
qué función exactamente
te estás refiriendo. Entonces vamos a cambiar el nombre de esta
ruta para que se vea un poco más como se vería nuestra API de
descanso. Voy a llamarlo artículos de carrito de
compras. Entonces tu esperado
porque ya va a ser la slash URL,
api slash y luego
el nombre de la función. Pero cuando especifico
esto como una raíz, entonces no sabría que
desde la solicitud HTTP, cualquier cosa
que entrara en esa raíz después la API de slash irá
a esta función, ¿verdad? Lo siguiente es que no
quiero que esta función publique. Quería recuperar algunos
fueron a quitar ese post. Y sólo para asegurarme de que
todo se vea bien, también
voy a
cambiar el nombre de la función en sí para reflejar lo que es ese nombre de función para que todo se vea un
poco uniforme. Um, por null, voy
a quitar todo esto. Simplemente puedo quitar todo
esto de la función
porque lo que vamos a estar haciendo requiere
todo eso por c. es la
que hay que conseguir. No. Una vez más, estamos
haciendo nuestra API RISD, por lo que eso significa que
necesito una para crear. Así que sólo voy a copiar todo
eso y fui a llamar a éste crear
guardia de compras intento, necesitamos darle ese nombre al
método. Y éste va a ser el post porque
no está recibiendo esta vez. Es crear un
todo yo crear. Deberías usar post y
luego tiene la misma raíz. Entonces va a ser
una solicitud de post a esa EPA o esa ruta HTTP. Este se le solicita
que las raíces HTTP. Podemos hacer lo mismo
por PUT y eliminar. Poner sería para actualizar, eliminar. Nada que se
explique por sí mismo. Carrito de la compra de alimentos que atiendo. O déjame simplemente
asegurarme de que mis métodos sean realmente reflexivos de lo que
va a ser la operación. Así eliminar carrito de compras, yo, uh,
Tim, elimino artículo del carrito de la compra. Esta es una
solicitud PUT y ésta
es una solicitud de eliminación. De acuerdo, una vez más, sólo
estamos mapeando viejas raíces. Pueden cambiar a medida que avanzamos. Podríamos ver algo
que queríamos cambiar. Por supuesto,
vamos a estar cambiando los parámetros cuando nos estamos
enfocando en cada uno. Pero para mí, solo los estoy mapeando para que
tengamos el panorama general. Hay otro tipo
de get porque tal vez queremos unos específicos. Entonces si queríamos un artículo específico del carrito de
compras, entonces será conseguir artículo del
carrito de la compra, no unas decenas. Esto también sería
un consigue poner en la raíz sería
el carro de
compras elemento slash. Y luego vamos a usar un parámetro de enlace para hacerte saber que deben
esperar algo llamado ID. Después. Voy a conseguir todos los artículos que tenemos. Obtiene por ID para demasiado
artículo de carrito de compras aún si quieres calificar, solo di que eres muy claro y sabes que para eso
es. Pero todo lo que es, Esa es la identificación. Tenemos el Create,
que es sólo un post. Y luego tenemos el nodo
PUT y delete que somos buena
idea del panorama general. Cuando volvamos, podemos empezar a trabajar en ellos uno por uno.
24. Configurar POST (crear) de la función de HTTP Azure: Muy bien, así que estamos de vuelta y
vamos a empezar con el crear artículos del carrito de
compras. El primero,
actualizemos o registremos el mensaje. Solo voy a decir crear artículo de
carrito de compras. En la solicitud, sí
tenemos los datos entrando. Ya hemos visto que
esta petición Bueno de miró en el cuerpo, en la URL. Y como es un post, estamos esperando que los datos
entren en el cuerpo. Voy a
empezar con una variable llamada cadena solicita datos, donde vamos a esperar nueva instancia
del lector de stream. Y este lector de flujo
va a entrar o HTTP solicita parámetro
req dot body. Entonces queremos leer,
leer para terminar más bien asíncrono. ¿ Está bien? Ahora que lo hemos leído, esto va a
devolver ese cuerpo JSON. Más o menos queremos
serializarlo en nuestro objeto de artículo carrito de compras. Así que voy a guardar
var item es igual a, voy a usar JSON converts. Json convert viene de nuestra biblioteca blanda de Newton y
eso ya estaba incluido. Aquí. Básicamente es un requisito para las funciones activadas por HTTP. Lo hemos visto, lo hemos
usado antes. Bueno, mi punto es que es como cualquier otro bolsillo es
sólo un paquete NuGet. Entonces si ya sabes cómo
conseguir paquetes y
solo puedes ir al paquete Administrar
NuGet y añadirlo aquí mismo
sin ningún reparto. Queremos GSM convertir dot
de-serializar objeto. Queríamos desserializar en nuestro crear objeto de artículo de
carrito de compras. Y luego le damos
los datos de solicitud, que sabemos que es
JSON en, en la naturaleza. Entonces después de haber
hecho todo eso, quisiéramos editar
alguna base de datos. Nuestra base de datos va a ser de tipo artículo carrito de compras
porque queremos los valores predeterminados. Antes de hacer todo eso, déjame simplemente crear
una nueva instancia. De acuerdo, permítanme cambiar
esto de ítem a datos. Y entonces quise
decir var item aquí es igual a
una nueva instancia del artículo
del carrito de compras. Carrito de compras. Me vuelvo. Este nuevo artículo del carrito de compras
solo va a tomar
ese nombre del artículo, que viene de datos, Data dot item name. Una vez tengamos ese objeto que queríamos ver si
queríamos guardarlo en una base de datos. Todavía no estoy listo para
iniciar toda la conexión
a las cosas de la base de datos. Entonces lo que voy a hacer es
solo usar una lista estática, pero estoy llamando a un carrito de
compras artículos es igual a una nueva instancia. Por lo que aquí abajo solo
diré un carrito de compras, artículos dot Agregar, Nuevo Artículo. Ahora, detengamos
un minuto y reflexionemos sobre la relevancia de
usar esta lista. Lo que los pros y los contras son
obviamente en un entorno real, no
estaría usando
una lista como esta, estaría usando una base de datos. No obstante, todavía no estoy listo para
la base de datos. Entonces vamos a
estar usando la lista. Ahora lo que pasa con la función
arriba es un Mientras se está ejecutando, va a estar
almacenando cualquier dato, cualquier variable
durante el tiempo de ejecución. Entonces mientras estamos probando esto
es perfecto porque podemos llamar a todos los diferentes
métodos y
estaríamos interactuando con
la misma lista. Un entorno de producción. Recuerde que las funciones
son capaces de escalar. Eso significa que si fuera
a implementar esto mientras puede
funcionar para algunos escenarios mientras su
aplicación de función se está ejecutando. Porque recuerda que
en algunas plantas
realmente se apagará realmente se apagará hasta que tengas que volver a
dividirlo. Entonces ese es un peligro, pero para dejar suponer
que eso no
sucede, puede escalar para tener
múltiples instancias. Por lo que entonces
terminarías con múltiples instancias de la lista, lo cual es otro peligro. Entonces claro por
eso queríamos un soporte de base de datos para null. Simplemente usaremos nuestra lista. Después de agregarnos a la lista, entonces
podemos devolver resultados de un
nuevo objeto. Y sólo me fui a
pasar en el nuevo elemento, toda
la lista, pero sólo el
elemento que no fue creado. Eso es realmente. Todos nuestros errores para nuestro artículo
de crear
carrito de compras se han ido. Y ese es el paso uno. Así que cuando
volvamos, iremos a nuestro get's. Sólo vamos a hacer ambas
obtiene en un gol, consigue todo vs conseguir por ID.
25. Configuración de GET HTTP Azure: Muy bien chicos, así que estamos de
vuelta en esta lección, nos vamos a
centrar o conseguir métodos. El primer método,
que es conseguir todos los artículos que uno es
bastante sencillo. Entonces mi mensaje
va a decir get, consiguiendo todos los artículos del carrito de compras. Entonces todo lo que realmente vamos
a tener que hacer es volver. Entonces en este punto realmente
iría a consultar la base de datos
y decir dame, está
bien, En este caso realmente
no tenemos una base de datos, sólo
tenemos esta lista. Entonces todo lo que voy a hacer
es volver, vale, Object Result con la lista. Esa es la lista de los artículos del carrito de
compras. Y una vez que quieras, todo, llegas a todos. Entonces eso es más o menos. Tengo un error aquí. Lo siento, me perdí
mi nuevo regreso, nuevo ok, resultados de objetos. Ahí vamos. Eso es realmente.
Para el get por ID. Es un poco, se necesita un
poco más terminado, ¿verdad? Entonces sí, tenemos la misma regla. Sabemos que éste está
esperando un valor de ID entrando. Por lo que ese valor de ID generalmente
entra como parámetro. En una solicitud HTTP. Podría haber entrado como
el HTTP o parámetro. Voy a agregar un
nuevo parámetro aquí como ID
de flujo de valor. Entonces solo usaré el ID de cadena de
coma va a representar el
valor de ID que
se debe pasar cuando se realice esta llamada a
función. En realidad voy a poner
esto como lo último. Lo pondré después del ID de la secuencia del
registrador. Una vez que se llama a este método, estamos esperando este ID. Ahora una vez que tengamos ese ID, y solo voy a
reescribir el mensaje del registrador, obteniendo el artículo del
carrito de compras con ID. Y luego solo
voy a encapsular el valor id que
se está pasando. Perdón, en
interpolar, para encapsular, sé que tengo eso. Voy a decir var artículo del
carrito de compras es igual a, voy a ir a mi lista de artículos de carrito de
compras. Entonces voy a ver
puntos que nos vendría bien encontrar. Pero voy a apegarme a lo que
me siento más cómodo con primero o default porque
quiero hacer primero o por defecto. Si no lo encuentra, volverá con un nulo. Primera estrella predeterminada y luego Controla puntos para usar
system.in link. Y luego ponemos en nuestra expresión
Lambda. Entonces q dot ID fuera
del carrito de
compras, el artículo del carrito de compras será igual al valor id
que se pasa. Y luego una vez que lo hemos hecho, fui a saber check. Veo que Visual Studio me
está ayudando. Si el artículo del
carrito de compras es nulo, lo que
significa que mientras obviamente
no devolvió nada, entonces tendríamos que devolver un nuevo objeto no telefonado resultados. Entonces eso es un 404. De lo contrario. De lo contrario. De acuerdo, así que aquí hay una
diferencia entre, porque podrías
notar que tienes objetos frente a resultados. Veamos resultados clave antiguos
diferentes a los resultados de Old
Key Object. La diferencia es que cuando
regresas a los resultados de objetos, necesitas poner datos cuando no
estás devolviendo detalle. Entonces en este caso no
tengo datos para volver a su
esperando algún valor. Tengo que decir resultados no
telefonados. Entonces realmente querían
verlo pensando que realmente son los mismos cuatro sobre cuatro, pero justo cuál
usar cuando sea apropiado. Vamos a devolver
un resultado no encontrado. De lo contrario vamos a devolver
un nuevo objeto resultados con ese artículo particular del carrito de
compras en mano para que el color
hubiera conseguido el detalle. Vamos
a revisar rápidamente para obtener múltiples artículos, conseguir carrito de compras I intentos, Todo lo que estoy haciendo es
agotar consulta cotización descotización, ejecutar una consulta contra
la tienda de datos y devolver todo saber lo que
un almacén de datos es por lo menos. Entonces solo estoy devolviendo
lo que hay en esa lista. Cuando queremos por ID, tengo que especificar que quiero que el ID de parámetro sea preso. Ya están ambos consiguen, ya
sabemos las
raíces lo que es éste, recortar IID, de ahí mi
necesidad de la ID. Y entonces una vez tengo
esa idea churn rondo query para encontrar ese
objeto en el Datastore. Si no lo encuentro, devuelvo
no siguiendo los resultados. De lo contrario, devuelvo los
viejos resultados del objeto clave. Eso es realmente todo para los
métodos get de nuestra API de resto.
26. Cómo configurar PUT (actualizar) de HTTP Azure: Muy bien chicos. Así que saltemos
a nuestro PUT estamos mirando la actualización o artículo del carrito de
compras. No. Tenemos que hacer
algunos cambios más porque cuando queremos actualizar, tendríamos que pasar en un ID así
como los datos
para ser actualizados, ¿verdad? Entonces salimos a hacer
lo que hicimos aquí arriba, que es incluir
ID, parámetro ID. Ahí vamos. Y tenemos que actualizar nuestras
raíces porque también necesitamos ese ID de cosas al final
de las raíces de actualización. Entonces podemos mensaje de registro de barras GnG, actualizando el artículo del
carrito de compras con ID. Eso es adentro. No, tenemos que hacer una especie
de operación híbrida. Lo primero que
tenemos que encontrar
los datos para poder repetir
lo que hicimos en el Git. Simplemente seguiré adelante
y veré conseguirme este
artículo del carrito de compras que tiene el id que
se pasó como parámetro. Si no lo encontramos,
entonces volver no telefoneado. Muy bien. A continuación vamos a tener que repetir algo así como lo
que hicimos con el create. Algunos se fueron a analizar a
través de los datos entrantes. Esto sería analizar en el artículo del carrito de compras de
actualización. Y luego en una operación más grande, podríamos usar algo como
ultimate bird para mapear entre los datos entrantes y el artículo del carrito de compras
para hacer las actualizaciones. Pero esta es una operación muy
simple. Entonces lo que voy a hacer es simplemente actualizar el artículo del carrito de
compras, puntos recogidos bandera, y dejar que u sea igual al punto de
datos recogido flux. Entonces lo estás actualizando. Debe significar que
estás cambiando booleano de verdadero
a falso o viceversa. Eso es todo lo que realmente
vamos a estar actualizando. Entonces al final de todo eso, sólo
vamos a volver
bien, resultados objeto. Y acabaré de devolver el artículo
actualizado del carrito de compras. El objeto que es realmente
todo lo que hay a la actualización. Así que vamos a pasar por él de
nuevo porque tipo de tomé código de
diferentes piezas. Así que déjame simplemente explicarle
lo que estamos haciendo. Uno, estamos encontrando el artículo del carrito de
compras con el ID coincidente que se pasó a través del parámetro. Entonces vamos a decir
si no se encontró nada, devolvemos un 404. De lo contrario
seguirá viendo
conseguirme los datos que entraron en la solicitud
porque con un put, los datos estarían en el cuerpo. Es muy similar a cómo
sería en el
cuerpo para el puesto. Dame los datos del cuerpo, la piratería se inclina en el modelo
correspondiente para la actualización. Y luego vamos
a actualizar manualmente. Entonces lo estoy haciendo manualmente
en una operación más grande, como dije,
probablemente usarías automática o, o alguna otra
biblioteca de terceros o para convertir
o tener eso hecho para dos operaciones muy simples son operaciones muy simples,
así que sólo vamos a hacer eso. Y luego devolvemos
el objeto actualizado como parte de los resultados de retorno. Eso es realmente por
configurar el PUT. Cuando volvamos
vamos a hacer nuestra final,
que es la eliminación.
27. Cómo configurar DELETE de la función HTTP Azure: Muy bien, así que comencemos con la operación de eliminación. Entonces creo que llevamos
haciendo esto el tiempo suficiente. Si quieres golpear Pausa
e intentar hacerlo tú mismo, entonces yo lo alentaría. De lo contrario sólo podemos caminar a través de él. Ya
escribí el código. Teníamos configurada el
método delete shopping cart item from before. Lo que no hicimos fue
oficial para enraizar. Por lo que la raíz una vez más
requerirá un valor de ID allí. Y tenemos el identificador de
cadena de parámetros
coincidentes actualizado
el mensaje de registro. Y una vez más,
tratamos de encontrarlo. Si no está ahí, entonces decimos resultados no encontrados. No obstante, si continuamos, decimos quitarlo de la lista del carrito de compras y luego devolver unos resultados clave antiguos. Nota no está bien,
resultados de objetos, ambos Bien, resultado ya que
no hay datos que devolver. Y eso es realmente todo para
el método delete, ¿verdad? Entonces con eso, si acabamos de
hacer Control Shift y B, podemos construir y
asegurarnos de que no
tengamos errores en
ninguna parte de nuestro código. Podemos ver que tenemos
una compilación exitosa 0 errores y podemos continuar. Así que ahora que hemos
sacado a cabo las cuatro de nuestras operaciones, cuando volvamos, solo
pasaremos por algunas pruebas. Utilizamos Postman para llamar a los diferentes puntos finales
y asegurarnos de que esté funcionando o
que nuestras funciones estén funcionando de
la manera que esperamos.
28. Prueba funciones de Azure con PostMan: Muy bien, así que es hora de probar. Hemos hecho todo el trabajo duro. Pongámoslo a
prueba para que solo podamos hacer clic en el botón de inicio aquí en Visual Studio para empezar a hablar. O si ya estás usando Visual
Studio Code, ya sabes cómo ejecutar eso. Y luego en nuestra consola, que acompaña a la ejecución, obtenemos una lista de
todas las funciones, lo que las vemos todas por nombre, gracias al
atributo de nombre de función que agregamos. Pero también notamos que
cada uno tiene una raíz. Sí, las reglas se
habrían
basado en el nombre que se
proporcionó por defecto. No obstante, anulamos eso y
vamos a poner en nuestras propias raíces. Y ahí se puede
ver cómo se puede llamar a cada método de
acuerdo a la ruta. Si probamos con cartero o
cualquier otra herramienta de prueba HTTP, y digo, está bien, llama a los métodos get all. Aviso para obtener todos los artículos del carrito de
compras, solo
llamaré a esa URL para que en realidad puedas
simplemente
resaltarlo y luego copiarlo y pegarlo
en Cartero click Ejecutar. Y luego verías aquí
que conseguirías esas cosas, esas 200, de acuerdo. Pero nada porque no
hemos puesto ningún dato. Por supuesto, también verías que
el registro se actualiza. Así que conseguir todo el
carrito de compras intento. Y luego fue ejecutado. En ese punto en el tiempo. Vamos a tratar de crear un
nuevo carrito de compras artículos. Por lo que simplemente cambiaría
este método para publicar. Y luego en el cuerpo
después de asegurarme que mande algún JSON, por lo que cambia hasta RA y
luego James F a G está encendido. ¿ Y qué precisamos? Con el fin de crear? Sólo estamos aceptando
el nombre del artículo. Por lo que voy a ver el nombre
del artículo luego colon. Y recuerda poner
entre comillas, luego colon, y luego esto
sería solo de Cartero. Entonces cuando haga clic en Enviar, vamos a ver. Entonces lo verías contesta
con el IID recién creado, esa marca de tiempo, el nombre del elemento, y si se recoge,
eso es falso. Si vuelvo a intentar mi gueto original, solo abre una nueva pestaña, usa lo mismo tus balas
estaban usando un get y lo envío. Entonces estoy viendo que me estoy consiguiendo buck ese elemento
de la lista. Si intento mi otro get, éste requiere el ID. Así que fui a ver una slash y
luego pasar ese valor de ID, copiarlo, pegarlo allí, entonces solo debería recuperar
un objeto. Ahí vamos. Creo que esto
está funcionando bien, déjame probar la actualización. Así que solo estoy creando
tinas en consecuencia. Así que una vez más, tenemos esta URL, pegarla ahí, o en realidad
debería haber usado esta
URL va para las actualizaciones. Sí necesitamos ese valor de ID, vamos a hacer un puesto. Y luego dentro de la
solicitud cuerpo crudo JSON, voy a ver que recogido no es verdadero
colon y el valor verdadero. Déjame mandar, ya ves
aquí regresa, se
calentarán objeto Latina
sabe que no es cierto. Entonces si vuelvo al regalo, consigue que todos envíen de nuevo, entonces estoy
recuperando lo actualizado. Como dije, si
llamas a estas funciones dentro de la misma sesión, fui a llamarla sesión. Entonces estamos ejecutando, ¿verdad? No, estamos llamando uno tras otro, uno
tras otro. Se está actualizando la
misma lista cada vez. Entonces es por eso que estás
obteniendo esos resultados. Por supuesto, si nos
detenemos y reiniciamos, entonces esa lista se va
a vaciar. Así que es de la misma
manera Esa es una espuma aparece una vez que se está ejecutando. Si estás usando esa
lista, entonces no hay problema. Una vez que las habilidades de TI sean vientos hacia abajo y luego como el respaldo del
viento después, solo
sabes que
vas a perder esos datos. Entonces no tienes que tener
cuidado con eso. Pero más adelante, una vez más,
vamos a estar mirando el
uso de
almacenamiento persistente en forma de un 0 mesas son cualquier otro medio de
almacenamiento que prefieras. Entonces eso es realmente todo. Entonces el último que
voy a hacer es que elimine. Entonces usaré esta URL por aquí. Y esta vez el tipo de
método es delete. Tenemos el DNI y todo. No necesito un cuerpo sujeto responde a un
niño de 100 años y todo el contenido. Si vuelvo e
intento ejecutar una consulta y
nada vuelve, si recreo, entonces
obtengo un nuevo ID. Y luego si traté de volver a mirar ahí, lo veo todo. Eso es literalmente todo lo que hay, cita sin cotización todo lo que
hay a nuestra API de descanso. Cuanto más difícil se vuelve este Bs basado en sus
necesidades de negocio viñetas
al final del día, esto es lo fácil que es crear una API de descanso entera usando
solo Azure Funcments.
29. Funciones de prueba con la interfaz de usuario: Ahora una parte fundamental de
cualquier API es el desarrollo, es cómo interactúa
con las aplicaciones cliente. Eso puede ser una aplicación móvil, puede
ser una web up, etcétera En este caso, hice
un simple blades están arriba donde el código gobernado para interactuar con los
diferentes puntos finales de nuestra z son funciones api. Mientras lo ejecuta. que tenemos todas las
raíces ya están. Todo lo que hice fue reformar
la página de datos de Fitch desde la típica plantilla
blazer up. Y lo que hace es probar desde láser cuando te ponen en
un ítem aquí y dicen Create, realidad se actualizará
a veces lo que sucede es que cuando interrumpas
con la consola aquí, hará
que positivo. Simplemente presiona enter,
va a continuar. Ya ves aquí
realmente hizo la llamada crear artículo carrito de compras. Y entonces necesita recuperarse. Y ahí está nuestro nuevo artículo de
carrito de compras. Si digo una prueba de blazer uno, y déjame simplemente asegurarme de que la consola
sepa que debería funcionar normalmente cuando hago clic Crear actualizaciones y
tuercas bajas en la lista. Si hago clic en el tick
para recogido, verá aquí que
llamará al puerto. Aquí vamos. Entonces ponlo, lo actualizó. Y luego si elimino, una vez más, sigo
interactuando con sus pausas. Cuando hago clic en Eliminar, debe eliminar el elemento. Déjame intentarlo de
nuevo. Ahí vamos. Entonces déjame crear unos cuantos más
y luego déjame borrarlos. Cada vez que haga clic en Eliminar, lo
verás actualizando
la interfaz. Así que solo te voy a guiar por el código que
escribí para esto. En realidad no es un curso de blazer. No estoy enseñando en última instancia el bizarro up de otros
cursos para eso. Pero justo en el contexto, les voy a mostrar que
desde el punto de vista blazer, no sabe ni le importa cuál es
la infraestructura subyacente
de esta API de resto. Sólo va a estar haciendo, ¿hay cosas relativas
a nuestra API de descanso? Creé un proyecto completamente nuevo y fue sólo un
placentero Asamblea Web arriba. Maneras sencillas de hacer eso. Solo tienes que ir a la solución, haz clic con el botón derecho en Agregar Nuevo Proyecto. Buscas blazer WebAsembly up. Estoy usando dotnet busca seguir
adelante y crearlo. Y entonces por defecto
vas a conseguir alguna dirección aquí, dirección
BCE con
ambientalista que se le dice que sea
la dirección base de donde sé que nuestras funciones arriba
estarán transmitiendo. Muy bien, entonces sabemos
que ese es el puerto. Habríamos hecho algunas
pruebas con Cartero. Sabemos que esa es nuestra API
estándar escribió, ¿de acuerdo? Entonces esa es la dirección base para el cliente HTTP que se utiliza
en nuestras creencias están arriba. Otra cosa que
quería señalar es que teníamos que configurar núcleos. Cores es
referencia de origen cruzado. Vale, lo siento. Aquí está la definición. Por lo que el intercambio de recursos de
origen cruzado. Ahí vamos. Ese es el protocolo
o conjuntos de reglas que rigen tu API interactúa con recursos que
no están en el mismo servidor. Mientras estábamos
ejecutando la
aplicación de función anticipando con post-dinero
no vio nuestro problema. No obstante, cuando estoy transmitiendo, están enviando una solicitud desde una fuente externa que estos blades están arriba
cuando se está ejecutando, se está ejecutando en
un puerto diferente. Por lo tanto, se ve como una aplicación completamente
diferente, entonces
en realidad la rechazaría. Entonces esto es todo lo que habilitamos CORS en un Azure Functions up en nuestro archivo JSON de configuración de puntos
locales. Vamos a hospedar y abrimos un nuevo bloque de objetos donde
dijimos núcleos para ser estrella, es
decir, aceptar todas las solicitudes. No tienen
ninguna restricción. Por supuesto, cuando lo
implementemos en Azure, eso será manejado
por el lado Azure. Pero para una configuración local, tenemos que asegurarnos de
que esté en su lugar. Puedes seguir adelante y hacer eso. También habría replicado
la carpeta de modelos, así que solo los rehice, no escuches en las cuchillas están arriba. Y en cambio actualizé el espacio de
nombres al carrito de compras, al
menos dot blazer dot dot modelos como el nombre de la
app es carrito de compras, al
menos dot blazer. Tendrás los modelos o
acceso a los módulos ahí. Otra cosa que
hubiera hecho sería actualizar, por
supuesto, el Fitch
data dot racer. O si quisieras hacer un
nuevo pH, eso depende de ti. Pero acabo de hacer todo en
una página y solo te voy a guiar a través del
código que se escribió. El título de la página, tenemos
las etiquetas h1 y la p. Eso es sólo semántica. No tienes que hacer eso. Entonces tengo la
forma de edición de top donde
tengo ese texto de entrada el
cual estoy vinculando a un objeto llamado item create y aceptando
el nombre del elemento. Entonces aquí en el formulario de edición el
modelo es Item Create y en valid submit vamos a
llamar al método Handler create. Entonces tengo este
botón de enviar para mi formulario de edición. Crear artículo es a menudo
un artículo de carrito de compras. Y solo tengo una
instancia de eso ahí y manejado crear. Se va a ver sólo respuesta
siempre el cliente HTTP. ¿ Qué hace HTTP que dice
cliente HTTP que estoy
inyectando en mi componente? Así que eso ya hubiera estado ahí porque voy a
buscar datos es en realidad ensamblar de cómo
se puede interactuar con cliente
HTTP para que no
tenga que poner eso ahí. Ya debería estar ahí. Pero lo que estoy haciendo en el
handle create es vaciar http dot post como JSON es hundir, y luego publicar el artículo del carrito de
compras. Y en realidad acabo de notar
que esto está mal. Eso debería ser crear artículo de carrito de
compras realmente no
importa en el
gran esquema de las cosas, pero vamos a trabajar con él. Por lo que debe ser crea artículo
carrito de compras. Por lo que estoy publicando un cuerpo JSON o serialización
JSON de artículo
creativo del carrito de compras. Y va a abordar api
slash artículos del carrito de compras. Por lo que este artículo del
carrito de compras de la API slash acaba ser
anexado a nuestra URL base
aquí en el program.cs. Entonces estamos enviando sobre
el elemento crear objeto. Entonces decimos si es un éxito puntuado o clave o ningún contenido
o lo que sea que hayamos visto, sabemos que los diferentes códigos
representan cosas diferentes. Entonces una vieja respuesta clave
son exitosas, entonces simplemente les llamamos un
peso en la asíncrona inicializada, que básicamente simplemente
vuelve a dibujar todo el tema. Para la asíncrona no inicializada, solo
vemos artículos que es una matriz de artículos de
carrito de compras es igual a http.get de artículo
asíncrono del carrito de compras JSON en forma de RE. Y ahí tenemos la misma raíz. No voy a salir todo con arquitecturas y mejores prácticas en este ejemplo en particular, solo
te
estoy mostrando una victoria rápida. Si quieres todo
eso puedes hacer malabares. Mis creencias
son cursos no inicializados. Asíncrono obtiene todos los elementos y los pone dentro
de este objeto, cual está diseñado para los elementos manejados
crear básicamente solo dice publicar lo que los datos
vinieron como herramienta JSON, esta endpoint, y luego seguir
adelante y actualizar una vez
que todo tenga éxito, sé que el resto de ella
solo sería yo cambiando el
código de muestra de los pronósticos meteorológicos que estaba ahí y solo usar ítems
son lo que he dicho para los costos y cambiar los encabezados de la mesa según mis nuevos encabezados de mesa
basados en los nuevos datos. Entonces, para cada elemento en los artículos, recuerda los artículos que
provienen de nuestra llamada API. Sólo estoy actualizando o mostrando, lo siento, los diferentes valores. No, para la sección casilla de verificación, tengo una entrada que
es de tipo checkbox. Sólo le doy una clase donde
se ve un poco agradable. El valor va a
estar vinculado a cualquier artículo.quantity es un onchange. Este es un evento que
significa que cada vez
que cambie el valor
de la chatbox, quiero llamar a este
método casilla de verificación
haciendo clic pasando el elemento y pasar
el valor de los eventos. Entonces porque sabe que
es una casilla de verificación, ese evento va
a tener datos, era verdadero o
falso, cambio, etcétera Donde la política en ese valor. Cuando se llama a ese
método de casilla de verificación hecho clic, se va a tomar ese artículo del carrito de la compra y
esto podría ser fácilmente, probablemente realmente
debería ser la actualización. Los puertos, cualquiera que sea el tipo de
objeto habíamos usado sus múltiples cursos con el choque aquí porque esto es de tipo
carrito de compras que intento. Así que solo
te estoy mostrando que estoy tomando aquí
el objeto del
artículo del carrito de compras. Estoy tomando el valor de
cheque como mi, ya que mi valor args evento tendrá que convertirlo en un
objeto en este punto. Entonces formulo mi actualización objeto de artículo de carrito de
compras y conjunto dividido que
sé que necesita ser establecido. Y luego fui a enviar más de g sun async,
ese tipo de objeto. Y voy a estar llamando a URL y luego usando la
interpolación, solo
estoy pegando
item.name DID. Entonces por eso era importante
pasar por encima del ítem. Porque al hacer la
actualización para satisfacer necesitan datos, tanto el artículo original como
yo solo podemos usar el ID. Entonces estoy pasando por encima de ese ID y todo
el objeto con los datos que
representan la actualización. Y luego si fue
exitoso, entonces vuelves a dibujar. Entonces para la eliminación, tenemos un botón simple. Dale alguna clase bootstrap, y luego onclick tenemos evento de código
similar y
posible con el ítem. Por lo que es posible los detalles
capaces de ítem para ser borrado a pesar de que en
realidad solo necesitamos ese ID. Por lo que sólo vamos
a decir bonos de virus, http dot eliminar async, no como JSON porque no
hay JSON que se pase por encima de ella
datos razonables para analizar, solo eliminar. Y el URI sería APIs, ese carrito de compras intento o item.name DID y
luego volvemos a dibujar. Es por eso que se obtiene eso. Empieza en tiempo real, mira
y siente la interfaz de usuario porque
sigo redibujando cada vez
que la operación fue exitosa. Eso es realmente. Para los sangrados están
interactuando con la API. Por supuesto, se puede
complicar un poco más en función de
sus necesidades o lo que sea. Por supuesto, la API podría
ser un poco más complicada. Pero una vez más,
sólo estamos tomando unas victorias rápidas. Y una vez que entiendas
estos conceptos centrales, siempre se
puede construir sobre eso
para sus futuras operaciones. Eso es todo. Puedes golpear pausa en los diferentes puntos
y replicar el código. Acabo de desplazarse a través de la suficiente
lentitud como para que puedas golpear pausa en
los diferentes intervalos. Se puede ver todo el código. Y te animaría a construir más endpoints o
más comportamientos en la API y construir más
páginas en componentes, interactuar con dicha API. Una vez más,
asegúrate de actualizar tu dirección base y
asegúrate habilitar la configuración del curso en la API para
probarlas simultáneamente. No quieres
ir a la solución, haz clic derecho ir a Propiedades. Y luego querrías seleccionar
múltiples proyectos de puesta en marcha. Puedes poner tanto
el inicio como ambos, comenzar con una debug, cualquiera que prefieras, base en el proceso artístico. Eso es realmente todo para
probar usando una interfaz de usuario.
30. Interactúa con CosmosDB: Bienvenidos de vuelta chicos. En esta lección, vamos
a estar pasando por algunos de los cambios necesarios para empezar a
hablar con la base de datos. La base de datos que se
seleccionan para este ejercicio es una base de datos 0 Cosmos DB. Ya tenemos alguna
experiencia lidiando con eso. Nos fijamos en usarlo como un disparador de entrada o enlace
de entrada más bien. Y entero,
acabamos de pasar los datos y se comunicará
con el Cosmos DB. En esto, vamos a estar tomando un enfoque ligeramente
diferente para simplemente usar enlaces de entrada
porque hay ciertas operaciones
que queremos hacer. Creo que es mixto. Podemos escribir el código tres
tipos diferentes de ondas si
usamos el enlace de entrada, porque en base a la situación, la cancha va
a verse diferente o podemos ser un poco
más consistentes . Por lo que voy a ir más por
la consistencia en esta situación. Y
les voy a mostrar cómo se puede uno configura su función para
inyección de dependencia a Hawaii, usa el cliente Cosmos DB para
esa inyección total, que se puede utilizar por
todo el lugar
en cualquier lugar else en
cualquier otra función. Para empezar, quiero que vayamos
a nuevos gets. Simplemente haga clic derecho en su proyecto de
funciones y el objetivo de administrar
imágenes y obtener éste. Microsoft construyó un 0 dot empleos web dot extensión dot Cosmos DB. Entonces este paquete realmente te
da una API para Cosmos DB así
como Table Storage, pero nos centraremos
en Cosmos DB en este momento. Lo siguiente es crear una clase de startup conocida como clase de
inicio sería similar a lo que ves en
cada aplicación dotnet Core. Entonces tenemos un blazer aquí arriba. En dotnet busca. Parece un poco más condensada de lo que probablemente
estás acostumbrado, pero esto es más o menos
esa clase de startup que se
condensan en un solo archivo. Esto básicamente bootstraps y casi servicios para ser fácilmente. Estoy disponible para
inyección de dependencia en cualquier lugar la aplicación una vez que
la aplicación esté ejecutando R12 escribiendo código. Entonces eso es lo que hace. Entonces creamos los nuestros propios, lo
estoy llamando startup.js. Y solo te voy a mostrar
el código y te guiaré por cada línea para que tengamos una apreciación completa
de lo que está sucediendo. Así que simplemente haz clic derecho en
tu función hacia arriba, agrega una nueva clase llamada Startup. No CSU podría recibir un
error o algún comentario que estás creando un
tipo de función que ya existe. Eso está bien. Simplemente puedes borrar
todo eso o
cualquier cosa que no coincida con
lo que tengo en mi pantalla. Sólo tienes que seguir adelante y
carro en consecuencia. Tenemos el primer ensamblaje de
anotación, dos puntos, y estamos haciendo
un inicio de funciones. Va a ser
tipo de startup. Es posible que tengas que incluir algunas referencias faltantes a
medida que avanza, por lo que solo haces eso en consecuencia. O los namespaces son lista de carrito de
compras. Eso ya lo sabemos. Y luego tenemos, o lo sentimos, nuestra clase, startup, que está heredando de
las funciones de inicio. Entonces tenemos privados
que desengrasado solo yo configuración
root configuración es igual a un nuevo constructor de
configuración donde estamos sentados la base para ser el entorno directorio
actual, ese es el directorio
del proyecto. Estamos agregando nuestro archivo JSON
arriba settings.js IN true, pero luego por supuesto el
local settings.js en. Entonces sabemos cómo
acceder a eso más adelante. Y luego estamos agregando variables de
entorno y luego solo construimos. Entonces por supuesto te daría un error diciendo que necesitas
implementar la clase abstracta, que es
inicio de funciones y hacer eso generaría este stub
método para ti. Es un vacío de
anulación pública, configure. Todo eso se
genera para ti, tanto dentro de ese método, lo que queremos hacer es decir constructor dot servicios
y agregar un singleton. Un singleton significa
más o menos que
lo que estés agregando aquí
va a ser acceso. Una instancia va a ser accesible garganta
su aplicación. Entonces una conexiones o Cosmos DB, se usará
la misma conexión con el
cosmos DB cada vez que accedamos a esta
dependencia, más o menos ¿verdad? Si quieres saber más sobre inyección de
dependencia y trabajos de
holdout
contra una mina
de oro, claro es por lo que voy
a pasar con este nulo. Entonces var
cadena de conexión es igual a y luego se ve
en la configuración. Recuerde la configuración compilar
todos estos elementos, incluido nuestro archivo de configuración. Por lo que ya tenemos
ese ajuste como archivo, aunque el
nombre
sea diferente, sabrá contextualmente dónde encontrar lo que estamos viendo configuración y conseguirme la conexión Cosmos
DB, que es como lo llamamos en nuestro archivo de configuración local, ¿verdad? Por lo que ya miramos esto. Estoy usando el emulador
y te mostraré en unos cuantos la base de datos
que hemos creado. Así que solo
asegúrate de agregar esa clave, conexión
Cosmos DB,
y luego
agregamos esa
clave emulador en consecuencia. Entonces estamos llamando a
esa conexión DB y luego estamos viendo
si es nula o vacía, luego lanza una excepción. De lo contrario, devuelva
una nueva instancia
del constructor de fuerza cosmos con la cadena de conexión dot build. Entonces esa es nuestra clase de startup
que hemos configurado una
vez más para que podamos inyectar
las dependencias que hayamos definido. Sólo definimos uno que
sea para el cliente cosmos. No me dejes saltar
a nuestro Cosmos DB. Ya tenemos algo de
experiencia con esto. Este es nuestros mililitros. Puedes seguir adelante e ir a tu emulador y
crear este nuevo. Por lo que tenemos una nueva base de datos que estoy llamando artículos del carrito de compras. Entonces mi
nombre de colección es artículos. Y para mi clave o
por una clave de partición, estoy usando esta palabra categorías. Entonces vamos a estar haciendo algunos cambios a los
modelos como los tenemos. Pero recuerda que a
las teclas de partición les gusta una búsqueda de alta velocidad. Entonces es algo así como índices, tus registros o tus documentos, cita sin cotización, para que
se pueda encontrar más rápido. Por lo que estamos agregando una nueva propiedad llamada categoría,
lo cual tiene sentido. Es una lista de artículos de carrito de compras. ¿ Cuál es la categoría? ¿ Es comida, es ropa? ¿ Es una necesidad, es no
quiero, etcétera Entonces con eso, podemos
construir nuestro tejido en los datos y
acelerar la búsqueda, acelerar las operaciones contra toda
esta base de datos. Puedes seguir adelante y hacer eso. Después de haber creado la
base de datos que esos
miran los cambios a
realizar en nuestros modelos. Entonces el único cambio que estoy haciendo es realmente al artículo del carrito de
compras. Y estoy haciendo crear un GNS3. Déjame ir primero con un artículo de
carrito de compras. Artículo del carrito de compras, uno
de hacerlo heredar de la entidad de tabla que es
cortesía de esta nueva clase, Microsoft dot windows,
dot storage dot table, que viene en nuestro nuevo paquete. Para que pueda dejar que herede. No necesariamente tienes que hacerlo, pero la cotización de beneficio
descotizar fuera de dejar que herede es que la clase o el modelo
sabrán realmente tener acceso a todas las propiedades que obtiene tocado
cada vez que se almacena nuestro documento para ver
muchas otras etiquetas Meta. Probablemente
los notaste desde cuando hicimos el ejercicio del blog. Hay una serie de otras etiquetas
Meta que se adjunta. Así que una vez que se hereda
de dos entidades
en realidad será capaz de
analizarlos. No, también he agregado anotación de propiedades
JSON
a nuestra propiedad id req. Lo siento, esta propiedad JSON
básicamente ve que, sí, sé que soy capital
yo en C-Sharp mundo, tanto en JSON Web, por favor conocerme una id común. la relevancia de esto es Cosmos DB está buscando para un
inmueble con identificación común. Cuando nos sentemos ese valor de ID, en realidad
obtendrás
un montón de flechas. Puedes probarlo tú mismo. En realidad tuve un pequeño
campo con Hillary. Recuerda eso, que
necesitaba poner esto ahí. Por lo que en realidad puedes intentarlo. Después de que te muestro
todo el código y todo lo que
intenté hacer son crear, necesito ver los
errores que obtienes. Te quejarás de
que le falta
la columna de identificación a
pesar de que está ahí. Entonces solo lo vemos
cuando estás en JSON, por favor identifíquense como identificación común y luego Cosmos DB
podrá verlo y ver,
vale, veo las prisiones de valor
id. Por supuesto que no estamos solos en Cosmos DB para generar el ID. Estamos haciendo eso. Por lo que eso sigue siendo lo mismo. También he agregado otra
propiedad llamada categoría. Como acabo de decir, la categoría va a ser nuestra clave de
partición. Y al igual que con el ID, tenemos que hacerle saber que
es una categoría de claves comunes. Por supuesto, esto solo necesita
igualar la regla del año entero
con la clave de partición. Así que sólo voy a
dejarlo así. Capital C para el
comando codebook Z para JSON. Entonces dentro de lo creado, también
estoy poniendo
en esa categoría. Entonces cuando estás
creando el elemento, ves el nombre
y la categoría. Y por supuesto que hay
mejores formas de hacerlo. Podrías usar enums,
podrías usar una lista selecta, etcétera Pero por ahora solo vamos a mantenerla simple solo para que podamos entender el
ejercicio en el momento cuatro, las actualizaciones que en
realidad es algo opcional. Así que en realidad lo
voy a sacar
y lo llamaré un código
cuando lleguemos allí. Entonces voy a quitar eso para
que la actualización no cambie. Por lo que sólo estamos agregando
categoría aquí. Y para el artículo del carrito de compras, estamos agregando que los estudiantes de Andy
en propiedad así como la propiedad JSON por encima de la identificación. Está viniendo
bien y vamos a
saltar a nuestra función. No, te darías cuenta de uno, he eliminado todas las palabras clave
estáticas, públicas. Esta era clase estática pública. Lo eliminé porque las clases
estáticas no pueden
tener constructores. Necesitamos el constructo
de inyección oral. Y otra cosa es que lo siento, acabo de quitar esa línea. Entonces si empezaste a aprovechar nuevo sin consideración,
te pido disculpas. Entonces otra cosa es que no
podemos tener métodos estáticos porque tenemos que modificar
el código ahí dentro. Y eso significa que tenemos
que usar lo privado. Campos que van a entrar. Mientras explicamos lo que está
pasando aquí, solo te
estoy mostrando
el erudito que obtendrías si levantas el
método es estático, así que no hay clase estática y
no hay métodos estáticos. Muy bien,
pasemos línea por
línea y veamos qué
está pasando aquí. Así que en primer lugar, estoy
inyectando el cosmos afirma que el cliente del cosmos
viene desde nuestro inicio. Por lo que esto está devolviendo
una instancia o la dependencia necesaria para que
accedamos al cliente Cosmos. Así que sólo voy a
escribir un constructor círculo para constructores
CTO, nuestra tina, tina. Y entonces en
realidad se podría simplemente escribir en los clientes del cosmos. Y luego usando
puntos de Control se ofrecerá
inicializar e inyectar
el campo por ti. Así que voy a mostrar
un atajos de teclado. Puedes escribirlo rápidamente. Queríamos cliente privado del cosmos de
solo lectura. Y eso se inicializa
dentro de nuestro constructor. Y luego tenemos un
contenedor privado, contenedor de documentos. Y entonces vamos a
ver contenedor de documentos es igual a Cosmos client.stop container por el nombre artículos del carrito de
compras con los compañeros en artículos. Entonces, si pasas el cursor sobre eso, verás que pide el ID de base de datos y
el ID del contenedor. Con esas herramientas. Con el contenedor de documentos, ahora
puedo acceder a la base de datos, los ítems hechos a todas
las operaciones que necesito. Estaba haciendo el
punto de que encuentro esto un poco más
consistente que ver con unas pocas líneas que escribir en disparadores
individuales son código
vinculante por método. Lo que habría pasado
es que tendría que escribir Cosmos DB. Después del
inicializador Cosmos DB para
tener los valores de
cadena de conexión. Voy a hacer eso rápido
en general como se
vería . Eso es todo. Entonces así es como se
vería nuestra notación como
un enlace de entrada. Entonces cuando miramos los
enlaces de entrada previamente, lo
hicimos con el proyecto
TypeScript, donde en realidad modificamos la
función dot js archivo JSON. No hay ninguna función
que el archivo JSON que se genere para nosotros cuando estamos
utilizando los proyectos C-sharp. Por lo que en realidad ponemos en las
fijaciones y disparadores
aquí mismo en nuestra función
Como en rotación. Entonces diría Cosmos DB, cuál es el nombre de la base de datos, cuál es el nombre de la colección, y luego la cadena de conexión, que por supuesto solo apuntaría al nombre en la configuración de la aplicación. Y entonces
lo llamaríamos cliente de documentos, cliente sabe
en base a la situación, podría terminar usando
diferentes tipos de datos aquí para conseguir todos los artículos. Usaríamos el cliente y luego el código de consulta se
vería así. Muy bien, Así que en primer lugar, tendríamos que encontrar un URI o generar un URI para
la colección. Por lo que voy a decir URI o
Factory dot crear, lo siento, crear URI de
colección de documentos, y luego le damos esos. Entonces aquí estás viendo que estoy repitiendo estas cuerdas por
todo el lugar. Probablemente
querrías pensar usar una constante más una
constante para el nombre de la
base de datos o preocupación por el nombre de la
colección, etcétera Sin soportar
eso, simplemente
pasaríamos el
ID de la base de datos y la colección. Y entonces
diríamos que documento consulta relativa al tipo de datos
donde un barco a consultar. Y luego cliente
documentado cliente dot crear consulta de documento. Y luego pasamos en el
URI como consulta de documento. Y todos estos se pueden extender al hub donde
la cláusula
es igual a incluso decir como si estuviéramos y luego poniendo en alguna condición por la cual
querías encontrar los documentos. Podría ser que
quieras encontrar o hacer como una búsqueda que útil para algo así
como una búsqueda. De cualquier manera, esto devolvería
todos los documentos y luego diríamos mientras la
consulta tiene más resultados,
nos preguntaríamos a través de
ellos y luego potencialmente rellena al menos que
tendríamos la intención de regresar. Entonces teníamos esa lista de top. He quitado eso también. Y solo lo estoy usando
aquí localmente. Por lo que en realidad solo
añadirías cada elemento a la lista. Eso fue lo que estabas haciendo, no se tomaron ese
enfoque solo
te estoy mostrando porque es bueno
conocer tus opciones. Entonces voy a
comentar eso, y voy a
comentar esto. Entonces al menos cuando miras
el código fuente más tarde, puedes ver que esto
habría correspondido
con ese código. No obstante, debido a
inyectar al cliente en la parte superior, ahora
puedo ir recto y C. Así que en primer lugar, tengo mi lista
generada aquí se declaran. Y luego digo var
items es igual a documento contenedor dot get item query I iterador relativo al tipo artículo carrito de
compras. Esto va a ser tan tengo que
salir y solo conseguir todo y verán un rato
los artículos tienen más resultados. Simplemente seguiríamos adelante y sumamos. Una herramienta de tres pulgadas o una nueva lista. Muy bien, entonces la
respuesta var es igual a los ítems que se
leen siguiente asíncrono. Y luego solo
dejamos caer ese rango en nuestra lista desplegable,
en nuestra lista. Y entonces eso es
lo que regresaremos. Ven a pensarlo. Probablemente podría incluso
este gráfico de líneas. Déjame ver si esto funcionaría. Y C ítems dot read. A continuación está viendo puntos. De acuerdo, entonces es un curso suave
asíncrono que me encantaría a nuestro ancho. Bueno entonces si hago
eso nuestros pesos, entonces yo sería capaz de hacer una lista de tareas pendientes sobre
lo que se devuelve. Ahí vamos. Así que probablemente ni siquiera
necesito todo esto de todos modos. Dos líneas. Ya ves, a veces escribes
algo y luego te das cuenta de que podría haberlo
escrito un poco mejor. Entonces voy a comentar que fuera por ahora y
después podemos volver y probar y validar si mi
refactor funciona como se esperaba. Pero ves meta para conseguir
los artículos y luego
los conseguimos está en ítems puntos
leídos hace lo asíncrono, que básicamente el resultado no son los ítems que
estaban arriba eso está en nuestros escritos o entre
paréntesis para que podemos llamar a la lista de los dos en
lo que sea que se devuelva. Muy bien, eso es lo que estamos regresando cuando
tratamos de conseguir todo. Así que sigamos adelante. El consigue por ID. Entonces aquí es donde
sería como para como
basado en lo que hicimos anteriormente, donde en realidad
teníamos ese enlace, donde buscamos el
ID para la clave de partición, que en este caso es categoría. Entonces aquí he modificado
la ruta para decir dame ID y clave de partición. Entonces esos son los
valores que voy a usar para ejecutar mi consulta. En realidad podría haber
usado el mismo tipo de encuadernación que habría usado previamente dentro de
este método aquí. Eso realmente nos
ayudaría a conseguir el uno, el único registro que coincide con
esta clave de ID y partición. Entonces aquí hay un ejemplo de cómo sería
eso,
ese código vinculante. Entonces Cosmos DB, tenemos
el mismo nombre de base de datos, nombre colección, y cadena de
conexión. Y luego fui a decirle
que el ID está vinculado al ID que viene desde
el parámetro aquí. La clave de partición de manera similar está vinculada a la
clave de partición que entra aquí, y luego eso se va
a dispersar. Vaya a Cosmos DB, haga la búsqueda y almacene el resultado en lugar de artículo del carrito de
compras. Y luego una vez que tengamos artículo del carrito de
compras, no sería tan fácil como devolver resultados de objetos voluminosos, el artículo del carrito de compras. Pero como
dije, prefiero una especie de
consistencia porque esto,
este código vinculante va a parecer casi completamente diferente
de este código vinculante. Y hay que tener mucho cuidado y no estoy
diciendo que sea malo, no
estoy de ninguna manera
golpeando el código. Estoy viendo que
no es mi preferencia, pero te estoy mostrando
cuáles son tus opciones. Entonces voy a
comentar esto para
que el PCAOB sea
como punto de referencia. Pero lo que he hecho aquí es
decir var item es igual a nuestro
contenedor de documentos pesos, leer artículo asíncrono. Así que obtener la consulta de elemento I iterador. Eso es todo lo que llegamos
a nuestra colección. Éste es uno que quieres, uno va a querer un
artículo del carrito de compras y le doy el ID, y le doy la
clave de partición, que es categoría. Por supuesto, de igual manera extendí el listado de parámetros para incluir
el ID y la categoría. Y acabo de hacer una ruta
que apunto a anotar para tener en ella la
categoría de barra de ID. Cuando intentas
conseguir, debes pasar el ID de lo que
estás obteniendo, así
como el nombre de la categoría.
Se puede hablar con glucosa. Eso es lo que hacemos. Y entonces el artículo
realmente va a
volver con un código de estado. Muy bien, por lo que
va a decir si el código de estado es equivalente
al código de estado HTTP, teléfono, entonces volveremos
en resultados no telefónicos. Muy bien, Agradable y sencillo. De lo contrario seguimos adelante y devolvemos los viejos resultados clave están bien. Resultados de objetos con el recurso
item.name. Por lo que se puede ver que estalló
en un try catch porque estaba haciendo algo
mal cuando escribí esto y necesitaba
ver la excepción. Entonces no puedes hacer eso
si lo necesitas, pero es realmente y
verdaderamente no necesariamente. Así que fui a eliminarlo
solo para poder simplificar el código y mostrarte
exactamente lo que se requiere. Es así que eso es todo. Buscarías
un registro de la tienda de datos Cosmos DB. Ahora vamos a revisar lo que sucede
cuando hacemos nuestro Crear. De acuerdo, entonces lo que estamos
haciendo aquí de verdad y de verdad es ver que queremos hacer
el mismo tipo de fijaciones. Entonces por supuesto que lo comenté, pero si lo miras, es el mismo tipo de encuadernación, excepto
que éste sería un
enlace hacia afuera en los enlaces de salida. Entonces este es un enlace de entrada. Este es un enlace de salida
porque entonces
va a emitir algo
al Cosmos DB. Por lo que esencialmente es conseguir la
base de datos de cobro Cosmos DB, sabemos todo eso. Pero entonces el último
parámetro aquí. Es de tipo I Colector asíncrono
relativo al tipo de datos. Sabemos que queremos un proceso
y después el nombre del mismo. Entonces déjame ponerlo en
la misma línea para que se vea un poco más uniforme. Ese es el tipo de datos que
tenemos que usar porque estamos operando de forma
asíncrona. Si no
lo estuvieras haciendo de forma asíncrona, entonces solo haremos
una variable Alt. No se pueden usar verbales antiguos en lugar de un método
asíncrono, tenemos que usar el colector
Asíncrono relativo al tipo de datos y
luego artículo del carrito de compras. Y luego más adelante en el código, después de que consigamos el artículo del
carrito de compras y todo, en realidad
tendría que
hacer algo como esto para agregarlo
a la colección. Así que vamos a ver. Artículos del carrito de compras ALT. Entonces un auto a este
nombre que debió haber sido artículos de carrito de compras. Sólo estoy nombrando eso porque
sabemos que es un ALT. Todo está poniendo
al Cosmos DB, ¿verdad? Por lo que los artículos del carrito de compras, no añadimos asíncrono, y luego pasaremos en el artículo
que debe estar agregando. Eso es realmente lo que
pasaría al final de esa operación. El viejo código comentado, tanto como un comentado
fuera más frío. Lo que estamos haciendo
sin embargo, es que estamos viendo, claro sabemos que obtenemos
los datos del cuerpo, lo
analizamos en consecuencia, y luego creamos un nuevo elemento de tipo tarjetas de
compra donde claro sabemos que obtenemos
los datos del cuerpo,lo
analizamos en consecuencia,
y luego creamos
un nuevo elemento de tipo tarjetas de
compra donde
pase en el nombre
y la categoría que entró a través de nuestra solicitud. Y luego vemos cantidad de
documento y r
dot crear elemento asíncrono. Te damos el
artículo y luego
le daríamos el valor de clave de partición. La relevancia de este valor de
clave de partición es que estamos utilizando la categoría que fue
enviada como los datos, ¿verdad? Entonces cuando dije esa categoría, cuando estás creando este
ítem y esa categoría, lo
estamos creando a
nuestra configuración ese valor. Entonces cuando hicimos nuestro
ejemplo de blog donde usaría el ID tanto
para ID como para clave de partición. En este caso, estoy mostrando
un ejemplo más práctico. Ahora, realmente querrías
cortarlo
en base a algo así como
categoría o agrupaciones. Estamos utilizando la categoría
como la agrupación. Entonces, una vez que hagas eso, simplemente devolvemos los viejos resultados del objeto
clave con el ítem en consecuencia. Por lo que cualquiera de esas
líneas funcionaría en
relación con lo incomentado difícil de llegar
a la corte de adultos. Veamos la actualización
y porque eliminé la categoría del artículo del carrito de compras de
actualización, estamos recibiendo este
error, pero cuando
lleguemos allí, podemos mirarlo. No, no voy a
pasar tiempo buscando alternativas para el put y la
eliminación a la que se puede ir
e investigar esas. Sólo voy a seguir
adelante y mostrarte cómo lo he hecho. Por lo que actualizé la raíz o una necesidad de actualizar la ruta
para incluir la categoría. Entonces no puse en la categoría porque de
la forma en que lo estamos haciendo, siempre
necesitamos esa clave de
partición. Por lo que necesito extender
esto a la categoría. Por supuesto que se pone el método. Entonces estamos obteniendo los
datos de la solicitud, analizándolo. Y entonces voy
a ver si nuestros artículos, voy a ir y Fitch
el ítem de la base de datos. Entonces estamos usando el mismo
código que habría usado en el single GIT, ¿verdad? Bueno, esta vez viene la clave de
partición
de nuestra categoría de parámetros, o simplemente asumiremos formas. Entonces
necesito asegurarme de poner categoría de cadena. Y luego una vez que encuentre
el artículo o no, se va a comprobar mientras clave. Si lo encontró, entonces pasamos a decir
ítem dot resource. El dato una vez finalizado, los datos de
doctorado se almacenan
en el recurso item.name. Es por eso que devolvimos elemento dot resource
saltó no solo en el artículo. No sé si señalé
eso antes. Item.name, recurso y
luego actualizamos lo que necesitamos para actualizar a
ninguna parte que
quería actualizar en el Recogido. Entonces si lo extendes para tener
nombre en lo que sea, item.name resource
pensó esa propiedad. Y luego somos pesos
documento contenedor dot upsert item async, donde enviamos de vuelta el elemento
dot recurso por demasiado. Entonces después de actualizar el elemento dot
resource, lo enviamos de vuelta. Entonces eso es lo que
vamos a devolver de todos modos, como los datos actualizados. En el delete, una
vez más actualizamos la raíz. Entonces estamos tomando la categoría
como clave de partición. Y entonces sólo vamos a ver un contenedor de documentos pesos
eliminar elemento está viendo. Estamos viendo que estamos eliminando
un artículo del carrito de compras. Queremos eliminar el ID y esa clave de
partición en particular. Y luego devolvemos el resultado. Eso es básicamente todo
para esta operación. Muy bien chicos, así que vamos a
probarlo en cualquier cosa que hagamos. Cada vez que hacemos algo
genial, tenemos que probarlo. Voy a traer a Cartero y ya hice una prueba a la posguerra que creé oponerse y te di
la categoría de fruta. Aquí hay un retorno exitoso. Podemos ir y conseguir. Entonces esto está consiguiendo todo y
tengo dos discos ahí dentro, el sol que y yo tenemos manzanas. Uno está en la categoría de alimentos, uno está en una categoría de fruta. Así que antes cuando era estadístico, en realidad
estaba usando necesidades
y deseos como mi prueba. Y lo que noté fue
que en realidad devolvió
un 500, ¿verdad? Entonces tengo una tarjeta de identificación del carrito, claves de
partición, por lo que
realmente debería darme un 404. Significa que no puedes encontrar
lo que busco. A 500 indica que hay un problema en mi servidor
que no es preciso. Si miras por aquí, verás que en
realidad está lanzando una excepción porque
el cliente HTTP que está haciendo la
llamada al cosmos DB tiene un método ahí que dice asegurar nuestro que dice asegurar código de éxito. Si ve algo que no
sea un 200 o uno de esos 200 códigos de
respuesta, en realidad
va
a ejecutar una excepción. Entonces a pesar de que está
viendo que es un 404, está lanzando una
excepción que
se está manifestando como un
500 al cliente, que no queremos. Entonces lo que he hecho es
refactoriarlo un poco. Entonces te estoy mostrando
el código que
se está llamando y que está
lanzando una excepción. Mi refactor me haría hacer un try-catch esa llamada
dentro del try. Entonces devuelvo los viejos resultados del objeto
clave, y luego 40 captura. Voy a decir coger la excepción del cosmos en
forma de un objeto llamado E. Así Cosmo, por lo que la excepción es una excepción
personalizada que está
siendo lanzada por ese método. Y luego cuando el
código de estado es equivalente a y
podemos simplemente usar el
código de estado incorporado norma E para no telefoneado, entonces queremos
devolver un nuevo 404. Muy bien, así que ese es
mi factor literario. Entonces voy a reiniciar
esto e intentarlo de nuevo. Si vuelvo a ejecutar esto, déjame asegurarme de
que esto se esté ejecutando. Entonces si
vuelvo a ejecutar esto y presiono Send, no, no
hay instancia o
no hay indicio de una excepción en el registro y nos estamos
bajando 404, así que eso es mucho mejor. Yo quería esto como comida. Déjame probar un carro. Solicita que no deban dar un cuatro o cuatro o un
500, y ahí vamos. Podemos recuperar el
registro con éxito. Ahora intentemos poner. Inicialmente tuve la categoría en que estoy dispuesto a tomar
el tote y fui a simplemente dejarlo en recogido
es cierto que esos
actualizan nuestro valor de ID. Entonces el ID y las
claves de partición necesarias para el put, déjame poner ambos y luego actualizar. Entonces ahora verás
que esto es cierto. Entonces, en un principio,
sabemos que era falso. Podemos ver que es cierto. Funciona la actualización. Entonces eliminemos. Y una vez más,
necesitamos poner en nuestro ID y una
clave de partición para la eliminación. Así que déjame hacer eso, y eso es un 200. Ok. Entonces si traté de volver
a conseguir, entonces solo consigo uno. Entonces todo nuestro código está
trabajando con nuestro Cosmos DB. Por supuesto, si querías
validar aún más esto, puedes sacar el MLA
o crear mirando MLA para asegurarte de que esté ahí y luego hacer todos tus ajustes
en consecuencia. Juega con él, explora, mira lo que es posible.
31. Actualización a la interfaz de usuario: Muy bien chicos, así que acabamos de
pasar por silencio nuestro código, configurando nuestra aplicación
para usar Cosmos DB, correcto, así que vamos a pasar
rápidamente por algunos de los cambios de la interfaz de usuario
que se tienen que hacer. Desde que actualizamos la información de
raíces para algunos de nuestros endpoints como cambiamos el get para también necesitar la
clave de partición, cosas así. lo que desde luego los puntos finales deberán
actualizarse en consecuencia. Entonces en nuestro cliente arriba, podemos dejar el punto final API de
ruta o la dirección base tal como está. Pero entonces en nuestro componente, voy a hacer
algunos ajustes a la actualización y la
eliminación. Para las actualizaciones. Habíamos dicho que
sí, tomamos el ID, pero también queremos que las categorías ya tengan acceso al ítem. Así que sólo voy a decir slash, agregar en el valor de categoría
también lo mismo para el Eliminar. Sólo vamos a
sumar en la categoría. Y eso es realmente todo lo que hay para actualizar estas llamadas de
punto final. Por supuesto, si lo estás
extendiendo para tener un discurso detallado
donde haces click en ver solo el detalle un registro que
necesitarás considerarlos. Quiero decir, solo borra
ese pedazo de código y muéstrale otra
actualización que se hagan. Inicialmente tuve esto como valor igual y
nació al bool, pero eso debería revisarse. La casilla de verificación del tipo de entrada activada es igual a
cualquier valor que sea. Y luego tenemos ese evento y nada cambia
para nada más. Sólo voy a probar esto
rápidamente. Muy bien, entonces esa es
nuestra interfaz de usuario. Voy a probar
esto de nuevo placentero para asistir con Cosmos DB. Y la categoría
sería aleatoria. Crear artículo de carrito de compras. Ahí vamos. Muy bien. Por supuesto que siempre podríamos actualizar el código que vacía los cuadros de texto siempre y cuando
algo se agregue con éxito. Saber antes te habrías
dado cuenta de que sí, estaba llamando bala. El valor de check no
se mostraba cuando era cierto o no, así que acabamos de actualizar eso. Entonces si reviso éste, déjame simplemente traer la ventana de la
consola para que veas
que va a llamar a la actualización. Ahí está El puesto lo que
se llama con éxito. Entonces si me alejo de
esa página al volver, se va a ejecutar una nueva consulta. Y a veces cuando interfieres con la consola, se hace una pausa. Pero ahí está, Esa es la nueva consulta y sabe el valor de check está mostrando. Entonces si elimino, podemos ver que se llamó a la
función, pero esto no está redibujando, por lo que probablemente pueda volver a visitarlo. Pero si me alejo y
vuelvo y le
permito ejecutar el git, entonces vemos aquí que
en realidad fue borrado. Por lo que probablemente podamos actualizar el código de la interfaz de usuario para volver a dibujar
correctamente después de que elimine. El arreglo rápido y fácil
para eso es modificar o método de devolución de llamada de evento
onclick. Entonces en lugar de hacer la
forma que hicimos con los args del evento y luego
llamamos aquí el nombre del método. Sólo vamos a
tener nuestro cartel publicitario, abrir paréntesis,
luego abrir y cerrar. Es más como una
función de delegado y eso, estamos delegando a
nuestro elemento de borrar clicado. Muy bien,
tanto más o menos que solo resolverá ese problema de redibujo porque la forma en
que el componente carga que lo estábamos
haciendo antes, en realidad intentaría
recargar todo antes de que él en realidad registró que
se actualizó la lista de artículos. Y otra cosa que
podrías verme hacer es usar una lista en lugar de una matriz
que es realmente tan normal efecto material, solo
tiendo a preferir listas. Ambas áreas podrían
ser más eficientes. Eso es además del punto
en esto, en este momento, Así es como se puede
conseguir que delete redibuje correctamente la página. Pero eso
es realmente todo por los cambios requeridos a nuestro cliente arriba.
32. Revisión de secciones: crea la API REST: Muy bien, entonces donde
es otro hito y sólo vamos
a revisar algunos de los principales puntos de conversación
de estas actividades. Punto mayor número uno, esperamos saber
haber sido creando una función con un archivo
o un archivo con una función. Nadie se dio cuenta de que podemos tener múltiples funciones en
el mismo archivo de clase, que en el caso de que
creemos una API rest sería un poco más
eficiente en términos de no difundir todo lo relacionado
endpoints o
comportamientos a través de múltiples archivos, pero solo tenerlos en un
archivo para 1 de referencia. También analizamos el
hecho de que podemos definir los nombres de funciones
separados de la raíz. Con nuestra definición de las reglas, en realidad
podríamos imitar RESTful API y mentee
y las ofertas estándar. Podemos conseguir diferentes
operaciones como
GET, publicar, PUT y eliminar incluidos. Y también en viejo fit o raíces con parámetros
que hay que pasar
en los que automáticamente
se deshuesan en relación con ellos estar presentes en
el encabezado del método. Entonces esas son algunas cosas
que hemos mirado. No miramos ninguna seguridad
va a hacer eso cuando vayamos a la como su lado cuando
estamos publicando esto. Por lo que todos ellos se están ejecutando a
nivel de autorización anónimo. Una de las razones por las que no
querrías hacerlo
siguiendo mostrado o incluso maestro es que con cada solicitud esa clave
tiene que ser prisiones. Lo miramos
en futuras lecciones. Solo estoy
señalando por qué nos mantuvimos anonimato para todas
nuestras operaciones de API. También analizamos la
integración con nuestros datos. Y nosotros, vimos que siempre se
podía añadir como un encuadernación basado en todo
lo que se integra con él, el código va
a verse diferente. Por lo que he incluido los fragmentos
comentados que tipo de ir de mano con la operación
en escritura manual. No obstante, había tomado
un enfoque diferente porque cuando usamos enlaces, cada método basado en el tipo de encuadernación
o el que estábamos haciendo. El banco puede requerir
diferentes tipos de datos y diferentes formas de interactuar
con dicha vinculación. En lugar de tener eso, ya
sabes, todos esos cambios por
todo el lugar, en cambio
fui con la opción de inyección de dependencia donde estoy usando los clientes del
cosmos. Configuramos una clase de startup que habría arrancado
la fuente que queremos a nuestro cliente cosmos. Y lo está obteniendo de
la conexión Cosmos DB, que se almacena en mi
local settings.js SON. Y por supuesto que estamos
emulando eso usando el emulador de almacenamiento, al
menos para no. Y habiendo hecho eso, puedo saber sólo
inyectado por todas partes. Así que originalmente habría conseguido clase estática
pública
y métodos estáticos. Tuve que tomar toda la
palabra clave estática para apoyar nuestra inyección de dependencia con
este contenedor de documentos, realidad
podríamos confiar en. Estoy más en mi libro consistente
NOSOTROS de variedad en el código para
lograr ciertas cosas. Sé que dicho eso, por
eso
te doy las opciones porque diferentes pliegues, diferentes trazos, diferentes
situaciones pueden requerir diferentes ejecuciones, ¿verdad? Así que no necesariamente viendo que esta es la forma
en que hay que hacer, solo te
estoy mostrando la
forma que prefiero. Muy bien. Entonces eso es realmente todo lo que
hay a o API. También analizamos el hecho de
que con nuestro Cosmos DB, tenemos que incluir
nuestra clave de partición. Y al hacer eso, tuvimos que asegurarnos de
que nuestro modelo que representa nuestra tabla
Cosmos DB tenga Jesus On Property ID y propiedad
JSON que
coincida o nombre de clave de partición. Lo final que hicimos fue solo la actualización o la interfaz de usuario
para asegurarse de que fuera reflejante de las nuevas
carreteras y cualquier otra cosa. Eso es realmente todo
para este módulo, espero que hayan logrado
mucho y quiero que sientan inspirados para ir y
tratar de hacer esto por su cuenta. Se puede ver que el
Photoshop es bastante ligero. Es una manera fácil de empezar
a escribir código y lograr
cosas con toda la sobrecarga de los archivos de proyecto de
dos minutos y configuraciones necesarias con
todo eso dicho y hecho. Nos vemos en el siguiente módulo.
33. Despliegue de funciones en Azure: Muy bien chicos, bienvenidos de nuevo. En esta sección vamos
a ver la publicación o un 0 funciones arriba más o
menos en un 0. Por lo que hay una serie de matices
a los que debemos prestar atención. Ya hemos hablado de los modelos de
alojamiento antes, pero vamos a echarles
un vistazo de nuevo. Y vamos a explorar qué necesidades se busca
el proceso de pensamiento necesita ser puesto en cuando vamos a estar publicando nuestra función
arriba. Entonces mantente atento.
34. Publica funciones en Azure: Muy bien chicos, así que
empecemos con nuestro despliegue. Entonces vamos a
hacer clic derecho o una función arriba e ir a Publicar. Y luego conseguimos a este mago. Por lo que queríamos publicar a un 0, seleccionamos eso y luego
necesitamos especificar un objetivo. Es posible que haya mencionado
inadvertidamente anteriormente en este curso que
si estás usando Windows, entonces es posible que quieras
usar C-sharp y luego puedes usar otros idiomas
para otras plataformas. La realidad, sin embargo, es que.net es en realidad
multiplataforma. C-sharp funcionará tan bien en Windows como lo hará sin marcar y Linux, esa es la realidad. Por lo que su función sube
el nivel básico, se
puede desplegar en la versión de
Windows de esta función arriba o en la versión Linux de
esta función arriba. Del mismo modo que Python, Java y TypeScript
y JavaScript en cualquiera de ese idioma también
pueden ser soportados. También tiene opciones
para publicarlos como contenedores con Azure
Container Registry, que puede permitirle
alojar su imagen Docker. No obstante, voy a
proceder con Windows. Después de seleccionar
el fin de semana de Windows no hay vista ni buscar las
apps de Photoshop ya tienen una función arriba de esa manera que había
creado desde el principio, pero no voy a usar eso. Quería crear
uno nuevo. Así que voy a hacer clic en
crear una nueva función arriba. Y entonces me va a
pedir el nombre. Alguien acaba de ver un carrito de
compras guión API, el nombre de la suscripción. Por supuesto, este es
que se te puede pedir que
inicies sesión con tus 0 puntos, puedas proceder a hacer eso. Voy a dejarlo en uno de los grupos de recursos existentes. Ahí vamos. Función de r g. Si no tienes
ningún grupo de recursos, en realidad
puedes hacer clic en Nuevo y luego crea un nuevo nombre. Entonces tenemos nuestros tipos de plan. Entonces recuerda que tenemos
el plan de consumo, el plan premium, y
el plan App Service. Entonces solo para recapitular
cuáles
son los tipos de plan y los diferentes
pros y contras de cada uno. El
plan de consumo es el servidor, el bazo es el plan
más asequible. Eso es pros y con es que en realidad tiene limitaciones con
el tiempo de ejecución. Después de unos cinco minutos más o menos, toda
la aplicación
en realidad enrollará la cúpula. Por lo que se destinará recursos. Y luego cuando
hagas otra solicitud, tomará tiempo volver
a enrollar. Entonces por supuesto, para probar
adelante por victorias rápidas, ese sería un buen acercamiento. No obstante, para un escenario real en un entorno de producción donde se necesita una máxima eficiencia
y un máximo tiempo de actividad, es probable que
desee usar premium donde no
se
descienda a Recursos. Tendrás recursos
dedicados en todo momento y podrás acceder a VNets y otros
recursos en red. Eso es un nivel de red. Por supuesto que esto cuesta un poco más. Tu otra opción sería
fusionada y plan de App Service. Entonces tal vez tengas un servicio de aplicaciones ejecutando nuestro sitio web
ya u otra API. En realidad podría simplemente
desplegarlo en ese plan. Además, quería ir con
este plan de consumo. Después de seleccionar
eso, usted elige su ubicación, por supuesto. Y para mí esa
será herramienta del Este de Estados Unidos. Y luego eliges
tus historias o conos. Sólo tengo uno, para
que pueda quedar. Y luego seguimos adelante
y hacemos clic en Crear. Y después de que eso se complete, donde conducen de nuevo a este
cuadro de diálogo donde
podemos optar por ejecutar
desde archivo de paquete. Entonces eso está marcado y se
recomienda más o menos
lo
que está diciendo es que en realidad va a
desplegar más como un archivo zip con todos
los archivos requeridos, los archivos DLL y
los archivos de recursos que necesitamos. Y se montará como una imagen de la app en lugar de que los
archivos reales estén ahí. Con tendencia antigua para entender
las entresidades de la misma, sólo
voy a
dejarlo tictacado se dice que
se recomienda, por lo que seguiré su
recomendación. Entonces podemos pegarle a Next. Y luego aquí
quieren que decidamos. ¿ Quieres publicar
como un sitio web regular? Antes de que existiera el CICD, así es como solíamos publicar. Generaría
un archivo publicado. Despliega todos los archivos en
un lugar particular dentro de
la red o tu máquina, y luego puede
copiarlos y pegarlos en el destino. ¿ O quieres usar
CICD con GitHub? Por lo que ya he
agregado este GitHub. Si quieres,
siempre puedes seguir adelante y hacer eso. Puede agregar el control
fuente usando esta opción que habría estado en la
esquina inferior derecha de Visual Studio. Después de hacer ese minúsculo
subido a GitHub, entonces probablemente puedas
volver aquí. Muy bien, Alguien
para usar CICD con GitHub Actions y luego terminar. Entonces eso significa que cada vez
que compruebo un cambio,
en realidad
activará el despliegue. En ninguna parte nos lleva a nuestra pantalla
final donde nos está dando un resumen de todo lo
que ha tomado, por favor. En realidad va a agregar este nuevo archivo que se
llama archivo YAML. Un archivo YAML, que es Kelly tiene todas las instrucciones de despliegue
que GitHub va a usar para determinar
qué debe suceder. También obtenemos una vista previa la URL que se
generará para nuestros ceros arriba. Entonces todo lo que necesitamos, podemos acceder a él en vivo
a través de esa URL. Ahí es donde nuestra EPA
será accesible. Y aquí abajo veremos algunas de las dependencias
Application Insights necesita ser configurado.
Vamos a seguir adelante y hacer eso. Recuerda que querríamos
tener eso para la tala. En realidad puedes seguir
adelante y hacer clic en Siguiente a través de este asistente
y permitir que termine. Una vez que has hecho
eso, seguramente fue acordar los dientes
que están configurados. También te están mostrando
que van a reemplazar la sesión de Azure Storage es para localmente estamos
usando el emulador, pero una vez que implementemos
sabremos que debería estar usando el almacenamiento
real, cito. Muy bien, así que con
todo eso hecho, y si quisieras modificar el amplificador por
cualquier motivo, no
podía ir a
Más Acciones, editar. Y te está mostrando
lo que se requiere. Como dije, como dije, esto en realidad se activará
cuando hagamos un check-in. Si abro la ventana git
changes, verás que está agregando
todos estos cambios. Y luego voy a ver
una actividad de despliegue, columna de
despliegue ella. Entonces fui a simplemente venir
en absoluto y el fregadero guardar todos los cambios y
permitirle empujar al repositorio. Podemos saltar
al repositorio en GitHub y solo podemos hacer click ese pequeño punto que aparece al lado del pollo o
para comprometer números. Entonces si hago esos detalles de entrada, saltaremos a esa
CID ver pantalla del CICD. Entonces vamos a darle unos
cuantos para terminar. Pasados unos minutos,
se debe hacer. Saltemos
a nuestro tablero. Echemos un vistazo a nuestros recursos. Entonces voy a ir
a todos los recursos y debería ver mi nueva
función arriba. Ahí vamos. Ahora, antes de ir
más allá con la función, recuerda que sí necesitamos un Cosmos DB o cualquier tipo de base de datos
que hubieras usado. es necesario que existan
para tener esa conexión
lista para las pruebas. Voy a volcar a nuestro tablero y ya
creé el Cosmos DB, pero te voy a guiar
por el proceso sin importar. que puedas ir a Todos los
Servicios y luego solo
tienes que ir a
buscar Cosmos DB. Una vez que tengas el Cosmos
DB crearías. Entonces estamos usando el núcleo SQL. No, en esta pantalla, usted elige los grupos de recursos. Por lo que te recomiendo que elijas el mismo grupo
de recursos que tu función arriba, por
supuesto, ingresas NameNode
sin oposición. El nomenclatura es muy estricto por lo que no
puedes usar
mayúsculas ni nada. Por lo que habría llamado a
los artículos del carrito de compras. Por supuesto, eso es realmente
solo un nombre de cuenta, así que no necesariamente
tienes que llamarlo así, pero le das ese nombre si te
dice que no está disponible, solo intentas hacerlo un
poco más personalizado. Y luego eliges una
ubicación que sea mejor para ti. Una vez más, recomiendo elegir una ubicación que esté lo más cerca posible de donde se desplegó la
función arriba. Una vez que hagas eso,
puedes elegir si quieres aprovisionar el
desempeño o sin servidor. Y si eliges sin servidor, obviamente no tienes
las opciones a continuación. Si elige los rendimientos
aprovisionados, entonces puede
optar por aparecer que apliquen ese descuento de nivel gratuito. Saber lo que he experimentado
en el pasado es que
no pude proceder con el descuento de nivel gratuito en
la segunda tercera bandeja. Así que sólo estoy señalando que viejo. Si intentas con él se aplica y terminas teniendo
una implementación de campo, tendrías que eliminar ese
recurso cohere, inténtalo de nuevo. Y
te recomiendo que no postules. Por supuesto, si es
tu primera vez, entonces puedes dejarlo en eso. Pero si eliges no aplicar, entonces empezará a costarte o simplemente puedes
elegir sin servidor. También puede cambiar la política
abrochada para ahorrar costos. Entonces como este no es
un sistema de producción, no necesariamente
tienes que ir georedundante. Puedes hacer tiendas de
respaldo redundantes locales por lo que
cuesta menos dinero. Pero si su producción
y
te recomiendo que dejes eso en georedundante, esos son los ajustes reales a
reales que
tendrías que asegurarte de que estén ahí. Y lo que voy a hacer es saltar a mi cuenta de
Cosmos DB ya provisionada. Una vez que estés aquí, ¿quieres
ir al Explorador de Datos? No, Este Explorador de Datos, se ve igual a
lo que habríamos experimentado con el emulador. Por lo que creas tu nueva base acuerdo a cómo
habrías escrito un código, claro. Y más o menos lo que
hicieras en los militares, solo repites esos pasos
para crear tu base de datos y el contenedor así como la clave de partición
dentro de éste. Muy bien, así que con
toda esa configuración, queremos asegurarnos de que obtengamos la cadena de conexión correcta. Entonces aquí hay una cadena de
conexión primaria. Podemos copiar eso y luego
volver a nuestra emoción hacia arriba. Así que sólo voy a ir
al tablero de instrumentos, saltar a la función hacia arriba. Entonces dentro de la
configuración, necesitamos agregar esa clave de conexión
primaria. Recuerda en nuestro código, kudos configura que
tendríamos que buscar en el punto alterador JSON localmente, ese habría sido el archivo JSON de punto de configuración
local. Eso es lo que te reconocen
como cosas opuestas. No obstante, en una configuración desplegada, tenemos que configurar o Configuración de
la aplicación. Acabas de ver la nueva configuración de
aplicación te
da el nombre apropiado relativo a lo que
escribimos en el código, que tiene conexión Cosmos DB. Y luego pegas esa clave
primaria del clínico aquí. Ya hice eso. Aquí está. Añadí ese dinero.
Bueno, la conexión Cosmos DB y el valor. Una vez que tengas toda esa configuración, entonces puedes proceder a la prueba. Para probar, podemos
hacer click en funciones, y eso nos dará una lista de todas las funciones que
se han desplegado en este up. Si hago clic en alguno de ellos, empecemos con el carrito de
compras que intento. Aquí verás un tablero
de mandos de todas las ejecuciones. Ya has visto cómo se ve este
tablero. Si vas a trimestre y prueba, ten en cuenta que no puedes escribir
código para la función aquí porque en realidad se
implementó desde Visual Studio. Por lo que cualquier edición tiene que
suceder en Visual Studio. Realmente es solo
montarlo y tiene el mínimo desnudo en
lo que respecta a
las configuraciones. Así que aquí
te está mostrando que el script israelí cargando desde esa DLL, esa es la versión compilada de todo
el código fuente, ¿verdad? Eso es lo que veríamos allí. Pero si volviéramos
y obtuviéramos la URL de la función, entonces seríamos
capaces de obtener esa URL, que solo podemos pegar
en el navegador para probar. Si quieres monitorizar, como vimos antes, solo
puedes ir a
monitorizar e ir a los registros. Y cuando eso está conectado
y abierto corriendo, se
puede proceder a probar. Así que sólo voy a abrir en una nueva pestaña del navegador,
lo siento, y pegar. Aquí estoy obteniendo ese soporte de matriz
vacío. Pero entonces si miro
en el cierre de sesión, ve que llamó la función y no
había nada que compartir. Muy bien, entonces eso significa usar Postman o cualquier otra herramienta API, en realidad
puedo simular el mismo tipo de causa a la
que estoy acostumbrado. Entonces aquí es donde
habríamos creado un artículo de carrito de compras
en lugar de publicar el anfitrión local alguien para
reemplazar todo eso con nuestra nueva URL a nuestros
Sitios Web de Azure, enviar la solicitud. Y ahí lo tengo. Es una respuesta de 200 OK. Entonces eso significa si
actualizo esta solicitud para
conocer a todos MC en el
objeto en la base de datos. Eso es todo realmente
para publicar o funcionar hasta Microsoft Azure.
35. Deploy y prueba de la aplicación de UI Blazor: Muy bien chicos. Entonces en esta lección
vamos a estar poniendo al día a
nuestro cliente. Entonces lo que he hecho es que he
saltado a Visual Studio. Tengo el archivo CS del programa, y voy a
cambiar esta ruta de la ruta de las funciones del host local
a nuestra ruta de funciones desplegadas. Desde el tablero.
Solo voy a agarrar esta URL ya que esa es
nuestra nueva URL base. Y fui a reemplazar
esta línea de código. Así que simplemente duplicaré
el comentario original que fuera y pegue esta nueva dirección con esa pieza, luego
vamos a probarlo. Así que sólo voy a
hacer clic derecho en este proyecto e ir a depurar y comenzar
con la depuración antigua. Cuando navegamos a
nuestro pitch de datos de fetch, puedes ver aquí estoy
recibiendo un error. Entonces si voy a inspeccionar
y miro en la
consola para ver el cable, estás viendo
que no pudo terminar. Eso es todo lo que realmente está diciendo. Y si miras arriba eso, ves que dice que el acceso
para buscar en esa dirección desde este origen te ha
bloqueado a una política de cursos. Por lo que he mencionado anteriormente
las políticas del curso, por
supuesto es el protocolo de seguridad de
recursos de origen cruzado. Es decir, dos cosas tienen que estar en la misma
red o en un dominio o una infraestructura marco
para que se otorgue el acceso. Lo que tengo que hacer es volver a
saltar a las funciones arriba, bajar a la política del curso. Ahí vamos. Luego agrega la URL. Una vez que se agregue en Guardar, entonces
volveré e intentaré de nuevo y notaré que no hay error. No, tengo datos que vienen
de ya que estás bien. Muy bien, así que ahora que he verificado que esto está funcionando, vamos a saltar de nuevo
al program.cs. Y lo que quería
hacer es configurar esto, que si estamos en producción, usamos el
link de Producción para entrevistas. El diputado. Muy bien. Para que pueda simplemente
configurarlo una vez. Fui a ver,
dame una dirección de var B, crea una variable
llamada dirección base y la configuré para que sea este nuevo URI. O más bien déjame
configurarla para que sea esta cadena, que es nuestro local. Y luego fui a decir, si
constructor dot host ambiente, es, bueno, esta es la dirección de
desarrollo. Voy a decir que es producción. Esta es una forma
agradable y fácil de comprobar si estás en producción cuando estás usando
un blazer WebAsembly arriba, entonces solo voy a ver la dirección base es
igual a esta cadena, que es nuestra dirección publicada. Entonces puedo tener una línea donde
veo borrosa
tema de servicios detrás de mí. dirección es nuevo URI fuera
del valor de la dirección base. Con eso hecho,
será dinámico. Podría haber formas más
elegantes de hacer eso, pero, y todo esto funcionará. Publiquemos nuestro up. Sólo voy a hacer clic derecho. Baja a publicar, publicar. Ahí vamos. Entonces voy a
crear un nuevo perfil. Entonces el perfil que está
ahí ya está para el movimiento completo hacia arriba, pero esta vez estoy
creando un nuevo perfil. Escogeré un 0 y lo voy a publicar en
otro servicio de app. Y va a preguntar qué instancias de servicio de
UPS aquí. Vamos a tener unos cuantos ya. No voy a usar ninguno
de esos son probablemente pueden. Eso está bien. Sólo
voy a hacer una nueva. Entonces voy a
crear uno nuevo. Este sería el plan
App Service. El plan App Service es más
o menos los b's. Después se despliega a ese BCE, este propio App Service. Voy a crear
un nuevo plan de hosting. Voy a llamarlo
lista de carrito de compras y ponerlo en el mismo
grupo de recursos que nuestra función arriba. La importancia de asignar
cosas a la misma función, al mismo
grupo de recursos sería que si ya no quisieras el up y los recursos para esto arriba, sólo se
puede eliminar
el grupo de recursos y todo lo que hay en ella. Y esa es una forma agradable y
fácil de limpiar. Sólo voy a poner
estos ahí también. Y voy a colocar
esto en un plan libre. Al hacer clic en Nuevo. Elijo mi ubicación y luego puedo
bajar al plan gratuito. Pero por supuesto,
en base a tu contexto, no
quieres
elegir el plan que mejor se adapte a tus necesidades. Voy a ir con
gratis para esta demo. Vamos a hacer clic en Crear. Cuando eso se hace, sólo
puedo seguir adelante
y golpear Next. Y voy a publicar esto con la configuración CMC ICD como la
función arriba. Apenas terminar. Muy bien, y luego este verano
las páginas me dejan saber qué depende URL para mi
app va a ser. En ese punto, solo puedo
ir a obtener cambios y decir despliegue de
configuración para blazer, Comentarios Todo y sincronizar. Y luego si quieres de nuevo, salta a GitHub y
mira ese despliegue. Ya está hecho. Así que saltemos
a los lados publicados. Recuerda, solo podemos
obtener esa URL
del perfil publicado o ir
al tablero A dashboard y obtenerla desde el
recién desplegado. Acabo de desplazarse para
buscar datos solo para asegurarme de que pueda comunicarse. No puede. ¿Puedes
adivinar y decirme por qué? Bueno, si adivinaste que las políticas del
curso no están configuradas, entonces adivinaste
correctamente, ¿verdad? Aquí lo podemos ver.
Sigue siendo un curso compatible. ¿ Por qué se queja
de ambos núcleos? Porque ese es un nombre de dominio
completamente nuevo separado del que
habíamos usado inicialmente, ¿verdad? Tengo que volver
a la función arriba, saltar a la configuración de la
política del curso, y esta nueva URL. Déjame asegurarme de
que estoy usando el formato. Guarda y disfruta de los frutos de nuestra labor que está publicando a
nuestros clientes configurados, que se está comunicando
con nuestra función arriba. Hay otras cosas
que podemos hacer con estas otras
configuraciones que
podemos hacer en el camino para
cumplir con esto más sin fisuras. Los discutiré
más adelante, pero por ahora, hemos publicado con éxito tanto la API como nuestro cliente.
36. Seguridad de configuración: Muy bien, así que ahora
vamos a discutir la seguridad. Veamos que nos levantamos. Sí. Queremos asegurar la función y no queremos
permitir que cada n, nadie pueda acceder a los datos o simplemente a
la escuela
donde quiera. que como se puede ver hasta ahora, las
URLs están bastante abiertas a la función hasta
que cualquiera que obtenga un control de la URL puede averiguar el patrón o si lo han
visto al menos una vez, solo
necesitan
poner slash API Y entonces ese punto final para
poder acceder a eso. No. Existen diferentes
formas en las que puedes asegurar una API en el nivel
muy básico, puedes ponerte como una llave off o solicitar que
se presente una off-key en el encabezado. El estándar actual de la industria está utilizando tokens Web JWT o JSON. Pero la cuota bajista y los
entrenadores que
realmente tendrías que ir y
configurar tu función para arriba. Busca estos tokens, son estas claves en
cada solicitud. Y tendrías que
recordar hacer eso por cada función. Eso puede conducir a sobrecarga, especialmente cuando
tienes múltiples funciones y múltiples operaciones
que estás soportando. Otra forma sería
usar las claves que
habríamos mirado, las claves UPC donde podemos sentarla desde defecto o desde el anonimato, nivel de
función versus nivel master
admin. El inconveniente de esto es
que una vez que configuras la clave, esa clave tiene que estar presente en la URL y esa clave no cambia a menos que
cambie
el comando. Es o vas a
tener que mantener la necesidad de GNG cada vez o vas
a tener que exponer esa clave. Y la clave estaría presente en la URL proveniente de nuestro cliente
solicitante configurado. De todos modos, por lo que alguien aún
podría
obtener esa información y
poder acceder a tu API. Eso cumpliría con más
sentido si eso fuera como en el nivel
de red de máquina a máquina. Entonces si creas una
función ups y
tenías como otro servidor
configurado llamando a la función arriba. Entonces eso significa que no estás
viendo ningún tráfico de URL,
su tráfico GTP pasando por el navegador o monitoriza al Dr. MB, olfatear viejo muy fácilmente. Entonces tuvo las llaves
será una victoria muy rápida. No obstante, debido a que tenemos
el lado del cliente arriba, creo que es mejor imponer una especie
de seguridad a nivel del lado del cliente o hacer que parezca que está
a nivel del cliente. Entonces cuando un usuario intente entrar
a la app, tendrán que
autenticarse aquí para
poder llegar a la función. Así que una manera fácil de
empezar con eso
es saltar a la opción de autenticación en nuestro tablero para
nuestra función arriba. Entonces vamos a agregar
un proveedor de identidad. Ahora esto va a ser como
mini versión de Azure AD. Si has usado Azure AD, entonces sabes que puedes
usar diferentes proveedores, unos de su soporte
OAuth2 Standard. Si no estás tan familiarizado, puedes consultar mi
Microsoft Azure para desarrolladores de
dotnet
donde vamos a través configurar eso con Azure AD, ya sea para el negocio o para enfrentar palabras clientes. Pero esta es una versión dos muy
bajada, que ni siquiera necesitas
una comprensión completa de Azure AD para lograr
lo que estamos a punto de hacer. En primer lugar, elegimos proveedor de
identidad saber que cada uno de estos podría requerir alguna
cantidad de configuración. Por supuesto, para Twitter,
Google y Facebook, vas a tener
dos globales ahí y registrar tu app y
todo tipo de cosas. Alguien para elegir el
camino de estas resistencias. Sólo voy a usar Microsoft. Entonces sólo va a preguntarme, vale, ¿qué quiero
para la distribución? Sí, almacenamiento o conos. El apoyo que escribe un oponente, probablemente
quieras
prestar un poco de atención aquí para
asegurarte de que vas a
elegir el que
mejor sea para tu operación. Puedo elegir sólo
el inquilino actual, lo que significa que el inquilino siendo la cuenta que la app
ha sido
desplegada en cualquier usuario que tenga
acceso a ese documento son fáciles en ese inquilino hasta ahora en cuanto a su
AD se refiere, entonces sólo los que también
puedo decir cualquier Directorio de AD de
Azure. Entonces si se trata de múltiples inquilinos, puedo elegir eso. Puedo ver cualquier cuenta de Active Directory y personal de Microsoft, y solo puedo verlo cuentas personales de
Microsoft. Voy a ir con éste. A pesar de que este
funcionaría para probablemente sobre, una vez más, el Azure AD,
esa administración de usuarios. Entonces es por eso que el
que eliges es muy importante. Una vez más, si quieres
más detalles al respecto, puedes conseguir que se lo diga
en el otro curso. Lo haremos con cualquier Azure AD y cuentas personales de Microsoft. Eso debería permitirme
iniciar sesión incluso con mi personal conocido como su cuenta si tuviera una
autenticación de servicio up en la configuración, ¿cómo restringiremos el acceso? Cuando fui a ver, solo
puedes leer requiriendo autenticación de
autor
asegura que todo el mundo necesitará
autenticarse. Si permites solicitudes
no autenticadas, entonces necesitarás tu propio código. Eso no es problema. Sólo requeriré
autenticación. Así que una vez que estés
calentando aquí solo va a llamar a la API o a
la función arriba. Requiero autenticación. Para la autenticación en solicitudes
autenticadas. Podemos elegir el basado en cómo quieras tu experiencia de
usuario. Y esto redirigirá a Microsoft y
almacenaremos los Tolkien. Por lo que sólo voy a hacer clic en añadir. Con todo eso hecho
y agregado o percibido. Obtenemos la pantalla y nula. Deberíamos poder disfrutar de
alguna cantidad de autenticación. Entonces si trato de ir a la
URL para la función arriba directamente sólo
me
va a redirigir para autorizar o autenticar. Si no estuviera ya conectado, entonces me pediría que pusiera mis credenciales y luego me
permitiría acceder aquí. Es ver que estoy solicitando
permiso para esta API. Y yo querría aceptar eso. Después de aceptar eso, me
dará su consentimiento. Y entonces puedo ir a la
función por arriba sin ventana y dijo que esta
actividad es que dejará de funcionar
en nuestro blazer arriba. Eso es algo
nuevo por varias razones. Vas a ver que un cuerpo está, y lo que está pasando es que
está diciendo
que no puede redirigir a la URL de inicio de sesión porque soy yo redirigido desde la URL de la API,
desde la URL del sitio web. Por lo que hay mucha
más configuración que necesita para subirse ahí. Y eso no va a suceder
en esta lección particular. Realmente solo quería
mostrarte cómo
configurarías e incluso
asegurarías las funciones. Pero luego para conseguir blazer listo
para una configuración 0 AD está fuera del alcance del
contenido de Azure Funcations de este curso. Pero solo te estoy mostrando algunas de las ramificaciones en cosas que debes tener en cuenta. siempre puedas volver a tu API y en realidad puedes modificar diferentes aspectos de esta autenticación
que has agregado. En realidad agregaste como tu AD en una suite muy express, ¿verdad? Entonces, en lugar de ir a Azure
AD y city02 manualmente, solo agregar
autenticación en esto, realmente
le habrías dicho que quieres que Azure AD asegure el up. Y puedes volver atrás, puedes editar la autenticación, solo
puedes desactivarla. Si no
lo quieres o habilita, puedes cambiar las reglas
aquí en función de lo que necesites. También puedes ir al proveedor
de identidad y puedes hacer clic y
modificar otras cosas. A pesar de que las cosas son
los diferentes aspectos de las sesiones de Azure AD
que se han aplicado. Nuevamente, vea aquí los puntos finales. Puedes llegar a tu
cliente arriba en tu inquilino,
arriba, lo siento, un cliente
y los identificadores de solicitud. Puedes llegar a la URL de tu ID de aplicación. Si necesitarías construir
sobre esto, puedes. Como dije, sin embargo, Azure AD no
está en el ámbito
de este curso, por lo que no voy a entrar en demasiados detalles de
lo que es posible. Así que eso es realmente lo
fácil que es asegurar tu función en
casi cualquier que despliegues. Un servicio de aplicaciones que
despliegues se puede asegurar
con la misma facilidad.
37. Revisión de secciones: la aplicación de la función en Azure: Muy bien chicos, así que
en esta sección cubrimos bastantes cosas. Nos fijamos en cómo podemos
publicar nuestro Azure que hemos estado trabajando
en Visual Studio. También analizamos
algunos de los cambios que se necesitarán tanto para el publicado hasta como para cualquier otro cliente arriba que significa que
necesita interactuar con él. Tenemos configuración publicada
nos prueba tanto para la función
como para nuestra app cliente, que realmente estaba ahí como demostrativa soy pieza pero realidad no son
los puntos focales, por lo que no pasó
demasiado tiempo en él. Pero pudimos desplegarlos usando canalizaciones CICD cortesía de GitHub y ver cómo tu mezcla
todo fácil y sin fisuras. También miramos algunas
opciones de seguridad para nuestras funciones hasta usando Azure AD y
todo todo puede simplemente fluir. Al final de esto, deberías poder
subir tus funciones 0,
subir a Azure y
listas para la producción.
38. Conclusión: Chicos, felicitaciones por llegar hasta el final de
este curso donde han aprendido todo lo que necesita
saber sobre las funciones. En este curso,
cubrimos
configurar una función 0
utilizando el portal. Cómo podemos escribir funciones aquí
mismo en el portal, los diferentes tipos de
disparadores que se pueden utilizar. Así que podemos tener una
función activada por blob versus un
temporizador activado uno, o tal vez la más
utilizada que es un disparador HTTP una función. También miró el hecho de que tiene diferentes modelos
de despliegue. Tienes el
sin servidor versus el plan premium versus el plan de consumo, cada uno con su propio beneficio. También pasamos por y construimos
nuestro propio conjunto de funciones que implementamos en su propio up y aplicaciones como
arrestar totalmente API. Aquí pudimos no
tener que escribir mucho código y no tener que preocuparnos por ningún servidor y configurar IIS. Todo lo que hicimos fue escribir un montón de funciones que interactúan con una base de datos Cosmos DB muy simple se
puede llamar desde
cualquier cliente hacia arriba. Una vez desplegados en un 0, miramos cómo
podemos acceder a ellos por Internet todo
el fin de semana
configurar políticas del curso para asegurarnos de que
sean totalmente accesibles. Todo lo que necesitamos es ese asterisco para decir que cualquiera puede acceder a él. También analizamos cómo podemos
asegurarlo usando Azure AD. A pesar del ejemplo
muy específico por que pasamos, también
exploramos
diferentes opciones de funciones como funciones
duraderas. Nos fijamos en los
diferentes tipos de fijaciones que se pueden utilizar. Y miramos todas las
diferentes herramientas que pueden juntarse para
ayudarnos a llegar a donde estamos. Entonces miramos a los emuladores, miramos las herramientas centrales, miramos Visual Studio
Code vs Visual Studio. Sea cual sea tu plataforma, hay una herramienta que
te atiende con todo lo dicho y hecho. Gracias por venir
conmigo en este viaje. Y no puedo esperar a
ver qué se produce.