Fundamentos de funciones de Microsoft | Trevoir Williams | Skillshare
Buscar

Velocidad de reproducción


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

Fundamentos de funciones de Microsoft

teacher avatar Trevoir Williams, Jamaican Software Engineer

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      Introducción

      1:47

    • 2.

      Introducción a funciones de Azure

      0:40

    • 3.

      Crear una aplicación de funciones

      9:10

    • 4.

      Activadores y enlaces

      5:23

    • 5.

      herramientas de desarrollo

      4:40

    • 6.

      Revisión de secciones

      1:29

    • 7.

      Funciones de Azure en el portal web

      0:45

    • 8.

      Crear una función activada por solicitud HTTP

      10:31

    • 9.

      Crear una función de temporizador

      2:57

    • 10.

      Crea una función disparada

      3:53

    • 11.

      Revisión de secciones: diferentes funciones

      3:47

    • 12.

      Funciones de Azure

      0:50

    • 13.

      Crear una aplicación de funciones

      3:38

    • 14.

      Función de pruebas en Visual Studio

      6:04

    • 15.

      Revisión de secciones: funciones en Visual Studio

      1:06

    • 16.

      Cómo usar herramientas básicas

      6:50

    • 17.

      Cómo usar código de estudio

      8:07

    • 18.

      Revisión de secciones: funciones de Azure en código de estudio

      1:00

    • 19.

      Vinculación de funciones de Azure y funciones durables

      0:41

    • 20.

      Vinculación de entrada y salida

      23:09

    • 21.

      Funciones duraderas y patrones de orquestación

      11:07

    • 22.

      Cómo crear una API REST sin servidor

      2:15

    • 23.

      Cómo configurar rutas API

      7:43

    • 24.

      Configuración de funciones de Azure HTTP

      4:46

    • 25.

      Cómo configurar funciones de Azure

      4:53

    • 26.

      Configuración de la función de Azure HTTP

      3:11

    • 27.

      Cómo configurar función de Azure HTTP

      1:20

    • 28.

      Funciones de Azure con PostMan

      4:57

    • 29.

      Funciones de prueba con interfaz de usuario

      12:01

    • 30.

      Interactúa con CosmosDB

      29:41

    • 31.

      Actualizaciones a la interfaz de usuario

      4:09

    • 32.

      Revisión de secciones: crear una API REST

      4:19

    • 33.

      Implementación de funciones

      0:25

    • 34.

      Cómo publicar funciones

      13:21

    • 35.

      Implementar y probar aplicación de interfaz blazor

      6:41

    • 36.

      Seguridad de instalación

      8:40

    • 37.

      Revisión de secciones

      1:02

    • 38.

      Conclusión

      2:01

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

110

Estudiantes

--

Proyecto

Acerca de esta clase

Azure Functions es una de las formas más rápidas y fáciles de ejecutar tu código en Azure

En este curso, Microsoft Azure Functions - desarrollar soluciones sin servidores, aprenderás cómo crear tus propias aplicaciones de Azure y visualizar cómo se pueden crear aplicaciones completas con un modelo potente y sencillo de Azure Functions. Exploraremos las herramientas necesarias para apoyar el desarrollo, tanto a nivel local como en el portal de Azure, y exploraremos los diferentes disparadores, vinculaciones y modelos de despliegue que son posibles.

En el camino aprenderás cómo hacerlo:

  • Cómo entender planes de Hosting

  • Explora opciones de lenguaje en C#, TypeScript y otras opciones de Azure

  • Cómo crear y administrar funciones

    • Cómo usar el portal de Azure

    • Cómo usar herramientas básicas de funciones de Azure

    • Cómo usar código de estudio visual (plataforma cruzada)

    • Cómo usar un estudio visual (2019/2022)

  • Comprende los vínculos y desencadenantes

  • Usa Azure CosmosDB con funciones de Azure

  • Monitorea funciones de Azure para obtener errores potenciales y rendimiento usando información de aplicaciones

  • Implementar aplicaciones de Azure

  • Crear una aplicación de clientes para interactuar con funciones

  • Explore la configuración de seguridad y proxy para aplicaciones de funciones de Azure

Al final de este curso deberías tener una comprensión fundamental de qué son las funciones de Microsoft Azure, cómo se pueden usar y cómo pueden interactuar con otros servicios. Este curso se alinea con la capacitación necesaria para el examen AZ-204: desarrollo de soluciones para Microsoft Azure, aunque no es una guía oficial de entrenamiento. Es perfecto para ti si necesitas saber lo suficiente sobre cómo desarrollar con funciones de Azure para ser funcional en tu espacio de trabajo sin tomar el examen.

Conoce a tu profesor(a)

Teacher Profile Image

Trevoir Williams

Jamaican Software Engineer

Profesor(a)
Level: All Levels

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

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.