Compléter ASP. Développement d'API Web de NET 5 | Trevoir Williams | Skillshare

Vitesse de lecture


1.0x


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

Compléter ASP. Développement d'API Web de NET 5

teacher avatar Trevoir Williams, Jamaican Software Engineer

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      Introduction

      3:49

    • 2.

      Installez Visual Studio 2019 Community Edition et . Net 5 SDK

      6:46

    • 3.

      MISE À JOUR : Installer Visual Studio 2022 Community Edition et . NET 6

      2:16

    • 4.

      Configurer le compte GitHub

      2:28

    • 5.

      Installer et explorer PostMan

      9:39

    • 6.

      Créer et faire un tour du projet d'API Web

      7:55

    • 7.

      MISE À JOUR - Mettez à niveau NET 6

      3:12

    • 8.

      Configurer la session en utilisant SeriLog

      14:17

    • 9.

      Explorer l'interface utilisateur de Swagger

      10:48

    • 10.

      Configuration de CORS

      6:40

    • 11.

      Examiner et ajouter des modifications à GitHub

      4:39

    • 12.

      Mettre en place un cadre de cours de données et d'entités

      26:12

    • 13.

      Donnez des graines dans les tables

      8:10

    • 14.

      Configurer des dépôts de service et l'injection de dépendance

      31:30

    • 15.

      MISE À JOUR - Type fort inclut pour l'unité de travail

      6:08

    • 16.

      Configurer AutoMapper et les DTO

      21:20

    • 17.

      Examiner et ajouter des modifications à GitHub

      3:28

    • 18.

      Aperçu - Configurer des points de terminaison

      4:49

    • 19.

      Construire GET Endpoint

      26:42

    • 20.

      Construire GET par Id Endpoint

      9:33

    • 21.

      Configurer Obtenir des points d'extrémité pour les hôtels

      4:03

    • 22.

      Touches finales et ajouter des modifications à GitHub

      0:48

    • 23.

      Sécuriser votre API - Aperçu de la section

      6:52

    • 24.

      Configurer le noyau d'identité d'utilisateur

      13:39

    • 25.

      Endpoint d'enregistrement des utilisateurs

      30:19

    • 26.

      IMPORTANT - Correction de point de fin d'enregistrement d'utilisateur

      0:56

    • 27.

      Ajouter des rôles d'utilisateur

      10:37

    • 28.

      Explorer les jetons Web de JSON

      5:10

    • 29.

      Implémenter l'authentification JWT

      31:39

    • 30.

      Protéger les Endpoints

      8:11

    • 31.

      Examiner et ajouter des modifications à GitHub

      0:22

    • 32.

      Construire le point de terminaison de POST

      13:35

    • 33.

      Construire le point d'extrémité de PUT

      23:38

    • 34.

      Construire le point d'extrémité de DELETE

      7:24

    • 35.

      Examiner et ajouter des modifications à GitHub

      0:44

    • 36.

      Fonctions à valeur ajoutée - Aperçu de la section

      1:16

    • 37.

      Implémenter la recherche

      17:51

    • 38.

      Traitement des erreurs mondiales

      11:25

    • 39.

      Implémenter la version d'API

      12:38

    • 40.

      Mettre en place le caching

      13:49

    • 41.

      Limiter les taux et limiter

      7:15

    • 42.

      Examiner et ajouter des modifications à GitHub

      3:24

    • 43.

      Modifications d'architecture - Aperçu de la section

      2:17

    • 44.

      Configurer le projet de modèles de données

      7:24

    • 45.

      Configurer le projet de base d'application

      10:50

    • 46.

      Nettoyer et tester

      15:25

    • 47.

      Examiner les modifications et les avantages

      15:00

    • 48.

      Configurer l'environnement d'hébergement - IIS et SQL Server

      6:39

    • 49.

      Publier une application dans IIS et SQL Server

      24:58

    • 50.

      Créer un compte Microsoft Azure

      7:12

    • 51.

      Déployer une application et une base de données sur Microsoft Azure

      17:27

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

303

apprenants

--

projet

À propos de ce cours

Présentation générale

Apprenez à créer une API RESTful en utilisant l'API ASP.Net Core et la structure d'entités, les pratiques de niveau d'entreprise pour une solution d'API Web évolutive et future. Nous mettrons en place différents outils de support pour la journalisation, la documentation, la sécurité et le traitement des erreurs.

ASP.NET Core en fonction du nouveau . Le runtime NET 5 est le cadre de création d'applications Web prêtes à l'emploi de Microsoft et multiplateforme. Dans ce cours, vous apprendrez tout ce que vous devez savoir sur la création d'une API RESTful en utilisant . NET 5, de la compréhension de la structure et des fichiers de dossiers, à la création et au déploiement d'une API Web complète.

Pourquoi apprendre ASP.NET Core / . NET 5

Microsoft . NET est la plate-forme qui mène la technologie d'entreprise de bon nombre des sociétés les plus importantes aux États-Unis et dans de nombreux autres pays. C'est la technologie prépondérante utilisée pour développer la technologie d'entreprise Les entreprises ont choisi . NET pour sa évolutivité, sa fiabilité et son support éprouvés.

Le . La langue de choix NET pour apprendre est le C #, car elle est l'une des langues les plus utilisées aujourd'hui. C'est un langage de programmation à usage général qui peut gérer presque n'importe quel problème, du bureau au téléphone mobile en passant par les applications Web dynamiques. En tant que tel, il existe une forte demande dans le monde pour . Développeurs de NET dans de nombreux secteurs d'activité, ce qui signifie que plus d'emplois sont disponibles pour les candidats avec une fondation reposée. Technologies NET.

Pourquoi apprendre à créer une API

L'API d'acronyme signifie interface de programmation d'application. La capacité de concevoir et de maintenir une API est un jeu d'outils important pour le développeur Web moderne. Il vous permet d'étendre l'accessibilité de votre logiciel à des applications externes et à d'autres développeurs, ce qui vous permet d'obtenir une solution logicielle plus globale.

Construire une base solide en . Noyau NET / . Programmation NET 5 :

  • Créer une API Web REST entièrement pilotée par les données en utilisant la technologie de pointe

  • Créer une base de données en utilisant le noyau de base de base de base d'entités

  • Unité de travail et modèle de dépôt générique

  • Injection de la dépendance

  • Configurer la connexion en utilisant SeriLog

  • Configurer la documentation d'API en utilisant SwaggerUI

  • Comprendre les principes de la conception de REST

  • Comprendre le C # 9 et . Syntaxe Web de base nette

  • Comprendre l'authentification des utilisateurs en utilisant les jetons Web JWT

  • Comprendre comment utiliser les objets de transfert de données et les objets use

  • Gérez les paquets avec le gestionnaire de NuGet

  • Comprendre . Flux de travail, outils et développement d'applications NET 5

  • Configurer GitHub pour le contrôle de la source

  • Déployer des applications et des bases de données sur Microsoft Azure

Contenu et aperçu

Pour suivre ce cours, vous aurez besoin d'une certaine connaissance de la programmation orientée objets, sinon C #. Même si vous n'avez pas beaucoup d'exposition au . Pile de développement NET, ce cours est très convivial pour les débutants et plein de conseils de développement.

C'est un cours énorme. Plus de 8 heures de contenu de qualité, mais brisé avec précision pour mettre en évidence un ensemble d'activités connexes en fonction de chaque module dans l'application en cours de création. Nous allons également examiner le dépannage et le débogage des erreurs au fur et à mesure que nous progressions, la mise en œuvre des meilleures pratiques, la rédaction de la logique efficace et la compréhension des raisons pour lesquelles les développeurs font les choses comme ils font. Vos connaissances s'approfondiront étape par étape tout au long du cours et vous serez amené à être le meilleur que vous pouvez être.

Nous ne faisons pas les choses de la façon parfaite la première fois ; ce n'est pas la réalité d'écrire du code. Nous commettons des erreurs et les pointons et les réparons autour d'eux. Ce faisant, nous développons la compétence en utilisant les outils et les techniques de débogage. Au moment où vous aurez terminé le cours, vous aurez évolué dans Visual Studio et examiné les erreurs de logique et de syntaxe, que ce sera la deuxième nature pour vous lorsque vous travaillez dans le . Environnement NET. Cela permettra de mettre vos nouvelles compétences en pratique et d'impressionner votre patron et vos collègues de travail.

Rencontrez votre enseignant·e

Teacher Profile Image

Trevoir Williams

Jamaican Software Engineer

Enseignant·e
Level: All Levels

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

Transcription

1. Introduction: Hey les gars, je voulais prendre ce temps pour vous accueillir à ce nouveau cours, ultime ASP.Net cinq API Web Development Guide. Maintenant, c'est le type est un multiple bots. Je peux vous assurer que le contenu court vie jusqu'au bâtiment. Dans ce cours, vous apprendrez comment créer une API Web maintenable en utilisant ASP.NET cinq, qui est le plus récent et le plus grand et Microsoft et le développement bloqué Entity Framework. nous explorerons de nombreux modèles de conception au niveau de l'entreprise en fonction des considérations relatives à la conception et à l'API. Je suis votre instructeur pour ce cours. Mon nom est vrai. Qui sont Williams ? Je suis ingénieur logiciel et professeur à temps partiel. Examinons ce qu'est une API, les lettres AP et IR, abrégé pour Application Programming Interface. peu près une API est une interface logicielle qui agit comme un intermédiaire entre deux applications. Donc, disons que vous pouvez accéder à Facebook comme des fonctionnalités à partir d'une application qui n'est pas une application Facebook. Donc, cela a le haut de Facebook et vous permettre de faire des choses live facebook. Eh bien, c'est communiquer avec Facebook via une API. Donc, dans ce cours, nous allons apprendre comment construire ce type d'interface pour permettre aux personnes d'accéder à un magasin de données sous-jacent que nous allons construire. fonctionnalités que nous allons construire utilisent des clients qu'ils auront besoin de construire, ce soit pour un mobile, un web ou tout autre type d'appareil. Donc, les API ou au moins le type d'API que nous allons construire sont basées sur les autres principes. Donc, nous allons apprendre poignet et arrêté court pour le transfert de l'état de représentation. C' est une norme d'API Web très populaire et il est utilisé sur de nombreuses plates-formes. Donc, même si nous allons construire l'API en utilisant .net core, l'API peut être consommée par les clients à partir de nombreuses autres piles de développement. En plus de cela, nous allons apprendre à utiliser Dominic core 5, nous allons chercher à comprendre les services et oh, tout le flux d'application fonctionne. Et nous chercherons également à utiliser le niveau de l'entreprise plus chaud. Donc les meilleures pratiques que nous pouvons mettre dans le code de telle sorte que lorsque nous sommes prêts à développer, ce soit par notre propre découverte de soi ou dans un environnement d'entreprise. Nous n'aurons pas à tirer trop de notre application pour le faire. Eh bien, on peut juste taper sur les composants au fur et à mesure. Donc, en un mot, vous allez apprendre ASP.Net cinq et Entity Framework vent à utiliser citation tout d'abord, c'est un développement incroyable et l'exploration. Encore une fois, les modèles d'encodage clés seront à la recherche l'authentification API en utilisant les jetons Web JSON sont JWT pour de courtes distances, nous pouvons les protéger plus haut que nos points de terminaison et les protéger contre les accès non autorisés ou indésirables. Nous allons examiner la compréhension du pipeline de service de base de Dark Net et tout ce que nous pouvons les étendre et les mettre dans notre propre middleware, avons regardé les tests d'API et la journalisation sobre en utilisant Postman et série pour nos tests d'API et les fins de journalisation respectueusement, et nous allons également regarder ensemble swagger peut jouer un rôle dans documentation de notre API et également aider à contrôler les sources artistiques. Nous allons utiliser GitHub afin que nous puissions stocker ou coder en toute sécurité et être en mesure de revenir en arrière si nous en avons besoin. Et puis nous regardons, après avoir construit sur toutes ces choses merveilleuses, comment exactement nous permettons d'accéder à notre API, que ce soit dans un environnement d'entreprise ou par le monde. Maintenant, ce cours a des principes de quelqu'un silencieux. Il dure environ dix heures et vous apprendrez beaucoup de choses. Alors en vrac, préparez-vous pour ce voyage et je suis très excité de vous avoir avec vous. 2. Installez des éditions de communauté de visuellement Studio 2019 et . Net 5 SDK: Hey les gars, aujourd'hui, nous allons commencer à installer Visual Studio Community Edition et .net 5. Maintenant, notre voyage commence ici sur le site Web Visual Studio, auquel vous pouvez accéder via une simple recherche Google. Ou vous pouvez essayer de reproduire cette URL, qui est Visual Studio dot microsoft.com slash VS communauté. Maintenant, il y a différents ajouts de Visual Studio. Et la communauté est celle qui est, elle est gratuite pour un usage individuel et c'est celle que nous allons utiliser. Vous pouvez donc aller de l'avant et télécharger Visual Studio, qui vous donnera le programme d'installation de Visual Studio. Et une fois que cela sera terminé, nous pourrons aller de l'avant et exécuter ce dossier. Nous lancerons les points de contrôle de sécurité que vous pourriez avoir, mais vous pouvez continuer à autoriser le programme d'installation à commencer. Et tout cela est là que vous définissez réellement ce dont Visual Studio sera capable. Ces charges sont donc appelées charges de travail, et chaque charge de travail vous expose un jeu de fonctionnalités différent. Donc, pour le développement web, vous voudrez obtenir la charge de travail ASP.NET et de développement web. Pour le développement de bureau. Vous souhaitez obtenir le développement de bureau net ou le téléchargement. Et pour tout autre SDK ou type de projet que vous souhaitez développer, vous pouvez aller de l'avant et obtenir la charge de travail qui lui est associée. Non, pour cet exercice, nous voulons préparer notre studio de résultats avec les ressources nécessaires pour le développement web. Encore une fois, vous pouvez aller de l'avant et prendre autant de charges de travail. Chacun sera livré avec sa propre taille et il vous indique combien d'espace est nécessaire en fonction de ceux que vous sélectionnez. Mais au minimum pour le développement web, vous voulez vous assurer que vous avez ASP.Net et le développement web coché. Vous pouvez aller de l'avant et prendre les autres outils de développement si vous le souhaitez. Mais je ne suis pas prêt à le faire parce que ce sont tous les framework .net 644.84.6, désolé, 4.74.8. Mais nous allons installer le document cinq dans quelques minutes afin que vous puissiez aller de l'avant et le faire et laisser Visual Studio installer. Cela prendra un certain temps afin que vous puissiez prendre une tasse de café et revenir. Maintenant, une fois que le téléchargement et l'installation sont terminés, vous avez deux options. Vous pouvez aller de l'avant et vous connecter. Et signe signifiant que vous vous connectez avec vos cônes vivants. Si vous en avez un, sinon, alors vous allez de l'avant et créez un. C' est gratuit et cela rend la vie plus facile si vous en créez un et vous connectez réellement. Mais je vais juste aller de l'avant avec une option non nulle peut-être plus tard. Ensuite, vous choisissez vos paramètres généraux. Donc, j'allume le thème sombre et vous pouvez choisir ce qu'ils veulent, quels paramètres de développement ou général. Je vais laisser le mien en général, même si nous faisons ce développement. Mais ils optimisent essentiellement certains raccourcis clavier et la mise en page en fonction de votre sélection. Je laisserai le mien en général. Je vais commencer par Visual Studio. Très bien, donc une fois que cela sera fait, vous serez invité avec cette neige. Si tu ne comprends pas ça, alors c'est bon. Mais voici pourquoi j'aurais suggéré que vous vous inscriviez avec leurs cônes de vie parce qu'alors tout ce que vous avez une période d'essai de 30 jours. Et si vous ne voulez pas du haut du cône, alors ils vous diront simplement de sortir. Donc, vous pouvez vraiment aller de l'avant et vous connecter. Donc je vais juste me connecter avec le mien. Et une fois que vous l'avez signé et puis vous verrez qu'il n'est pas sous licence pour vous et il semble juste soumettre plus invitant. Donc maintenant, au lieu de quitter Visual Studio, je peux fermer. Et c'est Visual Studio au niveau très basique. Maintenant, nous avons Visual Studio. Ce dont nous avons également besoin est .net cinq. Ainsi, vous pouvez accéder à la page de téléchargement net cinq à travers une simple recherche Google une fois de plus. Ou vous essayez de reproduire cette URL, celle que vous trouvez plus facile à faire. À ce stade, vous voulez télécharger le SDK et le moteur d'exécution. Alors laissez-moi commencer par fermer Visual Studio car il doit installer des extensions pour cela. Et l'installateur est toujours disponible pour vous. Donc, si vous ne parvenez pas à ajouter une charge de travail, juste pour que vous le sachiez, vous pouvez simplement cliquer sur modifier et puis il relancera ce pH avec tout le travailleur dirait que si plus tard vous voulez qu'il fasse quelque chose de nouveau, vous avez juste besoin de modifier cette charge de travail , puis vous obtiendrez ces modèles de projet en conséquence. Je vais fermer Visual Studio, cependant, afin que nous puissions continuer avec nos installations. Donc, nous allons avoir le .net 5. Maintenant, vous pouvez voir que les SDK disponibles en fonction de votre système d'exploitation, j'ai un système d'exploitation Windows 64 bits fonctionnant avec rétine, donc je vais aller de l'avant et télécharger cela. Et pendant que celui-ci est en téléchargement et juste Lindsay appuie sur le bouton Retour et passe à l'exécution, ce qui est absolument nécessaire pour l'hébergement. Donc, vous voyez que c'est le support d'exécution. Donc, si vous allez héberger l'application .net five sur, sur un serveur local, alors vous avez certainement besoin de l'exécution. Donc, vous pouvez simplement obtenir ce bundle d'hébergement qu'ils ont là disponible pour téléchargement. Donc, vous pouvez simplement télécharger les deux et quand ils sont tous les deux finis. Donc, lorsque les SDK ont terminé, vous pouvez aller de l'avant et installer ce 1 d'abord. Ça ne devrait pas prendre trop longtemps. Et d'accord, donc c'est réussi. Après avoir installé le SDK, nous voulons simplement nous assurer que nous avons le temps propre. Acceptez également n'importe quoi, et allez-y et exécutez votre installation. Et il vous fera savoir quand il est terminé avec succès, savoir que nous avons le SDK est complètement installé. Je voulais juste lancer Visual Studio et vous montrer ce que vous obtenez avec ces SDK. Donc, si je vais de l'avant et que je crée un tout nouveau projet en raison des charges de travail dont je dispose, je verrai différents modèles de projet. Donc, je n'ai choisi que le nœud de travail Web. Donc, j'ai la possibilité de faire une console régulière vers le haut. J' ai le noyau ASP.Net. En fait, je pense que celui-ci vient à cause de la charge de travail de bureau, mais à ce stade, je n'essaie pas de savoir qui a fonctionné, qui appartient à qui. Sachez juste que si vous allez faire notre projet web, vous avez la possibilité de choisir une application web de base, une application blazer, et vous pouvez les choisir si vous ne ferez pas pour R.net framework, quelqu'un pour choisir une application Web .NET Core. Ce n'est pas l'application réelle que nous construisons. Je vous montre juste vos options. Alors nous allons de l'avant et mettre le nom du projet pourrait créer. Ensuite, dans la liste déroulante ici, vous pouvez choisir si vous voulez un Core 2.13.1 ou le dernier core dominate 5. Et avec cela, vous serez en mesure de choisir les différents modèles et de procéder. Donc, quand nous reviendrons, nous allons réellement créer un projet et faire une visite des structures de dossiers. 3. MISE à JOUR : Installez des installations visuellement Studio de l'édition de communauté et . NET 6: Salut les gars. Dans cette leçon, nous allons installer Visual Studio 2022, qui est livré avec dotnet six, qui est le dotnet le plus rapide à ce jour. Donc, pour commencer, il suffit de passer aux téléchargements slash Microsoft.com de Visual Studio dot. Ensuite, nous allons aller de l'avant et le téléchargement gratuit sur l'édition communautaire, qui nous donnera ensuite un installateur. Une fois que nous aurons exécuté ce programme d'installation, nous serons en mesure de sélectionner les charges de travail souhaitées. Les charges de travail font vraiment référence aux bibliothèques ou aux bibliothèques qui prennent en charge le type d'application que vous souhaitez créer. Donc, dans ce cas, nous voulons absolument obtenir cette charge de travail de développement Web ASP.Net sur le développement Web. Mais si vous êtes intéressé par d'autres technologies, vous pouvez aller de l'avant et les sélectionner. Vous pouvez donc voir que plusieurs charges de travail sont sélectionnées avec le développement Azure, NodeJS et le développement de bureau. Vous pouvez donc y aller de l'avant et les diviser également. Je pense qu'ils seront utiles avec d'autres projets que vous pourriez finir par construire dans l'ensemble, une fois que vous aurez fait cela, vous pouvez aller de l'avant et cliquer sur Installer, une fois que vous aurez fait cela, vous pouvez aller de l'avant et cliquer sur Installer, ce qui se ferait dans le coin inférieur droit. Bien sûr, plus vous sélectionnez de charges de travail, plus la taille du téléchargement est grande. Une fois que vous avez terminé cela, vous pouvez continuer. Maintenant, lorsque ce téléchargement est terminé, vous pouvez obtenir certaines options que je n'obtiendrai pas car je l'ai déjà installé. Cela va donc vous guider à quoi je m'attends ? Vous pouvez obtenir une option où vous pourrez choisir votre thème. Comme vous pouvez le voir, j'utilise le thème sombre, mais vous avez l'option d' un thème clair, un thème bleu. Et le fait est que Visual Studio 22 a beaucoup plus de thèmes que ses prédécesseurs. Ainsi, même si vous ne voulez pas éclairer les thèmes initiaux, vous pouvez obtenir tous les thèmes si vous en avez besoin. se peut également que vous soyez invité à vous connecter. Donc, si 2019 est déjà installé sur votre machine et que vous venez d'être installé en 2022, vous êtes déjà connecté à 2019, cela ne vous demandera probablement pas de vous connecter à nouveau. Cependant, s'il s'agit de votre première installation de Visual Studio, vous serez peut-être invité à vous connecter ou à créer un compte en direct, à quel point vous voudriez simplement utiliser votre Microsoft émis en direct à tous les loci, on m'apprend un lot com cones, ou vous pouvez simplement aller de l'avant et en créer un. Et si ma mémoire me sert correctement, vous pouvez utiliser une autre adresse e-mail non Microsoft, sécrète la salive, le froid. 4. Compte de configuration GitHub: Hé les gars, dans cette vidéo, nous allons créer ou des comptes GitHub. Et c'est un truc très simple, devient vieux, il est très facile pour nous de s'inscrire. Vous avez juste besoin d'aller sur GitHub.com. Est-ce GIT HUB DOT COM, github.com, et vous atterrissez sur cette page. Maintenant, à partir d'ici, si vous avez déjà un compte et vous pouvez vous connecter et vous pouvez à peu près arrêter de regarder la vidéo ici. Si tu ne le fais pas. Cependant, alors la forme centrale est juste ici. Vous pouvez faire un peu de lecture, juste obtenir une appréciation de ce que GitHub est quatre et il est tout au sujet, ils ont des prix, donc ils offrent plans d'entreprise et des plans d'éducation et différentes plantes ou situations différentes . Mais pour le développeur solaire ou pour les très petites équipes qui peuvent ne pas être au niveau de l'entreprise qu'elles ne le font. Vous donner beaucoup de choses gratuitement. Donc, pour vous inscrire, il suffit de mettre un nom d'utilisateur et une adresse e-mail et un mot de passe. Et une fois que vous avez fourni toutes ces choses et à condition que votre nom d'utilisateur soit assez unique , bien sûr, vous cliquez sur vous inscrire à GitHub et vous devriez être dans. J' ai déjà un compte, donc je vais vraiment me connecter. Vous avez vu que mes sourcils deviennent folles en essayant de fournir des informations. Je vais donc me connecter avec mon compte existant. Donc c'est mon bien, vous pouvez utiliser votre nom d'utilisateur ou vos adresses e-mail pour vous connecter et le mot de passe. Et je suis là, c'est ma page d'accueil, donc ils vous donnent un sentiment de communauté. C' est presque comme un Facebook pour les développeurs dans une certaine mesure, vous pouvez suivre les gens. Et une fois qu'ils suivent des personnes, vous voyez leurs activités sur la page de destination, vous pouvez accéder à votre référentiel. Donc, évidemment, si vous êtes nouveau à vous lever, alors vous n'auriez rien répertorié sur le côté ici. Ce que je ne suis pas nouveau. J' ai été assez occupé à mettre du contenu sur YouTube, presque n'importe quel petit projet d'animal de compagnie que je commence, j'ai un dépôt GitHub ou en fait j'ai besoin de le parcourir. J' ai aussi demandé aux étudiants de m'ajouter à leur repos dans le passé pour que nous puissions collaborer. Peut-être qu'ils avaient un problème et je pourrais juste vérifier leur code via le dépôt. Toutes ces choses sont possibles grâce à cette photo verbale. Mais une fois que tu as créé tes cônes et que tu es connecté, tu ne verrais pas ce que je vois une fois de plus. Mais alors cela compléterait l'inscription. 5. Installez et explorez PostMan: Hé les gars, dans cette vidéo, nous allons installer facteur ou la porcelaine est un excellent outil pour la collaboration et les tests APA et la validation sur toutes ces choses merveilleuses. C' est donc assez facile à installer vraiment. Vous allez juste mettre en pause man.com. Postman ne lumière Luca qui livre votre courrier, Horstmann.com. Tu ne connais pas le haut. Et bien sûr, vous choisissez votre huile. Donc, Windows 64 bits, puis le téléchargement démarre. Très bien, donc une fois que le téléchargement est terminé, vous pouvez aller de l'avant et ouvrir le fichier d'installation, exécuter le programme d'installation. Très bien, donc quand il est terminé, vous verrez soit un écran vous invitant à vous inscrire ou à vous connecter, soit vous verrez cet écran d'une façon ou d'une autre, si vous voyez quelque chose pour vous connecter, je vous encourage à le faire. En fait, il était déjà sur ma machine. Donc, le flux peut ne pas être exactement comme ça. Mais si vous voyez cette page apparaître, alors c'est bon. Vous pouvez simplement cliquer sur le X et vous pouvez l'enlever. Et je ne suis pas connecté de toute façon. Donc, si vous voyez le hors écran regarder quelque chose comme ça, alors vous pouvez juste aller de l'avant et créer un cônes soluble. Ils peuvent créer un OK cônes assez facilement nom d'utilisateur, mot de passe, ou vous simplement vous connecter avec Google. J' aime simplement me connecter avec Google. Et le fait est que l'analyseur gardera un historique de chaque test auquel vous êtes allé une fois que vous aurez sur les cônes. D' accord, donc je vais juste aller de l'avant et me connecter avec Google. Ou c'est allumé. Une fois connecté, vous savez que vous pouvez commencer à travailler. Je vais vous montrer un échantillon de ce que le Facteur est capable de faire. Tout d'abord, je vais suggérer que c'est un mode sombre parce que le mode est cool. Et puis je vais créer une nouvelle fenêtre de requête. Donc, en utilisant ce signe plus, tout comme n'importe quel navigateur avec les signes plus en haut, vous pouvez voir un signe plus, et cela vous donne une nouvelle requête. Maintenant, je suis déjà allé de l'avant et chercher des API publiques, comme nous l'avons discuté, la base des API doit gagner notre passerelle dans votre base de données. Donc, les gens ont des API, diverses personnes ont des API. Et j'ai trouvé ce site n'importe quel tableau de bord api.com. Et juste triangle retour au tout premier bit afin que vous puissiez voir ce qu'ils ont à offrir. Donc, à partir de la page de destination, les pairs vous émettent un tas d'API publiques face. Donc tu y vas, tu peux juste aller de l'avant et cliquer sur un et, tu sais, tester ça. Alors je suis allé au dictionnaire Oxford où j'aurais une liste de langues. Donc ils vous montrent tous les points de terminaison, non ? Donc, en construisant toute l'API, ils lient à la base de données shore dab, une URL commune, mais ils ont ensuite différents points de terminaison qui donneront différents bits d'informations. Et puis ils ont différentes méthodes, GET et poster et mettre en dehors d'autres. Mais le fait est que vous devez connaître le type de demande. Vous devez connaître l'URL à travers laquelle vous pouvez obtenir cette demande satisfaite. Vous devez savoir si vous devez passer dans les en-têtes. Donc ici, je sais que j'ai besoin d'applications. Et l'identification. Et puis ils me montrent les réponses. Donc 200 signifie o, t, et les hommes initiaux exemple dans JSON ce que serait cette réponse. Et puis 404 signifie introuvable. 500 signifie qu'il y a une erreur interne habituellement avec le serveur domestique, pas avec vous, non ? Donc pour Musa, vous êtes probablement à la recherche de quelque chose qui n'existe pas. 500 signifie que le fournisseur d'API a une erreur. D' accord, donc je suis passé de n'importe quelle API et je voulais libérer, pour les cotons de points d'api forex gratuits, désolé, donc j'ai regardé de plus près n'importe quelle URL d'API car toutes ces API sont nécessaires, que vous auriez de l'air chaud sans cônes B, notre utilisateur enregistré probablement être utilisateur de ces plates-formes que vous pouvez regarder à travers, vous voyez Instagram est un YouTube, Google. La plupart d'entre eux sont prédits API, donc ils utilisent donc maman sécurité auto ou possédait. Et nous allons passer en revue toutes ces techniques dans ce cours. Mais en ce moment, je veux juste commencer par une victoire rapide et la satisfaction de voir ce que le facteur peut faire et la pertinence de celui-ci, non ? Donc, j'ai appelé libre forex api.com, juste à nouveau pour arrêter qui est en libre pour api.com. Et puis nous irons avec la documentation pour que la page de destination soit en fait leur démo d'eux consommant les données via l'API qu'ils exposent, n'est-ce pas ? Ils ont donc une API intégrée de base de données. Et puis le, ils font une série d' appels API pour montrer l'indice de trading entre l'euro, USD vous êtes et GBP, etcetera, etcetera. Donc, si je vais à la documentation, ils me donneront les Conditions d'utilisation, me diront comment l'utiliser. Donc, la documentation est très, très importante et vitale en ce qui concerne les API, j'utiliserai l'interface utilisateur swagger triter pour notre swash vocal. Lorsque nous y arriverons, vous verrez, mais nous nous concentrerons sur la documentation de nos API dans une large mesure également. Donc, à partir d'ici, ils vous montrent que vous avez le, c'est le domaine sur lequel l'API est hébergée, n'est-ce pas ? Ensuite, lorsque vous faites défiler vers le bas, vous verrez les différents types de fonctionnalités qu'ils ont exposées. Donc c'est une bonne bêta, non ? Et puis ils me disent la demande, c'est une requête GET. Et puis vous avez le, le, les points de terminaison, désolé, l'URL et le point de terminaison, c'est à quoi il doit ressembler. Et c'est une réponse de l'échantillonneur. Très bien, et si vous regardez à travers, vous en voyez un autre. Vous pouvez obtenir différents pairs. Donc, ici, vous allez regarder, il sera Euro-USD E1 et le retour que les résultats de cette requête pour vous. Et puis dans celui-ci, vous pouvez en obtenir plus d'un si vous voulez. Donc, vous venez de mettre les deux index qui vous intéressent en tant que paramètre dans ce point de terminaison. Très bien, donc c'est une chaîne de requête pour les valeurs sur lesquelles les requêtes sont. Et puis c'est la réponse de l'API. Une fois que les requêtes sont une donnée NDA est appelée. Non, les accords flèches racontent une bonne histoire parce que vous passez dans des périodes qui n'existent pas dans leur système qu'ils vous disent que si vous ne passez pas dans un paramètre est nécessaire et si vous passez quelque chose ce n'est pas là, alors vous verrez un code d'erreur 102. Donc, vous avez des codes d'erreur standard et vous avez quelques miracles. Vous pouvez faire vous-même. Essayons cet échantillon. Donc, je vais essayer le premier où je reçois l'euro et l'USD. Donc je vais juste copier ce lien, ce qu'ils ont dit, c'est tout ce que vous obtenez aux données sur ce point final. Et puis je vais ouvrir le Facteur. Et puis ce que je vais faire est percé à l'intérieur de cet ensemble dit entrer l'URL de requête, c'est ce que nous venons de copier, non ? Demande. Et l'URL, je colle l'URL de la requête. Et puis le verbe ici, LC peut faire GET, post, PUT, patch, supprimer, vous en avez un tas. Donc, get est généralement utilisé lorsque vous attendez à récupérer des données, n'est-ce pas ? Alors obtenez et puis gratuit pour son API. Eh bien, quelle que soit l'URL de la requête, non, elle est attachée à la mémoire parce qu'elle est là dans la documentation. Et puis je vais cliquer sur Envoyer, savoir ce que fait le facteur est imiter un appel. Eh bien, pas vraiment imiter, il effectue réellement l'appel à ce point de terminaison API, puis récupère les données dans la réponse. Donc, nous voyons ici, il peut ne pas être aussi bien formaté que dans la documentation. Bien sûr, ils mettent leur meilleur pied en avant. Que fait le même bit d'information où obtenir une lecture et nous obtenons un horodatage et ou obtenir le code de 200. Si vous regardez à droite, vous verrez le Status 200. D' accord ? Donc 200 est l'univers de réponse pour tous les k. Une fois que vous obtenez une réponse 200, vous savez que tout va bien. Donc les différents nombres ont des significations différentes des mots, n'est-ce pas ? Le temps qu'il m'a fallu le coût. Donc, c'est une API rapide a pris seulement que c'est quoi, 2.5ème et la taille de la réponse, non ? Ainsi, vous pouvez toujours formaté. Donc, cela, vous pouvez cliquer sur joli, ou vous pouvez dire brut ou prévisualiser ou visualiser. Je ne sais pas pourquoi je suis jolie, Oh, c'est juste après avoir changé le format. Donc, c'est assez HTML. Donc, tout ça est bon. Et en regardant cela, je peux dire quelque chose comme XML et ce n'est pas XML. J' ai dit HTML. Laissez-moi cliquer sur JSON, ce qu'il est, et nous y allons. Donc maintenant, c'est joli JSON. Donc maintenant, ça a l'air un peu plus radical, qui est présenté dans leur documentation, n'est-ce pas ? Donc, Postman est très pratique lorsque vous voulez juste tester à quoi ressemblera la réponse. Json est la réponse la plus largement utilisée que je vois que vaguement, j'aime utiliser les réponses JSON. Quelle est l'alternative de Clausius à cela serait XML. Et une fois que les données sont retournées que l'utilisateur attend et que vous ayez documenté ce qu'il peut attendre, alors vous êtes sûr que tout le monde peut utiliser APA au besoin. Donc, Postman va être utile pendant que nous allons bateaux développer notre APN, Je veux juste valider que les réponses ressemblent à ce que nous attendons d'eux. 6. Créer et tour du projet d'API Web: Hé les gars, bienvenue. Donc, la première chose que nous devons faire avoir Donc environnement en deux parties et tout est de créer nos projets. Donc, ce que nous allons faire est de lancer Visual Studio. Et puis nous allons créer un nouveau projet. Maintenant, à partir d'ici, vous pouvez choisir le modèle que vous voulez si vous avez l'application Web de base ASP.NET en haut, allez-y et sélectionnez-le. Si vous ne le faites pas, alors vous pouvez simplement taper le web dans ce filtre et il va filtrer ne pas porter vont être en utilisant C-Sharp. Assurez-vous donc que C-Sharp est sélectionné. Et alors que vous n'avez pas à changer beaucoup d'autre, mais de sélectionner les modèles souhaités et aller de l'avant et cliquez sur Suivant. Non, nous allons construire une API de liste d'hôtels. Donc, je vais appeler ma liste d'hôtels de projet. Maintenant que nous avons que nous n'avons pas à changer beaucoup d'autres choses. Nous pouvons aller de l'avant et cliquer sur Créer. Si vous voulez sélectionner un emplacement spécifique, vous pouvez aller de l'avant et le faire. Sinon, procédez à la création. L' étape suivante a une sélection du stock que nous avons l'intention d'utiliser. Non, vous auriez déjà installé le SDK .net cinq et Visual Studio 2090. Et donc vous auriez dû l'obtenir ou 5 As, en option. Si vous ne l'avez pas, alors vous devriez avoir 3.1. Quoi qu'il en soit. Vous Candace double-retour, allez-y et installez le SDK. revue cette vidéo si vous devez vous assurer que tout est installé. Et puis vous pouvez aller de l'avant et sélectionner 5. Et nous allons construire une API Web ASP.NET Core. Maintenant, à droite, nous avons la possibilité d'ajouter l'authentification et de configurer d'autres choses. Donc nous laissons tout tel quel. Nous ne configurerons pas l'authentification ici parce que les options qui nous sont données ne sont pas vraiment ce que nous voulons. Donc, nous allons configurer manuellement cela plus tard. Et ce serait un bon exercice pour vous aider à comprendre comment le noyau d'identité est intégré dans votre API. Mais on peut le laisser comme aucune authentification, n'est-ce pas ? Null. Ensuite, nous pouvons aller de l'avant et cliquer sur Créer. Donc maintenant, c'est notre projet a été créé. Le, juste le point, oh, avant d'aller beaucoup plus loin, la disposition de mon Visual Studio signifie différente de vôtre parce que j'ai tendance à utiliser l'Explorateur de solutions. Sur ma gauche. Par défaut, il devrait être sur la droite, serait sur la droite. Donc c'est probablement à ça que vous ressemblez. Soit nous pouvons toujours le faire glisser et le mettre où vous voulez. J' aime l'avoir à gauche, donc c' est là que je vais utiliser le mien. Maintenant, l'Explorateur de solutions nous donne une liste de fichiers et je suis juste en train de passer par cela dans les cas est votre première fois en créant un projet .net. Si ce n'est pas le cas, alors je vais juste passer en revue de toute façon parce que, vous savez, répétition Newtons sous pression et peut-être que je vais pointer ou quelque chose que vous ne saviez pas avant. Mais hé, donc la première chose que nous allons vouloir regarder est notre dossier de propriétés. Laisse-moi, laisse-moi recommencer. Nous avons donc ce que nous appelons la solution, qui est comme un manifeste pour la liste des projets qui sont dans cette solution que nous construisons. Le projet est la liste des hôtels. Je remarque quand je clique dessus. C' est vraiment juste un fichier XML avec un tas de configurations sur listes et toutes les choses nécessaires pour que le projet sache quelle est son identité. Donc, parce que nous avons choisi .net 5, vous voyez que c'est le framework cible. Si nous choisissons, 3.1 verrait quelque chose de différent là-bas sous les propriétés ou les lirait sur les dépendances, nous voyons des analyseurs, des frameworks, paquets au fur et à mesure que nous allons, vous voyez cette liste grandir, alors n'obtenez pas trop dans ce qui se passe là-bas. Nous regardons les propriétés, nous voyons les paramètres de la pelouse. Donc ici, c'est comme juste des configurations, dites à l'application et comment elle devrait se comporter lorsque nous sommes en mode débogage. Donc, ce qui est très important ici, c'est que nous lui avons permis de configurer SSL ou HTTPS lorsque nous sommes d'accord sur un projet. En conséquence, nous avons ce port SSL. Donc, lorsque nous faisons notre application et les tests et ainsi de suite sera à la barre oblique HTTPS deux-points barre oblique locale hôte. Et puis parce que HTTPS où l'utilisation du port SSL, sinon ce serait le point de terminaison HTTP moins sécurisé. Donc c'est juste une petite chose que je montre tout son contraire, les autres configurations dans lesquelles nous allons entrer en cours. Dossier plus de contrôleurs, qui vraiment les tuyaux sont bien des contrôleurs et ceux-ci font exactement ce que le nom suggère. Ils contrôlaient l'application à travers la logique ou tout va. Lorsque nous recevons une demande d'information sainte interprétée, et tous ces comportements seraient définis à l'intérieur de nos contrôleurs. Ce sont les premières lignes de défense. Onesy chauffe un point de terminaison API, vous venez en fait à un contrôleur. Et puis il dirait, OK, quel point de terminaison ou assis, que dois-je faire ? Et puis il reviendra en conséquence. Encore une fois, au fur et à mesure que nous continuons, vous verrez que cela prend vie. D' accord, je vais passer à notre point bouleversant JSON, qui n'a pas grand-chose. On va modifier ça. Est-ce qu'il s'en va ? Mais laissez-moi passer au program.cs, qui est le point de départ de nos applications. Donc, ici, vous voyez qu'il exécute cette fonction principale si vous avez déjà fait autre langage ou développé dans un C-Sharp applications console, vous remarquez que je commence toujours avec principal, au moins voir plus-plus C-Sharp Java. Toutes ces langues ont au moins une méthode moyenne, non ? Donc, une fois que nous exécutons notre API va atteindre la moyenne, puis principal va fondamentalement faire comme un bâtiment. Donc, ce qu'il fait est qu'il agrège tous les middlewares sur la fonctionnalité et met dans l'application. Donc, il appelle cette méthode, qui est vraiment définie juste en dessous. Et il fait ses initialisations en fonction de ce qui est dans notre fichier de démarrage. Donc, si je vais au démarrage, voici où vous voyez où tous les middlewares sont ajoutés et les configurations sont appelées au get-go. Donc, ici, nous voyons où il veut utiliser des contrôleurs, ajouter toutes les bibliothèques que vous avez besoin d'ajouter afin que nous puissions utiliser nos contrôleurs. Configuration swagger, solo. Traditionnellement swagger aurait été, vous devriez implémenter cet argent tôt depuis cette version de l'API .net, il sort de la boîte donc nous n'avons pas à faire trop de travail, mais nous allons explorer ce que swagger est plus tard, au cas où vous n'êtes pas tout à fait sûr de ce que c'est. Nous sommes donc des configurations ou des services de configuration. Désolé, nous avons configuré qui nous permet de configurer d'autres fonctionnalités. Donc, sans trop y entrer, certains d'entre eux sont explicites, certains d'entre eux sont pour des raisons de sécurité. Comme tous sont vraiment gentils, les hubs, et nous allons ajouter de plus en plus à mesure que nous mettons plus de fonctionnalités dans notre API. Ne vous inquiétez pas trop à ce sujet. La phase finale de cette solution serait simplement ce modèle. Donc, ce modèle représente simplement fondamentalement bêta ou une unité de données fortement typée. Et nous définirons de nombreux modèles et objets de transfert de données plus tard. Mais pour l'instant, nous avons créé notre projet. Nous devrions avoir une bonne compréhension de ce que nous envisageons à l'intérieur de cette solution. Et quand nous reviendrons, nous commencerons à configurer notre premier service mort d'application sous forme de journalisation. 7. MISE à JOUR - Mà à atteignez-vous NET 6: Hé les gars, Dans cette leçon, nous allons envisager de mettre à niveau notre projet à partir de dotnet 52, dotnet six et tout cela est complètement facultatif et une condition préalable pour cela est que vous avez réellement installé Déjà Visual Studio 2022. Donc, si vous vous sentez plus à l'aise de passer simplement avec dotnet five et Visual Studio 2019, cela ne pose absolument aucun problème. Cependant, si vous voulez faire ce petit pas et aller à la recherche de Dotnet, c'est ce que je vais vous guider à faire. En fin de compte, même si vous faites cela, mettez à niveau, tout le reste du cours conviendra car dotnet six est inversé compatible avec tout pour dotnet cinq. Donc, sauf ces quelques changements, tout le reste devrait fonctionner. Le premier changement majeur que nous allons apporter est donc un cadre cible. Donc, pour le fichier CSB, il s' agit du fichier de projet en haut ici. Vous allez cliquer dessus , puis il deviendra modifiable. Vous voulez donc changer cela de dotnet cinq à dotnet six. En plus de cette modification apportée à ce fichier, nous voudrons ajouter deux nouvelles références de bibliothèque. Et ceux-ci viendront sous la forme de Microsoft, pas ASP NET Cord Dot JSON Patch, qui sera la version 6 et abstractions de mise en cache de points d'extension Microsoft, qui est également dotnet six. Donc, si vous effectuez cet ajustement, tous les paquets que vous utiliserez la moitié seront pour dotnet six. Donc, pendant la durée du cours, majeure partie se fait en dotnet cinq. Vous me verrez faire référence à dotnet cinq bibliothèques. Mais tout ce que vous avez à faire, c'est de vous assurer d'utiliser dotnet six au lieu de dotnet cinq. Donc, maintenant, ne déchirons pas le fichier de paramètres et c'est en fait facultatif. Mais ils ont supprimé les bibliothèques de journalisation à vie de Microsoft on Microsoft Dot Hosting, et ils l'ont remplacée par avertissement Microsoft dot ASP NET Core. Vous pouvez donc aller de l'avant et faire face à ce changement. Une fois que vous avez fait tout cela, vous voulez simplement effectuer Control Shift et B qui réalise une génération, ou vous pouvez simplement créer et cliquer sur Build solution. Et ensuite, vous verrez probablement quelques zones au-dessus la cible, du projet cible. Passons donc simplement aux projets. Accédez à New get, Gérer les packages NuGet. Si vous n'êtes pas très familier avec ce que vous obtenez, est-ce que nous examinons plus en détail dans le cours. Mais pour l'instant, le problème est que certaines de nos bibliothèques sont toujours en dotnet cinq. Comme je l'ai dit, au lieu de référencer dotnet 5, nous ferons référence à la version de dotnet six. vous suffit donc de passer aux mises à jour. Sélectionnez tout le compartiment est, faites une mise à jour. Acceptez tous les problèmes qui surviennent. Et une fois que vous avez fait cela, vous pouvez probablement reconstruire. Parfois, un constructeur ne ramasse pas tout. Ainsi, lorsque vous effectuez une reconstruction, elle sera nettoyée, puis restaurée, puis construite. Et puis nous voyons qu'un a réussi. Nous savons donc que notre projet a été mis à jour avec succès pour dominer les recherches. Vous pouvez donc aller de l'avant et terminer le reste de ce cours et vous amuser avec tout ce que vous allez faire. 8. Configurer les logging à l'aide SeriLog: Bienvenue les gars. Donc, dans cette leçon, nous allons mettre en place nos utilitaires logger. Donc notre arme de choix pour celui-ci sera en série. Cela dit, il y a pas mal d'outils potentiels qui sont là, disons UP SIR log n, log, log for net, au moins ce sont trois que j'ai utilisé et je suis sûr qu'il y en a d'autres. Non, j'utilise le journal série car il est incliné comme le plus rapide là-bas. Et il est très populaire dans la communauté des développeurs. Mais soyez très objectif lors du choix de votre outil. Je vais vous accompagner dans la configuration du journal Syria et la configuration des autres peut avoir quelques variations, mais en fin de compte, ils sont tous orientés vers la même chose qui consiste à enregistrer votre activité d'application. Non, permettez-moi d'expliquer ce que je veux dire par journalisation de l'activité de l'application. Il y a des moments où des événements inattendus se produisent et s'il se produit null et que vous en entendez parler cinq minutes plus tard ou même l'instant après qu'il se produise. Parfois, c'est difficile à suivre, surtout dans ce contexte ou c'est une API. n'y a pas d'interface utilisateur réelle, pas de commentaires réels, sauf en cas d'erreur qui s'est produite. Donc, en utilisant cet utilitaire de connexion sera en mesure de prendre des notes option qui a déclenché wat à la réponse qui se serait avéré être une réponse d'erreur. Et même alors, nous pouvons voir les détails de la réponse d'erreur définie. Commençons donc à configurer notre journalisation. Il faut donc que la bibliothèque soit associée à la sortie série. Donc, je vais juste faire un clic droit sur le projet, aller à gérer de nouveaux paquets get. Et puis nous allons regarder dans la section des arrondissements. Voilà donc ce que nous avons installé. Vos versions peuvent être différentes de la mienne. Et si vous êtes invité à mettre à jour, soyez prudent que vous devriez être en mesure de mettre à jour le Microsoft sur CFD assez, mais juste être prudent lorsque vous faites et doit être prêt à Roebuck au cas où quoi que ce soit Grecs. Jusqu' à présent, non, nous allons parcourir et nous cherchons Syria Log dot ASP.NET Core. Donc tu verras celui-là, mais ce n'est pas celui qu'on veut. Nous voulons points ASP.NET Core. Celui-ci a une bibliothèque dédiée à notre type de projet. Donc, nous pouvons aller de l'avant et l'installer encore une fois, si la version est différente, cela ne devrait pas être un problème majeur. Et pour tous les problèmes que vous obtenez, allez-y et répondez par l'affirmative. Et puis une fois que cela est fait, nous allons juste nous diriger vers notre program.cs et commencer notre configuration. Donc, tout ce que nous devons faire est de laisser l'application ni celle où allez-vous utiliser Siri log au lieu de l'enregistreur par défaut fourni avec le projet. Parce que si vous regardez en colère, vous voyez qu'il y a un semblant d'enregistreur. Ils vous donnent quelques configurations, mais ce n'est pas aussi robuste que ce que nous voulons, n'est-ce pas ? Donc Cirillo construit en plus de cela et il nous permet de remplacer. Donc, je vais descendre chez le constructeur de trous pour les yeux. Et la première chose que je vais faire est de faire une nouvelle ligne sur ça sur leur terrain 20 et les points utilisent et droit, Siri journal. D' accord. Donc une fois que je le ferai, ça va me dire ce que j'ai besoin d'inclure cette bibliothèque. Donc, utilisez votre journal après inclure que l'instruction d'utilisation. Eh bien, ce n'est pas tout. Ce n'est pas quelque chose que le début cousu sait que nous avons cette bibliothèque ici. Nous pouvons maintenant revenir en arrière et configurer. Donc, je fais juste prendre ce cartilage de la roue parce que dans le bus, je l'avoue, j'ai oublié de le mettre. Donc, nous n'obtenons rien de la façon et continuons à modifier notre application principale, qui va initialiser notre enregistreur lorsque l'application commence savon et où finit Poutine certains scénarios de journal de test juste ici dans la moyenne que notre cas de test. Donc, ce que je veux faire est de configurer un objet logger. Donc, je vais dire que l'enregistreur de points de journal est égal à une nouvelle configuration d'enregistreur. D' accord, donc ce que cela va nous permettre de faire est de définir des valeurs par défaut et des comportements attendus pour notre enregistreur. Donc, je vais juste être en rupture alignée avec chaque configuration que j'ajoute est allé à c point. Et la première configuration que je veux est juste, outil, puis noeuds à nouveau. Et puis vous voyez ici, ils ont différentes options. Donc tiré sur la console appelé Alltop la boîte, mais ensuite ils parlent des éviers. Ainsi, il peut télécharger des bibliothèques spécifiques pour que vous puissiez aimer une base de données. Vous pouvez enregistrer deux autres fichiers ou types de fichiers différents en fonction de la façon dont vous avez besoin bateau, n'est-ce pas ? Non, je ne suis intéressé que par le fichier plus tard sur cette petite base de données de bar et ainsi de suite. Nous pouvons double-retour sur Ajouter un outil de journalisation de base de données ou une suite d'outils. Donc oui, non, je vois juste le droit de déposer. Et puis cela prend quelques paramètres. Donc, je vais simplement nommer les paramètres parce que je ne vais pas nécessairement les lier l'ordre spécifique qu'ils sont nécessaires ici dans les constructeurs ou dans les surcharges plutôt, non ? Donc le premier que je vais écrire est le chemin. Chemin signifie où ce fichier doit-il être créé ? Quand il doit être créé ou les annonces sur le chemin doit être une chaîne. Donc, je ne veux pas définir un chemin défini et je vais juste passer un peu de temps et expliquer ici. Encore une fois, les règles de contexte. Premièrement, vous voudrez peut-être disposer d'un chemin de journalisation central, car une fois que vous avez déployé votre API sur un serveur, vous ne voulez pas dépenser pour deviner où le logo, où se trouve le journal, vous ne voudrez peut-être pas qu'il soit dans le projet réel. droite. Parce que j'ai eu un fichier journal ici qui vient d'être supprimé, certes. Mais vous pouvez ne pas le vouloir dans un projet parce que quelqu'un de Broglie et l'application peut ne pas nécessairement, vous ne voulez pas nécessairement qu'ils entrent dans les fichiers du projet sur le serveur pour pouvoir accéder aux pattes. Ainsi, vous pouvez définir quelque part sur le réseau et vous pouvez définir sur un autre lecteur. Vous pouvez simplement mettre dans un chemin ici où vous savez, vous voulez que vos fichiers journaux visent. Donc je vais voir quelque chose comme la barre oblique du côlon C et quand dire hôtel. Donc je sais exactement à quelle obligation je fais face quand je vois le dossier, listes d' hôtels, les journaux de barre oblique, non ? C' est mon patron que je suis en train de définir. Donc je ne dis pas que vous devez définir l'endroit si c'est le disque D pour vous. Si vous ne voulez pas mettre dans les journaux, c'est à vous de décider, n'est-ce pas. Mais je vous recommande juste de le rendre facilement accessible ou assez accessible. Vous pouvez le trouver quand vous en avez besoin. D' accord. Donc, voir les listes d'hôtels, les journaux, et puis je vais juste donner mon fichier journal tiret point TXT. Donc, je vais expliquer que sont apparemment tiret aléatoire dans quelques-uns. C' est donc mon chemin de fichier. Jusqu' à présent, beaucoup de flèches, mais continuons et voyons ce que ceux-là, donc je suis juste en train de briser les lignes pour qu'on puisse tout voir. D' accord. Cette rupture et faire un désolée, retrait. Bon, donc c'est tout pour le chemin. La prochaine configuration que je vais mettre dans est le modèle de sortie. Comment est-ce que je veux que chaque ligne ressemble ? Droit ? J' ai donc déjà préparé tous les modèles de mise. Je vais juste le coller là-bas et vous accompagner à travers ça. Donc, une fois de plus nommé paramètre ou mettre les modèles deux-points et la valeur que je veux serait des horodatages que je tiens à mettre dans un horodatage avec ce niveau de détail, vous pouvez ajouter ou soustraire. Vous n'avez peut-être pas besoin de toutes ces années, mois, jour, heure, minute, seconde mini milliseconde et quel que soit le Z, n'est-ce pas ? Donc, j'ai vu cela, utilisé ce très détaillé. Il vous donne l'horodatage exact, quelque chose se passe. Vous n'avez peut-être pas besoin de ce niveau de détail qui dépend de vous. Et puis le niveau quel niveau d'avertissement est-il que c'est un avertissement d'inflammation. Je passerai ça plus tard. Quel est le message ? Et puis nouvelle ligne ou exception, s'il y a une exception incluse et Bricklin et montrer l'exception. D' accord, donc c'est fondamentalement ce que c'est. Faire. Les expériences sont que j'ai est des intervalles de roulement. Donc, cela signifie quel intervalle devrait créer un nouveau fichier. Donc ça me ramène à ce tableau de bord aléatoire, point hub là. Parce que ce qui va se passer ici, c'est quand je vois point d d'intervalle de roulement signifie et sans tiret et le DID associé à chaque d. Donc, c'est bon pour segmenter votre aimé rapide. Quelqu' un a dit quelque chose la semaine dernière, jeudi. Vous pouvez facilement aller et trouver le fichier journal pour jeudi off la semaine dernière et l'examiner. Sinon, ils vont juste finir avec un gros fichier qui continue de croître, de grandir et de grandir. Et puis vous allez avoir des années de cornes dans un seul fichier, ce qui est pour moi inefficace, au moins quand vous avez plusieurs fichiers, vous pouvez gérer les plus anciens. Vous pouvez les supprimer en toute sécurité ou les déplacer vers une archive en toute sécurité tout en conservant cette séparation. C' est pour ça que je mets cet intervalle précoce. Quelles sont les différentes options que vous avez ? Tu pourrais le faire le jour, l'heure, ou la minute, l'année, c'est à toi de décider. D' accord. Le prochain serait le niveau minimum restreint. Donc, je veux limiter au minimum les informations de niveau d'événement de journal, n'est-ce pas ? Ce qui signifie que je fais besoin d'un C chaque petite chose, il y a certains points de débogage. Ils sont tous, vous savez, ça commence, initialise ça et révèle que je n'ai pas besoin de voir tout ça. Donc, l'ensemble des journaux verbeux ici dépend de la quantité que vous enregistrez, ainsi que de ce que vous définissez comme le minimum. Donc ici, je ne vois que le journal au minimum d'informations. J' ai besoin d'inclure ces points de contrôleur de bibliothèque entreront, et nous incluons cette bibliothèque. Et puis il me manque ce point-virgule. Mais avant de mettre le point-virgule et de jeter un oeil ici à nouveau. Donc on est sûr, et il me manque une virgule ici. Donc c'est une bonne chose. A a pris d'examiner cela. Et puis la dernière chose ici pour se débarrasser de tous ces tableaux serait de, après ce fichier ouvert et fermé accolade, nous disons point créer des enregistreurs. Il est donc bon de voir une configuration d'enregistreur sur tous ces éléments. Créez l'objet logger. Non. Bon, alors maintenant qu'on l'a créé, on peut commencer à l'utiliser. Donc ce que je vais faire ici, c'est que nous sommes en marche ou commencer le processus ou notre moyen, la ligne principale dans la fonction principale à l'intérieur de notre piste cash. Et si vous n'êtes pas si familier avec ce gadget de piste signifie va essayer de faire quelque chose et s'il y a une exception, il va l'attraper et le gérer en conséquence. C' est donc ce que nous appellerons la gestion des exceptions. D' accord, alors ce qu'on va faire, c'est essayer d'exécuter cette ligne. Mais avant cela, je vais me connecter à l'information. Nos bits de connexion d'informations pour dire, hey, l'application commence donc nous pouvons voir exactement à quelle heure et tous les détails nécessaires pour savoir que l'application a commencé à ce moment-là. Très bien, si nous attrapons une exception, et ici je suis juste une exception qualificative avec les objets qui contiennent réellement l'exception, alors je vais voir fatale. Donc, vous pouvez enregistrer l'erreur, je peux les informations de connexion, vous pouvez vous connecter avertissement. Ici, il se nourrit si l'application cesse de fonctionner. Donc je vois dans l'amour pas fatal. Et je suis vu et c'est l'exception qui provoque le fœtus désireux d'être écrit. Et c'est une application MRD et C sur les champs, champs à commencer. Donc, je vois de sorte que quand quelqu'un a examiné le journal, c'est le résultat de ou c'est ce qui s'est passé. À la suite de cette exception. L' enregistreur va pharma Tito Nissl formaté et cracher dans le fichier selon cela. D' accord ? Et après tout ça, je vais le dire enfin. Enfin signifie après que vous avez géré ou ils avaient essayé l'opération et il a attrapé et tout est fait. Qu' est-ce que je veux faire ici ? Je vois, je veux juste vider et fermer mon objet journal. C' est donc ce qui va se passer lorsque nous commencerons notre application. Donc, non, je vais aller de l'avant et appuyer sur ce bouton Play haut ici, qui va démarrer votre application. Ou nous pouvons aller au fichier journal et voir ce qui se passe. Bon, alors maintenant que l'application est chargée et juste pour que vous puissiez voir, le navigateur viendra avec swagger, passera par swagger et plus tard, ne vous inquiétez pas trop. Humboldt est ça, ça a l'air sympa, mais nous nous concentrons ici sur nos bûches. Donc nous voyons notre journal ici. L' application commence maintenant, nous voyons le niveau de journal et il est en quelque sorte formaté. Holy, je pensais que ce ne serait pas juste. Donc, d'autres choses sont en train d'écrire dans le journal, voir leurs obligations commencées. Les données du journal ont donc été démarrées. Donc c'est un début, celui-ci a commencé. Donc vous pouvez voir les horodatages exacts pour ce que ça vaut, n'est-ce pas ? Nous connaissons l'environnement, donc vous voyez que les journaux nous fournissent certains détails que nous ne pouvons pas voir quand nous regardons juste les arrondissements sont comme ça. Vous ne sauriez jamais que tout cela s'est passé dans le dollar cultivé juste en regardant ça. Donc c'est tout pour nous la mise en place de l'enregistreur, au moins pour l'instant, plus tard, nous avons mis en place notre base de données et ainsi de suite. Nous pouvons revenir et ajouter la fonction qu'il peut connecter à la base de données. Aussi. 9. Explorez l'UI en Swagger: Bienvenue les gars. Donc, aujourd'hui, nous voulons juste avoir un coup de fil rapide, comment il est lié à notre développement d'API et quel est son but. Donc swagger est vraiment là pour aider à simplifier le développement d' API pour les utilisateurs, les équipes et les entreprises. C' est un jeu d'outils open source et il nous aide essentiellement à concevoir un document nos besoins obèses avec beaucoup moins d'efforts qu'il ne faudrait vraiment pour avoir ce niveau de détail. C' est donc un très bon outil. Il nous aide à automatiser encore beaucoup de choses. Et la meilleure partie de son étrange est qu'il est déjà inclus avec notre API dans les versions précédentes, qui devrait aller installer il est reconnu que ce n'était pas un processus très difficile. Les puces notent que Microsoft semble que c'est une sorte de norme que tout le monde avec un EPA veut mettre Jian soccer parce que c'est tellement cool, si efficace dans tout ce qu'il fait. Ensuite, ce qu'ils ont fait, c'est qu'ils ont commencé à l'emballer dans notre API pour nous. Donc, les principales bibliothèques qui permettent à swagger d'être intégré, eh bien une, il vient de ces nouvelles poches GET. Si je vais gérer le nouveau paquet get, nous verrons que nous avons déjà installé le paquet. Swash multiple point est p et .NET Core. D' accord, il était moins d'outils de désordre que dans notre startup. Alors rappelez-vous que program.cs provoque le démarrage. Donc le démarrage est nul où nous définissons tous les middlewares et celui que nous avons dans les services pour Sagar est services, pensées, bizarre swagger, Jen, nous mettons si oui ou non nous, si nous le faisions manuellement, nous devrions le faire. Mais parce qu'il a été généré, une fois de plus, nous n'avons pas cette étape. Donc, il va générer le swagger et le document. Il prend en charge le contrôle de version. Donc, si vous avez la version un, version deux, et cetera, hors de votre API, vous êtes en mesure de garder camion hors les versions sont à Nice. Laissez quiconque lit la documentation Norwich version de l'API qu'ils regardent, vous pouvez définir certaines inflammation de l'API ouverte. C' est le titre, la version. Si je clique sur une virgule ici, vous verrez que vous ajoutez à nouveau des informations de contact. Vous pouvez ajouter une description, licence, toutes sortes de choses. Ainsi, vos documents ou quelqu'un qui regarde votre documentation API sait exactement qui si vous voulez fournir ce niveau de détail et regarder cette API est de boulons. Plus tard. Plus loin, pas ou autre. Dans la section Configurer, nous avons l'utilisation swagger et up utiliser swagger UI. Donc, l'interface utilisateur swagger signifie qu'il va créer son propre point de terminaison pour avoir son propre type de fichier de configuration, et il appellera son of hotel listing v1. Non, non ? Et non, c'est à la fin est le développement. Donc n est juste une variable qui nous permet de suivre quel environnement où dans notre début de développement, quand le pain, le lait, Schon, non ? Non, tout ce qui se passe ici. C' est essentiellement de voir. Nous sommes en développement. Donc, quand nous avons publié ceci pour dire que votre IIS ou sur Internet, peu importe ce qu'il est où qu'il soit, nous le mettons, ne faites aucun de ces trucs. C' est ce que dit cette déclaration si fondamentalement. Non, je pense que le football est utile. Donc, même s'ils l'ont peut-être mis dans la partie développement, ce que je comprends, je pense qu'il est plus facile de l'inclure dans l'API à tout moment. Donc, lorsque j'ai publié mon API ADL et difficile de fournir autant de support technique à quelqu'un d'autre pour leur apprendre à utiliser l'API parce que c'est à quoi sert la documentation swagger. Donc, je vais juste prendre ces deux lignes tout dur que si déclaration et les placer dans la zone générale où tout va se faire indépendamment de l'environnement. Donc c'est ma modification. Encore une fois, le contexte est tout ce que je peux comprendre que pour des raisons de sécurité ou tout simplement besoin général Lakoff pour l'échange d'informations. Ils ont probablement dit, eh bien, vous ne regardez que dans un contexte de développement parce que les développeurs peuvent être internes. Mais si c'est pour les développeurs tiers, alors je vais le rendre externe et accessible au public. Jetons un coup d'oeil à l'un de nos contrôleurs. Et bien, le contrôleur que nous avons, et vous voyez ici nous donne les prévisions météo et la défense que je reçois méthode. Bon, maintenant si je lance l'application et que la page Web arrive, nous voyons nos documents swagger. D' accord, donc la version 1 de la liste de l'hôtel, toutes ces choses étaient définies dans la startup. Donc, si vous avez besoin de changer le nom ou de le rendre plus attrayant, convivial, lisible par l'homme. Vous pouvez toujours le changer à l'intérieur des zones de configuration ici et ici, juste là c'est, titre. Donc, si vous voulez ajouter la description, la description, il apparaîtra sur la page. Maintenant, ici, il nous montre ce qui est dans l'API et ce qui est dans l'API serait notre point de terminaison pour obtenir, à droite, revenir au contrôleur pour obtenir des prévisions météorologiques. D' accord ? Il génère donc ce document contextuellement en fonction de ce qu'il voit dans le projet. Et quand vous cliquez dessus, il vous montrera des exemples de ce qui va revenir lorsque vous essayez de récupérer quoi que ce soit. qui est exactement exact parce que cela renvoie une liste de prévisions météorologiques et de prévisions météorologiques. Le terrorisme est une classe qui a des champs de données définis sur chacun d'eux a un type de données de date. Donc datetime, int, int et string. Donc, vous voyez si swagger est en train de les prendre tous, voir le il montre que vous allez obtenir le champ MCA appelé Beat temperature, sea temperature f. Et le résumé va vous montrer tous. Et il donne, même en vous donnant une idée du type de données, Datetime. Int, int et une chaîne. Donc, je vous montre juste à quel point Sagar est puissant sans aucun effort de notre part pour avoir déjà de la documentation API, ce qui est encore une fois très important lorsque vous allez construire sur l'application client, consommant n'importe quelle API. Ou si vous êtes celui qui construit l'API, vous facilitez la tâche pour quelqu'un qui doit la consommer. Donc, de la même façon que vous voudriez être traité comme un consommateur de l'API de quelqu'un pour avoir toutes les informations dont vous avez besoin pour savoir comment construire leur propre API. Vous voulez vous assurer de fournir ces renseignements aux personnes qui interagissent avec les vôtres. Donc swagger le rend très facile à sortir de la boîte. Et juste pour pousser un peu l'enveloppe, quand nous allons essayer c'est vieux, nous pouvons effectivement cliquer sur Execute et swagger nous permet de tester notre API ici. Donc, ces données qui reviennent avec le code d'état 200, nous entrons dans tout ça plus tard. Mais vous voyez le corps de réponse. C' est parce que c'est réellement exécuté le code qui est ici. Et juste pour prouver que si nous cliquons dessus et ce p et nous obtenons ces points rouges, qui est un point de rupture. Donc, je vais juste cliquer sur Exécuter à nouveau. Et puis vous voyez Visual Studio s'arrête et il frappe ce point d'arrêt ac, vous savez, a cette flèche jaune dedans. Et cela nous permet d'appuyer sur FL f 11 et d'aller ligne par ligne. Donc, je n'essaie pas de vous montrer comment déboguer NANDA vous montrant que ce n'est pas fluff, cela nous aidera en fait à tester. Donc pas d'utilitaires de test F2, swagger et facteur. Très bien, donc et j'appuie sur F5 ou je peux juste cliquer sur continuer en haut ici, n' importe qui, alors il va continuer avec l'exécution et il le ramènera. Très bien, donc c'est tout Swagger nous aide dans notre quête de tests. Maintenant, je vais juste faire pour tomber sur spécial et nous allons inclure ou enregistreur ici. Donc en haut, j'ai déjà, eh bien, par défaut, il est injecté. Donc, parce que nous utilisons semilog comme un enregistreur par défaut lorsque nous faisons la journalisation en utilisant notre objet ici, il utilisera l'enregistreur série. Donc je vais juste vous montrer des petits morceaux d'espoir de bûcherons que je peux dire des points de lager. Et puis je permettrai à l'information de dire des prévisions météorologiques accessibles. D' accord. Donc, c'est juste une inflammation pour voir accessible la prévision. Et puis je peux voir plus tard sur les prévisions météorologiques retourné quelque chose comme ça. Tu sais, ce n'est peut-être pas le cas. Ceci, c'est une balle élémentaire, est juste une fois de plus, par exemple, Sikh. Alors, voyez juste l'enregistreur. Bloggeur. Oh, eh bien, je suis désolé, j'ai mis ça pour trouver oh, voici une déclaration de retour, donc je vais juste le laisser comme information pour plus tard nous aurons à expérimenter un web tourbillon ou sans citation attester. Donc, je vais juste exécuter cette application une fois. Et puis je vais aller de l'avant et essayer. Cliquez sur Exécuter. Je peux supprimer le point d'arrêt en cliquant simplement. Donc, tant que ce point rouge est là, il va s'arrêter quand il arrive à cette ligne, vous supprimez simplement les points rouges et appuyez sur F5 pour qu'il continue. Très bien, si exécuté. Laissez-moi voir si mon journal va me montrer quelque chose d'utile et mature et fan. Et on y va. Donc c'est maintenant les fichiers journaux tout le temps qu' on l'a ouvert et ça a fait quelque chose que vous voyez ici, c'est juste dans les poumons. Donc, voici notre première application de blog est en train de démarrer et puis il est enregistré des données. Ça a fait ça. Et voici celui qu'on vient d'écrire, on accédé aux prévisions météo, n'est-ce pas ? Et puis il vous dit tous les détails de ce qu'il fait et d'obtenir un descendant. Droit. Donc c'est tout un travail d'exploitation forestière, c'est tout Sagar fonctionne. 10. Configuration CORS: Bienvenue les gars. Dans cette leçon, nous allons configurer notre politique de choeur. Non, bien sûr, est un acronyme pour le partage de ressources d'origine croisée. Et ce n'est qu'un mécanisme qui vous permet d'autoriser nos restrictions. Le partage des ressources entre les moyens. Permettez-moi de le dire un peu plus en anglais. Lorsque quelqu'un qui ne se trouve pas sur votre réseau essaie d'accéder à votre API, par défaut, votre API a été de rejeter ces demandes d'accès. Très bien, donc si je développe une API interne à utiliser dans mon entreprise et quelqu'un de l'extérieur de mon entreprise avec une adresse IP complètement différente et que tout essaie de consommer l'API ou de parler à l'API, alors ça va pour le savoir automatiquement, hé, eh bien, je ne peux pas vous envoyer d'information parce que je ne vous connais pas. Donc, nous voulons configurer cette politique pour faciliter une conversation avec les sources sont les demandeurs. C' est que je ne suis pas forcément dans notre réseau. D' accord, donc j'ai déjà rencontré cela avant où j'ai développé une API pour mon entreprise, pour une utilisation tierce partie. Et j'ai passé un certain temps à déboguer pourquoi cette société ne pouvait pas accéder à l'API qui fonctionnait clairement sur ma machine et toutes les autres machines, notre propre B. Et puis après avoir creusé, j'ai réalisé que c'était le correspondant à c. accéder à l'API qui fonctionnait clairement sur ma machine et toutes les autres machines, notre propre B. Et puis après avoir creusé, j'ai réalisé que c'était le correspondant à c. parfois, on laisse un apprentissage en ligne appris par l'expérience. Eh bien, je suis là pour vous dire quelles configurations vous pouvez mettre en place dès le départ pour éviter certains travaux. Donc, afin d'ajouter cette politique, ce que nous allons faire est dans notre fichier de démarrage dot cs et je vais juste l'ajouter ici. L' ordre n'a pas d'importance dans une certaine mesure, mais en ce moment, nous ne sommes pas vraiment concentrés sur l'auto aurait juste voulu obtenir nos configurations dans. Quelqu' un dit juste services, point, ajouter des cœurs, puis juste mettre le point-virgule là. Donc, quand nous disons, bien sûr, nous devons ajouter une politique comme si le corps avait besoin de savoir-faire pour se comporter, n'est-ce pas ? Donc de la même façon que quand on met en place l'autre swagger Jin, désolé, disait Voir, et puis ce lambda R0. Et puis nous pouvons avoir plusieurs lignes avec plusieurs configurations. Vous verrez que c'est avec les points de terminaison et ainsi de suite. Nous allons le faire ici. Donc, je vais voir tout ce que vous pouvez utiliser n'importe quel outil peut vraiment n'est pas égal b, c, o égal aux options de mot. Comme je l'ai dit, vous les voyez utiliser la pierre Endpoints ici. Alors je dirai tout. Et puis le lambda R0. Et puis ce que je vais faire, c'est ouvrir et fermer les accolades. Donc, cela signifie que je vais avoir tout un bloc de configuration sur certains de cette rupture dans la ligne afin que nous puissions voir clairement ce qui cherchait. Et puis je vais dire toute la politique d'ajout de points. D' accord, donc j'ajoute la politique puis après lui avoir donné un nom. Donc, le premier paramètre est une Madame, je vais juste l'appeler outil de politique CORS, fantaisie ou déroutant. Donc, stratégie CORS, puis virgule, puis après définir un autre lambda. Donc je vais juste appeler celui-ci construire leur cause normale pour construire les politiques. Donc le constructeur lambda R0 et je vais juste briser la ligne. Donc je voulais dire un constructeur. Les points permettent tout. Donc voici toutes les options avant que je commence à les asseoir. Ce sont toutes les options que vous pouvez autoriser. Nea peut refuser, vous pouvez définir. Donc, si elle est répertoriée en blanc ou avec certains en-têtes, vous pouvez définir hall. Votre API déterminera qui est autorisé à accéder à moi ou à mes ressources et qui ne l'est pas. Farnell à des fins éducatives. Plus tard, nous pourrons peut-être regarder la sécurisation de celui-ci et le mélange et le match sacré. Eh bien, une fois de plus, le contexte est tout. Si vous développez une API pour Internet et une utilisation tierce, alors vous ne pouvez pas être trop Street avec l'API si quelqu'un infrarouge devrait être capable de s'y mettre. Sinon, vous allez avoir des frais administratifs pour essayer de déterminer qui est qui tout le temps. Donc je vais juste dire un bas n'importe quelle origine. Et je vais juste enchaîner le long d'une méthode basse, ce qui signifie qu'ils peuvent accéder à chaque méthode ce point de terminaison qui est défini ici. Et puis je suis allé dire bonjour, n'importe quelle tête DAR, désolé, un bas, n'importe quel en-tête. Très bien, puis fermez l'accolade de la stratégie, puis utilisez un point-virgule. C' est donc ma politique de cours qui sont définies. Donc, je fais siloter tous et n'importe qui. Une fois que vous arrivez à accéder à mon API, vous pouvez aller de l'avant et utiliser les ressources. Encore une fois, le contexte est tout ce qui déterminera à quel point vous êtes strict avec votre politique de cours. Maintenant, après avoir fait tout ça, je ne vais pas descendre pour configurer. Et je vais laisser le null qui a fait devrait utiliser les politiques du cours. Donc ici, je vais juste dire utiliser des cœurs. On y va. Et puis ça va dire, accord, ça fait des surcharges. Je vais lui dire le nom de police C. Et donc juste en mettant les guillemets, c'est un vieux dicton, ok, c'est quoi un nom de police ? Donc, le nom de la politique, tel que je viens de le décrire en haut, est une politique grossière. Alors peut-être que tu pourrais le rendre un peu plus informatif. Vous pourriez voir un bas. Très bien, parce que c'est tout ce que ça fait vraiment. Cette politique nous permet, je vais dire utiliser la politique qui dit bonjour. Bien sûr, c'est pour ça que la politique est vraiment pour ça. Donc, dans cette situation, nous ne sommes pas allés à en voir pleinement les avantages. Mais si vous avez fait autre projet où vous avez l'API et alors vous avez un projet entièrement différent, qui est les projets clients, ce qui signifie qu'il est diffusé à une adresse IP différente de notre port, que le projet d'API en cours. Une fois qu'ils ont essayé de parler, cela ne fonctionnera pas tant que cette politique n'aura pas été mise en place. 11. Référencer et ajouter des modifications à GitHub: Bienvenue les gars. Dans ce cours, nous allons ajouter ou citer au contrôle de la source et tout le contrôle de la source est un outil merveilleux qui est utilisé pour nous aider à garder une trace de toutes les modifications que nous faisons dans une application. Cela nous aide également à bien travailler en équipe car au lieu d'avoir 34 versions différentes sur un projet, le référentiel de contrôle de source agit comme une zone de stockage centrale pour tout le monde. C' est un abonnement pour vérifier les changements Ian comparés aux autres, résoudre les conflits, et bien d'autres avantages. Nous allons donc mettre en place notre contrôle de la source pour notre projet. Et une fois que nous avons terminé chaque module va juste aller avant et vérifier et assurez-vous que nous avons arbre cohérent de tous les changements majeurs rencontrent dans nos projets au fur et à mesure que nous allons le long. Donc, notre outil de choix est GitHub, qui est null possède Microsoft. Cela en fait un outil merveilleux. L' intégration facile sur tout est merveilleux sur YouTube. Il nous permet également d'accueillir des projets publiquement afin que d'autres puissent venir voir votre travail et nous aider, il nous aide à construire un portefeuille de projets à utiliser même pour notre propre CV. Donc, si vous n'avez pas déjà de compte github, vous pouvez aller de l'avant et cliquer sur S'inscrire. Il est assez facile d'en créer un, vous avez juste besoin d'un nom d'utilisateur, adresse e-mail et d'un mot de passe, et une vérification, puis vous êtes dans. Donc j'ai déjà un médecin et je vais aller de l'avant et me connecter. Et je vous donne juste un aperçu de ma page web. Vous voyez que le référentiel est à gauche que les personnes qui ont suivi. Il donne un bon fil d'actualité sur ce que les gens font en cours de route. Qui vous suit QI et les a suivis. Et c'est juste un outil merveilleux pour construire une sorte de relation avec d'autres développeurs et la communauté open source générale. Maintenant, pour revenir à nos projets, ce que nous allons faire est juste d'ajouter ce contrôle de source. Donc, la façon la plus simple de le faire est de regarder vers le bas dans le coin inférieur droit et vous voyez cela ajouter au contrôle de la source. Donc, si nous cliquons dessus, vous verrez get et ce qui se passe est que vous avez une version de Git sur votre ordinateur, mais alors nous pouvons aussi la synchroniser avec GitHub. Donc, une fois que vous faites ça, ça va dire, ok, alors que le chemin local s'il vous plaît vous connecter, vous avez dit que c'est la destination principale. Donc, comme je l'ai dit, c'est la propriété de Microsoft. L' intégration est très facile. Donc, vous pouvez aller de l'avant et signer des silos, ajouter mes cônes GuitarBot, et j'ai déjà là deuxième est autorisé. Et une fois que cela a réussi, ils venaient de revenir à Visual Studio. Et vous voyez juste sentir charger tout. Le nom du référentiel, vous pouvez ajouter une description quelqu'un pour voir qu'il s'agit d'une API Web éducative construite en utilisant .NET Core 5. Donc quelqu'un tombe dessus. Ils vont arriver à un petit truc juste. Oh, c'est ce que quelques boulons. Non, ils autorisent les dépôts privés. Droit. Donc si vous travaillez sur un projet scolaire ou quelque chose de confidentiel, je ne veux pas que le monde puisse y accéder. Allez-y et quittez ce simulacre d'état. Sinon, vous êtes sur le billet. Donc je voulais partager ça avec vous les gars. Laissez-le coché, puis il vous montrera que ce sera le lien direct vers le dépôt. Donc, je vais juste aller de l'avant et cliquez sur Créer et pousser. Et une fois que cela est fait, je vais revenir à GitHub et Trend View. Non, vous pouvez le trouver facilement ici j'ai un bon nombre de dépôts à ma gauche. Donc, ce que je vais faire est de cliquer sur mon image d'affichage, aller dans vos dépôts, et puis je vais voir tous les répertoriés type de dans l'ordre où ils ont été mis à jour la dernière fois, à droite. Voici ma liste d'hôtels et nous sommes tous ici, OTA énumérant les contrôleurs, tout ce sur quoi j'ai travaillé. Donc ce sera les premiers poulets. Donc, comme je l'ai dit, il continue de supprimer tous les commits. Chaque fois que nous faisons un changement, nous pouvons aller voir ce qui a été fait exactement. Et c'était le premier commit, donc nous n'avons pas eu à ajouter de message, mais plus tard, vous verrez que nous pouvons ajouter des messages afin que nous puissions annoter chaque fois que nous prenons du code et dire, c'est ce qui s'est passé dans cette version. Donc, avec cela fait, nous avons terminé cette première phase de mise en place de notre application sur le contrôle de la source. Vous pouvez aller de l'avant et ajouter un Lisez-moi afin que les gens obtiennent une quantité d'instruction à moins que l'ensemble Pour utiliser votre projet. Si c'est quelque chose qui est là pour chaque n n'importe qui à utiliser. 12. Mettre en œuvre des cours de données et le cadre d'entité: Bienvenue de retour. Dans cette leçon, nous allons commencer à configurer nos classes de données. Et par extension ou base de données que nous allons utiliser Entity Framework, qui est Microsoft.NET cœurs phare Object Relational Mapper ou ORM en bref. Et ils nous permettent de modéliser ou les classes de base de données sont nos tables de base de données plutôt que des classes C-Sharp, puis d'ingénieurs notre base de données basée sur nos définitions de classes. Donc, ce que nous allons faire pour commencer c'est créer un nouveau dossier dans notre projet. Donc, faites un clic droit, allez à ajouter et cliquez sur Nouveau dossier et nous allons simplement appeler cette bêta. Maintenant, dans les données, nous allons commencer à mettre dans nos cours. Donc, notre liste d'hôtels ou bien, APA va vraiment, juste à des fins éducatives, avoir seulement deux classes ou deux tables, une pour le pays et une pour l'ensemble du till. Donc, fondamentalement, quand nous cherchons notre pays, nous devrions être en mesure de voir tous les hôtels qui sont associés à ce pays. C' est essentiellement l'idée qu'on veut, non ? Donc, je vais juste aller de l'avant et cliquez avec le bouton droit sur les données, cliquez sur Ajouter. Et notre première classe sera le pays. Alors remarquez que je vais le nommer d'une manière singulière, pays. Le suivant serait l'Hôtel. Chaque classe représente donc une unité, pays et un hôtel. Avant de commencer à définir les champs pour l'un ou l'autre, je voulais juste mettre tous les fichiers en place et ensuite nous pouvons juste revenir et voir comment tout se lie. Donc, après avoir défini nos classes, au moins ces deux, je voulais juste aller de l'avant et créer ce que nous appelons notre classe de contexte DB, n'est-ce pas ? Donc, je vais l'appeler contexte de base de données. Et allez-y et ajoutez-y. Et puis cette classe va vraiment représenter notre pont entre nos classes définies ou nos classes d'entités et la base de données réelle. Alors Country, c'est une entité qui va être conçue par Ford en une table, non ? Tout ce que nous définissons comme champs va bientôt doubler et faire cela. Mais ce que nous ressentons dans le pays, ce sera des champs dans une table appelée quoi qu'on l'attrape. Nous allons donc appeler les pays de la table, parce que la table est effectivement une collection d'enregistrements de type pays. La même chose vaut pour l'hôtel, et la même chose ira pour autant d'autres tables de barre oblique d'entités que vous pourriez avoir à définir. Donc c'est tout ce que nous appellerons le code d'abord ingénierie où nous écrivons tout le code pour un couloir, pensons que nos tables devraient regarder. Et puis avant ingénieur notre faire des ajustements à la table en conséquence. Donc, après avoir créé ce contexte de base de données, nous devons en quelque sorte équiper les choses il a besoin pour savoir que c'est le pont vers la base de données. Donc, la première chose qu'il doit savoir est qu'il hérite du contexte DB. Non, cela va donner une erreur parce que j'ai besoin d'aller chercher des outils. Mais quand je contrôle les points. Visual Studio vous suggère d'installer le package manquant, qui est Microsoft point Entity Framework Core. Si vous ne voyez pas cette invite, AUCUN problème. Vous pouvez toujours aller avec le bouton droit sur le projet obtenu, géré Nouveau obtient, et puis vous pouvez rechercher le même paquet, suffit d'aller à parcourir et de taper le nom du paquet et vous le verrez répertorié là. Donc, je suis sur les travaux, mais pendant que je suis ici, je vais juste obtenir toutes les bibliothèques d'ici. C' est que je sais que je vais avoir besoin, donc je vais certainement avoir besoin de cette bibliothèque, donc ne charge pas celle-là. Et encore une fois, je sais que je vais certainement avoir besoin du pilote pour SQL Server parce que nous allons utiliser des bases de données SQL Server. Cela dit, il y en a d'autres pour d'autres moteurs de base de données afin que vous puissiez utiliser une lumière de suite. Vous avez, j'ai vu des postgres ne pas voir la liste ici, pas immédiatement, mais ils sont tous là. Nous allons donc utiliser SQL Server. Donc, je vais aller de l'avant et prendre celui-là. Et le dernier que nous obtenons, moins pour cette période, est l'ensemble des outils parce que nous avons besoin des outils pour pouvoir exécuter certaines commandes à l'avenir. Donc, je vais juste aller de l'avant et installer celui-là aussi. Bon, alors maintenant que nous avons fini dans New obtient, si ces salon à vérifier et installé, si vous effacez le filtre, vous verrez tout ce que vous avez installé. C' est très bien. Donc, je vais revenir à mon contexte DB, puis je suis allé à contrôler et points à nouveau, puis l'invite, NO gène inclut toujours l'instruction using parce que nous avons déjà la bibliothèque à ce stade. Maintenant, dans un référentiel lointain, eh bien, désolé, ou contexte de base de données, ce que nous devons faire est de définir un constructeur. Donc, je vais voir le contexte de la base de données publique, ou j'aurais pu juste faire voir Tar tub, baignoire. On y va. Et puis je vais prendre les options de contexte DB de paramètre. Donc, cela sera transmis à partir de la fiche de démarrage. Nous avons encore défini tout cela, donc nous sommes juste en train de l'adapter. Ecrire null. Et puis l'eau que je dois faire est également d'initialiser le contrôleur de base, désolé, un constructeur pour le contexte DB pour prendre les mêmes options. Pour non, nous n'avons pas besoin de mettre quoi que ce soit d'autre à l'intérieur du constructeur afin que nous puissions simplement laisser ce vide et passer à autre chose. J' ai donc dit que cela représente le pont entre notre application sur notre base de données. Donc, c'est ici que nous listons réellement ce que la base de données devrait savoir quand elle est générée. Donc, en termes plus courts sont des termes plus pratiques. Je voulais dire qu'un ensemble de bases de données public donne les données de cette base de données, le type de données, qui dans ce cas pourrait être le pays. Et puis je vais donner le nom de la propriété, qui serait pays. Donc, le nom que vous lui donneriez ici est le nom que la base de données utilisera. Donc, le type de données dans la mesure où C-Sharp est Gunter, concerné est pays. Mais alors la base de données va à. Définissez une table appelée pays et chaque fois que nous y accédons, elle y accédera en tant que pays. Donc, c'est une chose mineure. Je veux dire, tout le monde a ses propres conventions de dénomination que les gens utilisent une lettre commune pour leurs noms de table. Je n'aime pas faire ça. J' aime garder mes noms de table au pluriel et le type de données au singulier parce que c'est un pays et qu'est-ce qu' une collection de pays après août est cette base de données ? C' est un ensemble de pays, peu importe comment vous voulez le justifier, c'est ma justification. Encore une fois, le contexte régit tout. Donc je vais faire la même chose pour l'hôtel et les hôtels. Après avoir fait tout cela, nous devons laisser nos choses bouleversantes pas de chaîne de connexion. Donc, la chaîne de connexion est fondamentalement comme le nom l'indique, en tant que chaîne, que toutes les lignes trou pour accéder à la base de données à laquelle l'application doit se connecter. Donc ce que je vais faire ici, c'est créer une nouvelle section et voir qu'il lui donne automatiquement des chaînes de connexion, non ? Et à l'intérieur, je vais juste appeler ceci, appelons-ça connexion SQL. Et la connexion va avoir un serveur égal et nous avons une base de données locale qui est en quelque sorte intégrée dans Visual Studio. Donc, à ce stade, vous pouvez avoir votre propre base de données que vous souhaitez utiliser. Si, sinon, vous êtes un débutant et que vous suivez simplement le long d'eux, vous pouvez utiliser celui-ci qui est par défaut pour faire beaucoup plus d'installation en fait, il est déjà inclus dans votre installation Visual Studio. Cependant, à ce stade, si vous avez comme un serveur localhost SQL commençant par une adresse IP, c'est ce que vous mettrez en tant que valeur de serveur au lieu de ce que j'ai ici. Bien, mais en continuant, nous définissons aussi les noms d'une base de données. Donc la base de données que nous devrions chercher slash créer, je vais l'appeler c'est des listes d'hôtels. Liste de photos sur le score dd. D' accord, donc c'est le nom de la base de données avec laquelle je voudrais interrompre sur ce serveur. Et puis juste une autre option très importante sont relativement importante qui est la sécurité intégrée. Et je dirai juste égal à vrai. Donc c'est tout à notre chaîne de connexion. Ça ressemble à. Donc tout se réunira après un certain temps. Nous le faisons peu à peu, en construisant jusqu'à ce que tout soit intégré. Donc, notre prochaine étape est de passer à une startup. J' ai donc dit que lorsque nous définissons un contexte, obtenir ses options à partir du démarrage. Donc, le démarrage doit savoir que lorsque l'application démarre, il devrait charger sa configuration de base de données à partir d'ici et utiliser ce fichier comme violation. D' accord, alors ce que nous allons faire est d'ajouter une nouvelle section. En fait, ils peuvent seulement trois. Sont-ils soumis âme ? J' aime ajouter des contrôleurs comme dernier ou près de la dernière chose que je fais dans les services de configuration. J' aimerais faire tout le reste avant. J' ajoute un contrôleur pour que vous puissiez juste aller de l'avant et déplacer cette ligne. Donc, les services pointent le contexte DB. D' accord, donc j'appelle ça un contexte de base de données. Le code, les fonctions est, il cherche le contexte DB. Et puis ce qui a pris des pics est quelque chose de contexte db de type. Donc, c'est des contextes db de type. C' est mon contexte DB. C' est que je crée quelqu'un, nous le transmettrons comme ce type de données cherche, bien sûr, y compris les références manquantes. On y va. Et puis voici les options de pièce. Donc, cet initialiseur lambda qui a été utilisé pour maintenant ou ce n'est pas étranger pour nous par null. Donc, pour les options, je vais dire utiliser SQL Server. Très bien, et rappelez-vous que lorsque vous obtenez ces neiges ajouter intuité que les bibliothèques SQL Server, si je contrôle juste les points, vous voyez ici qu'il voit inclure l'instruction using, accord, donc utilisez SQL Server. Et puis il va vouloir savoir K. Alors d'où est-ce que je tire la configuration ? Donc, je vais dire configuration. Obtenez votre chaîne de connexion, chaîne de connexion. On y va. Et puis cela est aussi veut aller. Ils vont regarder les paramètres de l'application. Donc, il dit donner une chaîne de connexion car il sait déjà qu' il pourrait y avoir une section pour les chaînes de connexion. Et je dis obtenir la chaîne de connexion avec ce nom. Donc, vous pouvez réellement définir plusieurs chaînes de connexions ici vous avez juste besoin d'une virgule , les séparer, et chacun doit avoir son nom unique. Et à ce stade, vous pourriez réellement configurer différemment. C' est des contextes évidents pour différents besoins. Nos bases dans l'application CME, qui pourrait être utile si vous êtes API avait besoin de la portée de plusieurs bases de données. Donc, il y a un certain nombre d'avantages à avoir une API parce qu' elle n'est pas limitée à un acte sont basés sur un ensemble d'interactions, n'est-ce pas ? Donc, obtenez la chaîne de connexion. Je vais aller de l'avant et passer le nom en fermant toutes les accolades qui doivent être fermées. Et Farnell, je crois que nous aurons tout plus tard, nous reviendrons et modifierons celui-ci. Nous avons besoin d'autres fonctionnalités ajoutées, mais pour aucun point-virgule supplémentaire. Et là, nous allons si loin, non, nous avons tout ce dont nous avons besoin. Maintenant, avant d'aller plus loin, je vais juste doubler et nous allons terminer nos définitions de classe. Donc nous avons l'hôtel et nous avons le pays. Alors pays. Et je vais juste dire que baignoire, baignoire va avoir une carte d'identité. Ainsi, si vous créez un champ appelé ID, supposez automatiquement qu'il s'agit de la clé primaire. D' accord, donc vous avez deux options. Vous pouvez voir ID ou vous pouvez dire le nom de l'entité, ID. Il dira automatiquement, OK, eh bien, je vais juste utiliser ceci comme une clé primaire. D' accord, donc l'identité juste là. Celle-ci est la clé et disons que le pays a aussi le nom. Donc le nom du pays et une autre diapositive. Utilisez simplement le contrôle D pour dupliquer cette ligne. Et nous voyons peut-être la zone ou l'affûtage. C' est juste sous peu. Donc, dans mon cas, la première sculpture que je mettrais dans sa Jamaïque et le nom abrégé serait j m. Et ensuite basé sur le pays, bien sûr, le nom court est différent, non ? Donc, ce sont les champs que je m'attends la table de pays ait lorsque la base de données est générée. Donc je vais sauver celui-là et je suis prêt à regarder l'hôtel No. Donc pour commencer, nous pouvons prendre et nommer parce que, je veux dire, nous devons avoir la clé primaire. Chaque trou a un nom, mais alors j'ai d'autres champs ici, y compris l'adresse, qui est la chaîne, la note qui est un double, puis la référence de clé étrangère à notre pays. Laisse-moi t'expliquer ça. Donc, si vous connaissez les bases de données, vous savez que la clé primaire est un identifiant unique pour une table donnée. La clé étrangère représente une référence unique ou peut ne pas être unique, mais c'est un outil de référence fort. Un autre enregistrement dans une autre table. En d'autres termes, tout hôtel doit être dans un pays. Donc nous avons l'hôtel, nous lui donnons le nom, son adresse, son histoire, manger, mais ensuite nous le faisons savoir. Nous, nous donnons ici un ID qui correspond à un ID de pays. D' accord, donc nous devons définir deux champs. Nous avons sur l'annotation de données ici. Donc carré, où est la clé étrangère et vous lui donnez le nom que vous voulez. Donc, vous pouvez réellement donner ce champ de clé étrangère à un nom différent si vous le vouliez. C' est égal à mettre manuellement votre nom ou dans ce cas, je vais juste lui donner le même nom que la classe qu'il fait référence. Alors, n'importe quelle classe, n'est-ce pas ? Ensuite, nous avons deux propriétés. Nous avons le pays comme un objet, puis nous avons l'ID de pays comme un entier. Donc, l'ID de pays est la référence la plus difficile qui est l'ID évalué sur l'outil fait trois, et cetera. Quel que soit le pays représente les objets réels. Nous pouvons donc inclure tous les détails ici. Quand nous regardons un hôtel, si nous voulions connaître le nom du pays, tout ce que nous avons nativement à l'intérieur de l'Hôtel est l'ID du conteneur. Mais alors nous pouvons remplir cet objet avec tous les détails. Donc, nous pouvons dire Hôtel pays point, point quelle que soit la propriété que nous voulons inclure dans notre bêta. Donc, c'est un moyen agréable et facile de Juan crée une référence de clé étrangère à une autre table. Et pour nous assurer que lorsque nous tirons une requête pour une table qui a des clés étrangères partout, nous pouvons inclure tous les détails ici sans écrire trop de jointures internes désordonnées et avoir à sauter à travers les cerceaux pour être inclus. C'est ça. Donc maintenant que nous avons tous ces détails définis, laissez-moi juste faire un tour rapide juste pour m'assurer que nous sommes tous sur la même page. Nous avons notre dossier appelé données dans lequel nous allons stocker tous les objets liés domaine ou base de données permettre et tiré tout cela sera stocké à l'intérieur de ce dossier appelé bêta. Plus tard, nous pourrons envisager peut-être mettre dans son propre projet. Mais pour null, c'est juste trois fichiers sont un certain nombre de terre, nous n'avons pas besoin de faire tout ça. Donc, les données ont un fichier appelé Pays, qui définit la table de notre pays. Et un hôtel appelé Hôtel, qui définit la table de l'hôtel. Nous avons également le contexte de base de données, qui hérite des contextes BB courtoisie d'Entity Framework Core, qui agit une fois de plus comme notre pont entre déjà dans les classes et la base de données réelle. D' accord ? Comment arrive-t-il à la base de données ? Eh bien, un, nous avons la chaîne de connexion qui définit où regarder, ce qu'il faut chercher et oui, chercher sa sécurité, non ? C' est donc notre chaîne de connexion. Sinon, au démarrage, nous voulons ajouter le contexte DB ou ajouter ce pont à la base de données avec la permission de ce fichier. Et ce fichier devrait utiliser cette chaîne de connexion. Ok, désolé, j'ai juste eu une accolade supplémentaire, je l'ai enlevée. Très bien, alors faisons une construction rapide avant de procéder à l'ingénierie de notre base de données. Et pour faire une construction. Et vous pouvez faire maintenez la touche Contrôle Shift et appuyez sur B, ou vous pouvez aller à construire ici et construire la solution. Mais nous avons un projet de loi réussi. Passons donc à la console Package Manager. Si vous n'y voyez pas, vous pouvez toujours accéder aux outils et au nouveau gestionnaire de paquets get et à la console Package Manager. Très bien, donc voici où cette bibliothèque d'outils de base de points d'Entity Framework est utile car elle nous permet d'exécuter certaines commandes ici pour faciliter l'échafaudage. Et c'est ce qu'on appelle scuffled dans la base de données, lisez la génération de la base de données. Nous devons exécuter certaines commandes. Donc, ce que nous devons faire est d'abord ajouter à ce que nous appelons une migration, dit le, ajouter une migration de tiret. Si vous commencez à taper un onglet de presse, il sera en quelque sorte de saisie semi-automatique. Et puis je dirai création, disons base de données créée. D' accord, donc nous ajoutons la migration, B2B est créé. Donc, cela va fondamentalement générer comme manifeste ou un fichier préliminaire pour voir qu'il génère et CM obtient une erreur. Donc, c'est bien. C' est bien quand on voit ces flèches et on a travaillé à travers elles parce que parfois quand on passe parfaitement, on ne sait pas ce que mon topping. Très bien, donc cette flèche a à voir avec la propriété de campagne de la classe hôtelière. Et je crois que cela nous dit la commande. Donc ce que j'ai fait, c'est de le réorganiser. Donc j'ai eu l'idée sous la propriété. C' est à quoi ça ressemble d'abord. Donc, je vais juste réorganiser en prenant la propriété, la propriété entière, et en la plaçant directement sous l'annotation pour une clé étrangère et en déplaçant ce n'est pas le cas. Et comme vous pouvez le voir, peut être sensible nos tomates avec certaines choses. Voyons donc si cela fonctionne. Je vais juste relancer cette commande et la migration. Et nous obtenons une ambiance complètement différente où il voit le moulin a commencé à réussir. Et c'est assez de neige que vous vouliez défaire le week-end autour de ça, ce qui signifie que c'est bien fait ? Donc, ici, nous avons notre fichier de migration et ensuite nous voyons que nous avons un nouveau dossier appelé Migrations. Et ce qu'il fait est de prendre des instantanés de chaque instance de la base de données. Donc, à ce stade, nous définissons nos pays de table avec ces attributs de colonne et ces propriétés. Et si vous regardez, si vous le regardez de près, je ne veux pas qu'on l'analyse trop parce que cela peut être écrasant. Mais si vous le considérez comme quelqu'un qui connaît le langage « C sharp », vous vous rendez compte qu'il ne voit rien hors de l'ordinaire. Voyant que nous avons une table ou où créer une table, écrire le nom de celui-ci est pays en fonction de ce que nous définissons dans le contexte DB, n'est-ce pas ? Pays, que les colonnes de la table doivent être id, qui est colonne de type int. Et nous le définissons comme identité à incrémenter par un. D' accord, c'est tout ce que ça fait vraiment. Nom est une chaîne qui devrait être définie comme invar char, car dans SQL Server, une chaîne est vraiment invar char et short_name invar char, non ? Là. Nous sommes, il pourrait y avoir des contrôles que nous pourrions mettre notre propre taille Maybe Day et si c'est nul, n'est-ce pas ? Mais ce sont des choses que nous pourrons examiner plus tard. Mais finalement, nous voyons ici que nous avons notre migration. Et ça a l'air bien. Donc, l'étape suivante serait de créer réellement la base de données. Bon, alors ce que nous allons faire est de retourner à notre console Package Manager et rho et mettre à jour la base de données et en donner quelques-unes. Et puis quand il est fait, il sera juste MAINTENANT avec un simple fait. Alors, comment vérifions-nous ? Va vérifier. Vous pouvez donc accéder à l'Explorateur d'objets SQL Server. Je l'ai ouvert ici. Si tu ne veux pas l'avoir. Là, vous allez à View et vous choisissez l'Explorateur d'objets SQL Server. Donc, dans l'Explorateur d'objets de serveur, nous allons au serveur que j'ai dit qu'il a été intégré dans Visual Studio, qui est la barre oblique DB locale MS SQL, DB locale. D' accord, donc vous pouvez développer cela, aller dans les bases de données et puis vous verrez la base de données répertoriée là, liste d'hôtels DB. Et quand on a foré le prêt d'Andrew, tu verras nos pays. Vous verrez également qu'ils suivent toutes les migrations qui se produisent. Donc, chaque fois que nous faisons un changement à la classe qui dit, quelqu'un est venu et dit tout, nous devons étendre le pays, nous devons mettre le code de numérotation, droit, ou zone de code, peu importe ce que c'est, puis vous ajoutez un nouveau champ, vous créez une nouvelle migration, vous mettez à jour la base de données, vous allez créer un 5A de plus. Ceci pour dire que c'est le changement devrait être fait et ensuite les mises à jour vont évidemment aller de l'avant et apporter ces changements en votre nom. C' est bien dans un environnement de développement, dans un environnement de production, pas tant. Il y aurait beaucoup plus de contrôles en attente. mises à jour de la base de données sont gérées. Acheté Farnell, quand nous construisons à partir de zéro, il est bon de comprendre tout pour le faire efficacement. Donc c'est tout pour non, ce que nous avons fait aujourd'hui, c'est que nous avons défini nos classes de données sont des classes de domaine. Nous configurons notre contexte DB. On a fait tout ça à partir de zéro. D' accord, et c'est bien. Il est bon de comprendre comment tout les cliniques. Donc, nous avons le contexte de base de données, les classes ou les ensembles de bases de données, et les mèmes respectés, je me souviens de ce que vous appelez les propriétés ici, c'est ce que la table va être appelée. Si vous devez annuler la migration, cela devient un peu compliqué. Parce que si vous faites simplement une migration de suppression, vous obtiendrez une flèche où elle vous indiquera que la migration a déjà été appliquée. Donc, vous devriez revenir à cette modification dans la base de données dans un ensemble, ce qui, comme c'est dans les stages Yom, vous pourriez aussi bien, vous pouvez simplement aller de l'avant et supprimer la base de données, peut obtenir des changements, créer un nouvelle migration, et faire une base de données de mise à jour, n'est-ce pas ? Donc, si vous n'aviez pas besoin de la base de données, alors Entity Framework ne vous dira pas seulement que quelque chose a été appliqué, donc je dois être évalué pas là, cela permettrait la migration inter move. Vous pouvez obtenir des modifications à toutes les classes que vous faites à nouveau, ajouter la migration, mettre à jour, puis cela scuffler la base de données avec des modifications IA. Sinon, si ce n'est pas aussi grave que la migration, vous vouliez simplement ajouter ou supprimer quelque chose. Vous allez de l'avant et apportez vos modifications à vos classes de domaine en conséquence. Ensuite, vous ajoutez la migration, la base de données mise à jour, et il faudra une fois de plus un instantané à chaque point. Donc, quand nous reviendrons, nous regarderons tout le week-end c, d, eta dans les tables. signifie que lorsque, lorsque la migration se produit, nous mettons des données avant même entrer dans l'API parce qu'il est agréable d'avoir des données de test là-bas avant de commencer à mettre des données grâce à nos tests réels de l'API. 13. Données Seed en tableaux: Hé les gars, bienvenue. Donc, dans cette leçon, nous allons passer par un processus appelé semis. Donc, l'ensemencement est l'endroit où nous fournissons quelques données initiales à la base de données. Et ce que nous allons réellement faire, c'est juste coder certains enregistrements que lorsque nous effectuons une migration par la suite, la migration aura des instructions qui créent ces enregistrements. fait la base de données avec ces enregistrements. Et cela ne dépendra pas nécessairement de l'entrée de l'utilisateur. Donc, au moins, cela fournira une bonne base pour nos tests lorsque nous commencerons à développer les points de terminaison API. Donc, ce que nous voulons faire est d'aller dans nos contextes de base de données et nous allons remplacer une méthode protégée qui est vraiment à l'intérieur des contextes DB. Donc protégé à vide sur la création de modèle. Et nous passons dans le paramètre ModelBuilder et je l'appelle juste constructeur. Et ce que nous verrons, c'est que certains des constructeurs de labo se jettent dans Dy. Et puis je dois spécifier à quelle entité j'ai affaire à l'âme. Nous avons des pays d'hôtels web contraires auto d'exister, pour les hôtels d'exister. Et c'est vraiment à cause de la façon dont nous avons défini nos cartons rouges, non ? Donc il a dit le contraire et à l'hôtel a une clé étrangère, donc nous devons avoir le contrat avant de pouvoir mettre cette clé étrangère. Donc, nous allons juste dire Entité, pays point a des données. Oh, je suis désolé, il me manque un pair de raquettes là-bas. Droit. Donc entité contraire. Et puis ouvrir et fermer accolade a les données ITER, désolé, ouvrir et fermer accolade. Et puis à l'intérieur de ça, nous allons définir un certain conscient. Donc, nous pouvons définir autant parce qu'il prend un tableau, donc il a le, il faut vraiment un tableau de pays de type. Donc, nous pouvons définir quelques enregistrements ici. Donc, je vais juste en définir trois. Très bien, donc nouveau contraire requis avec ID est égal à un. Et encore une fois, nous mettons les données afin de fournir manuellement toutes ces valeurs. Et c'est le premier clincher qui est que je suis en train de démarrer et le nom court est JM. Et je vais juste copier ça et le coller. Une sorte de réduire le typage. Donc, ce sera deux et ce sera trois. Et le suivant, voyons, Bahamas. Et le nom abrégé pour Bahamas, si je ne me trompe pas, est B, s. et ensuite le prochain serait l'île Caïman. Certains choisissent une destination, des destinations touristiques populaires où vous voudriez probablement savoir quels hôtels sont là, n'est-ce pas ? Donc le nom abrégé pour les îles Caïmanes serait CI. D' accord. Si je ne suis pas si précis, alors plus tard nous pourrons acquérir un livre pour enfants pour null. Encore une fois, ce sont des documents exemptés, non ? Donc j'ai fait ça pour le pays. Je répète que les aliments pour les hôtels, n'est-ce pas ? Donc, je suis juste, je viens de copier MPI, est que la plupart du code. Et remarquez quand je change cela en hôtel, cela va changer les paramètres attendus pour taper hôtel ou s'il voit l'objet parce qu'il n'y a pas d'hôtels ici. Donc, c'est bien. On va juste changer cette vieille photo. D' accord, nom d'identification. Qu' avons-nous d'autre pour l'hôtel à l'adresse ? Laisse-moi prendre ça. Donc, voici quelques-unes de ces stations sur place. Donc je ne suis pas familier avec certains d'entre eux. Robe nous permet de garder court et C et le grill. Nous connaissons déjà le pays. Le pays est Jamaïque sous-culture ID serait un. D' accord. Et puis l'équipe de raid est la dernière. J' ai entendu dire 4.5, mais je sais que c'est une station cinq étoiles. Donc je vais juste copier ces détails, ne fais pas ça. D' accord. Nous avons donc un hôtel pour la Jamaïque. Je veux dire, juste mettre un hôtel par pays juste pour s'assurer que nous sommes répartis partout. Et je vais juste inventer quelque chose pour Sunda, loin des Bahamas. Donc, les Bahamas, disons qu'ils ont le grand palladium. Je sais donc que le grand palladium est un hôtel en Jamaïque. Mais par exemple, malade, on le met là ou on le met sur leur propre police, je suis désolé. Donc, ce devrait être un outil de pays, faisons-le. Et ça, c'est quatre étoiles. Encore une fois, ce n'est pas baiser de faire des données ouvertes, n'est-ce pas ? Donc, pour les hommes des cavernes, ils ont des sièges confortables. Et les juristes, disons George Tone, la carte d'identité est de 34 hommes des cavernes et ils mangent de 4,3. D' accord. Donc, c'est une cession de certaines données dans la base de données pour que cela puisse être corrodé. Tu l'effondrerais comme ça. Donc ça ne prend pas trop de place. Ou ce que j'ai tendance à faire est en fait de le déplacer sous les définitions de l'ensemble de bases de données. Alors que quand je viens faire des modifications aux ensembles DB, je peux toujours les empiler dessus. Je n'ai pas à faire défiler tout le chemin. Il y a des façons d'extraire cela peut ne pas affaires et appeler les configurations aussi. Mais alors c'est juste une victoire rapide, un moyen rapide de voir les données dans la base de données. Maintenant que nous avons défini quelques tests pour les enregistrements, la prochaine chose que nous voulons faire est d'ajouter une migration. Donc je suis prêt à migrer. Et celle-là, on va appeler ça les données de céder, non ? Donc remarquez que chaque mort de migration ADA et j'ai essayé être assez descriptif avec le nom de sorte que vous pouvez dire, oh, c'est ce qui s'est passé à ce moment-là. Donc c'est presque comme le contrôle de la source pour les données, non ? Et si vous regardez ceci, ce fichier de migration, vous verrez en fait ici où il dit insérer des données dans cette table. Et ce sont les colonnes, et ce sont les valeurs de données, n'est-ce pas ? Donc il va aller de l'avant et faire tout ça, n'est-ce pas ? Je ne sais pas pourquoi je tourne mon trois à quatre points à 4.299 et je ne sais pas pourquoi, mais c'est comme ça qu'il va être reformaté pour qu'il puisse faire les insertions. Donc, la prochaine chose que nous voulons faire est de mettre à jour la base de données afin qu'un peut effectivement exécuter les commandes dans la migration. Donc, il a dit « fait ». Ce que je voulais faire est de revenir à mon Explorateur d'objets, puis je vais cliquer avec le bouton droit de la souris. Et V serait sur la table du pays. Et on y va. Nous avons des données dans notre base de données, donc nous avons créé avec succès ou trois pays. Et nous pouvons regarder les hôtels correspondants. Très bien, c'est ainsi que vous pouvez mettre les données initiales dans vos applications principales .net en utilisant Entity Framework Core et le contexte DB. 14. Repositories du service et de dépendance: Bienvenue de retour. Donc, nulle part sur le point de créer nos référentiels et ce que nous allons implémenter est le modèle de développement vraiment. Laisse-moi juste donner un peu, mais grandir et nous pourquoi nous devons passer par ça. Lorsque nous faisons notre travail avec notre API, il est assez facile d'écrire simplement les requêtes en utilisant Entity Framework, Core et link. Et nous l'écrivons surtout comme ballon. Ils ont deux tables en concurrence avec laquelle notre pays et tout Ito. Que se passe-t-il quand on a des tables 891020 ? Il devient un peu fastidieux d'essayer d' écrire des requêtes chaque fois que nous avons une table et ensuite cela va conduire à la répétition. Et puis si nous avons la même requête plusieurs endroits, alors c'est un cauchemar de maintenance, R3. C' est pourquoi nous allons mettre en œuvre un modèle. Et nous allons utiliser le modèle de référentiel générique à côté l'outil de modèle de l'ONU lui-même valeur sorte de créer un conteneur pour définir des fonctionnalités de base qui seront partagées sur toutes nos tables et toutes nos opérations de base de données dans notre projet. Donc, pour commencer, je vais créer deux nouveaux dossiers. L' un s'appellerait i, i dépôt et l'autre sera appelé dépôt, non ? Donc nous avons un dépôt. Et ça va être une majuscule I. Et puis on en aura un autre que je vais appeler le dépôt. Donc, il y a un concept appelé séparation des préoccupations, où vous voudrez vous assurer que vous êtes toujours fichier sait qu'il fait une chose. C' est pourquoi nous nous sommes assurés de définir deux classes différentes. Pour cela, nous allons définir une certaine quantité de classes individuelles sur le chemin de ce qu'ils voulaient s'assurer que certaines choses sont type générique ne répétaient pas certaines choses, non ? Donc, dans notre dépôt oculaire, nous allons créer une interface. Quelqu' un crée une classe parce que c'est juste rapide. Mais je vais l'appeler référentiel générique. Et allez-y et cliquez sur Ajouter. Et je vais juste changer pour l'interface. Et si vous choisissez l'interface que nous irons bien. La seule chose, c'est que tu dois te rappeler de mettre en public, non ? Donc c'est l'autre raison pour laquelle ils sont classe utils a été oublié de mettre en public dans le passé et qui ne pouvait pas comprendre pourquoi je recevais la flèche est obtenir. C' est ma petite sécurité basée sur mon expérience. Donc, ce que nous allons faire est de faire ce référentiel générique prenne un paramètre générique et sous la forme de t, où t va être une classe. D'accord ? Donc je vais parler de génériques. Ça dit juste que je suis prêt à suivre n'importe quel type de cours que tu m'envoies. Et cela nous aide à créer ces opérations d'abeilles pour différentes situations avec différents types de classes. D'accord ? Donc le premier que nous allons créer une fonction appelée get Sowell obtient. Très bien, donc je vais dire tâche I, liste de type T obtient, accord, et ensuite je vais définir certaines choses. Donc, laissez-moi juste expliquer exactement ce qui se passe dans cet en-tête de fonction. Donc, alors que nous avons affaire à une programmation synchrone, nous devons utiliser des défenses si vous obtenez une flèche, parce que vous ne voulez pas avoir cette bibliothèque qui est mise en évidence là. Quels points, vous savez, vous faites juste point contrôlé et nous allons de l'avant et dans l'utilisation des instructions. Donc, la tâche I, une liste de type t, une fois de plus générique et le nom complet SHA-1 est obtient tout. Donc, obtient tout a un paramètre pour lequel je vais inclure la référence manquante, qui est de type, d'expression, fonction et d'expression, et nous en faisons un paramètre facultatif. Il va aussi prendre et je interrogeable, je interrogeable de type T, j'ai commandé interroyable. D' accord, donc vous pouvez juste réécrire que les habitudes hawaïennes et l'ordre BY c'est aussi facultatif. Et puis nous avons la capacité d'inclure si nous en avons besoin. Bon, alors je vais avoir une fonction de suivi pour obtenir. Donc la tâche T obtient, donc celui-ci va obtenir une liste. Celle-là est juste en avoir un, d'accord. C' est pourquoi c'est la tâche t et la tâche malhonnête je liste. Donc celui-ci va juste obtenir un enregistrement et il prend le même paramètre shun. Et il va avoir l'inclusion ainsi de suite où les bateaux de pêche, la, la fonction réelle alors vous comprendrez ce que le paramètre est vraiment étourdi pour. Nous allons avoir des Sean officiels similaires pour nos opérations brutes. Donc, je vais avoir la tâche insérer T et T D. Donc ce sera celui à créer. On va insérer la plage. Donc j'aime garder celui-là à proximité. Il sort parfois les deux opérations. Et au lieu d'appeler cela plusieurs fois, vous pouvez juste définir un qui prend au moins et il juste ceux du poignet. Quoi qu'il en soit, nous avons Supprimer et conduire trois pouces. D' accord. Et mise à jour. Mais je n'aime pas le faire. La blessure à l'arbre dans le livre, nous avons la mise à jour. Donc, notez que la tâche qui supprime est tâche, tout ce sont des pensées, mais ces deux sont des opérations nulles. D' accord, c'est tout pour notre référentiel générique. Donc, une fois de plus, cela est défini comme b sketch sur quel que soit le type de données, si nous introduisons cinq autres tables et une classe de domaine qui les accompagne, nous n'avons pas vraiment besoin de changer beaucoup ici parce que ces fonctions seraient très bien gérer toute autre table notre domaine. Le coût qui passe à travers. Et donc, sachant que nous avons l'interface, je vais aller de l'avant et créer le béton. Alors quel est le but ? Qu' est-ce qu'une classe de référentiel ? Je suis juste chronométrage sur la classe réelle et je l'appelle dépôt générique sous i référentiel générique. Et non, j'ai juste un référentiel générique et des référentiels génériques allant au même T. Ce qui va également hériter du référentiel générique IEEE où t est un GAS. Je vais juste aller de l'avant et inclure la référence manquante juste là. Et puis ça va à l'entreprise non, parce qu'une fois que nous hériterons, nous devons nous assurer de mettre en œuvre. Donc, je vais juste aller de l'avant et implémenter l'interface. Et puis il génère toutes ces méthodes stubs pour moi aussi gentiment. Alors laissez-nous frais. Oh, c'est exactement ce qu'il nous faut ici. Donc nous allons devoir le faire et n'aurons pas d'injection de dépendance. Donc j'ai dit que si je l'avais déjà fait, je ne l'ai pas beaucoup mentionné. L' injection de dépendance est fondamentalement le concept par lequel tout ce que nous avons chargé dans la startup est maintenant disponible applications blancs. Donc nous n'avons pas besoin d'instancier chaque fois que nous en avions besoin. Tout ce que nous faisons est de faire une référence à l'objet déjà existant parce qu'il a été défini dans notre startup, non ? Donc, plus de contextes trop tôt ou de connexion sont notre pont vers la base de données. Nous pouvons savoir, juste obtenir une copie de cela à utiliser dans notre fichier ici au lieu d'essayer de créer un tout nouveau pont, sont en possession d'une instance de ce pont. L' effet de levier de Kendall, celui qui existe à la suite de son inclusion dans la procédure de démarrage. D' accord, c'est, en un mot. Ce que l'injection de dépendance lire nous aide à faire. Donc, ce que nous allons faire est de définir une lecture privée seulement. C' est privé, c'est en lecture seule parce qu'ils n'ont pas besoin d'y apporter des modifications. Et ce sera une instance de base de données. Contextes. Les droits comprennent toutes les références manquantes. Voilà, en lecture seule privée, et je vais juste l'appeler contexte de soulignement. D'accord ? Et puis de même, je vais juste dupliquer ce neuf parce que je voulais entrer EDL Andy. Je veux DB set. Rappelez-vous l'ensemble dv provenant du même contexte de base de données. Et ça va être défini pour un générique. Donc, je vais juste aller de l'avant et inclure la référence manquante là aussi l'ensemble b de type T, et je vais appeler ceci un dB. Non, ils sont définis pour cette classe. Cependant, l'injection de dépendance MAINTENANT me demandera de créer un constructeur. Et cela va prendre un paramètre de type contexte de base de données. Et je vais changer dans l'insula, le privé aussi honnête a marqué celui-ci n'a pas. Et puis après avoir pris ce paramètre, il est non, il n'est pas d'accéder à celui sont la copie des côtés ou de la procédure. Donc, pour mon utilisation locale, je vais initialiser mes contextes actuels dans lesquels j'ai ma lecture privée seulement pour être la même valeur que celle dans laquelle je suis injecté. Donc c'est à peu près l'injection de dépendance au cas où c'était un mystère à votre avis. Tu sais, c'est comme ça que ça marche. Il y a d'autres nuances à cela. Mais pour null, il n'a pas besoin de devenir beaucoup plus compliqué que ça. Donc, le suivant est sur le score DBE va être égal au contexte bien que j'ai initialisé des contextes. Je peux dire contexte, donnez-moi un ensemble de ce que c'est. Et rappelez-vous qu'à ce stade, T a encore besoin correspondre fondamentalement à quelque chose qui a été décrit dans notre base de données. Asseyez-vous, dans notre DAW est le contexte. D' accord ? C' est pourquoi je peux dire en toute confiance, aller dans les contextes et me donner un ensemble de quoi que ce soit. Parce qu'un contexte ne devrait pas le savoir au moment où nous construisons ce dépôt. Donc, sachez que nous avons fait cette partie, passons à notre mise en œuvre. Donc, faisons la suppression, ce qui est assez facile seul gagne. Ceci est l'entité var est égale à. Et ensuite, je vais attendre. Donc parce qu'ils font une programmation asynchrone après un blé. Donc, j'ai jeté les soins. Ce qui me manque, c'est le mot-clé asynchrone avant que ça ne se passe bien, chaque fois que vous avez une tâche que vous allez utiliser, o il nafta async, d'accord, remarquez quand une clique, l'autre est mis en évidence, ils vont de pair. D' accord ? Donc vous dites, oh, il souligne DB dot find, et je vais juste le trouver, trouver async. Donc endoctriner core, désolé, dans Entity Framework ou pour presque chaque opération, vous avez une opération asynchrone correspondante. Donc, à ce stade, il est là, utilisez-le. Et si vous utilisez async, Vous devez le précéder avec wait. Et par extension, la méthode dans laquelle ce mot-clé wait est utilisé doit avoir un puits sur les arrêts de la méthode. Donc, ce n'est pas dans l'interface, ce n'est pas dans l'interface, mais dans la définition. Et tu dois avoir ça. Comme vous écrivez de plus en plus, vous en aurez le coup. Donc, nous allons trouver est évier et nous allons passer l'ID pour le dossier que nous voulons trouver. Et puis nous dirons db dot remove. Et nous déplaçons l'entité qui n'a pas été trouvée avec cet ID. Et c'est tout pour notre suppression. Supprimer la plage est à peu près une ligne. Il va juste être db dot remove range. Nous avons donc une liste d'entités. Donc, je vais dire db dot, remove, range, et remover et dit, eh bien, donnez-moi la liste des entités. Eh bien, il y a les seules entités choses juste les enlever. D' accord. C' est tout pour la plage de retrait. Donc je vais aller de l'avant et passer par les plus faciles. L' insertion est donc facile, rage de l' insertion est facile et la mise à jour est facile. Et puis nous retournerons à l'obtention et ils auront tout parce que ça peut devenir plus compliqué. Donc, je vais juste ajouter chaque tâche dans l'en-tête de la méthode avec le mot-clé async. Celle-là, c'est des vides. Je n'ai pas besoin d'asynchrone là. Assurez-vous juste que je ne rencontre pas de difficultés plus tard. D' accord, donc pour insérer que l'on est assez simple. Tout ce que nous allons voir est un point db de poids add async, et nous ajoutons l'entité, tout ce qui est venu en tant que données dessus. C' est tout ce qu'on a à faire, non ? Et puis la similitude pour la plage d'insertion va faire est db point range async. Donc celui-ci a un arrangement asynchrone, avis ou déplacement n'a pas d'asynchrone. Droit. Donc, à organiser un évier et la liste des entités que vous devez ajouter. Et puis pour notre mise à jour, nous avons une opération en deux parties. Un, je vais attacher l'entité à la base de données. Donc, en d'autres termes, lorsque les données arrivent, peuvent ne pas être attachées ou il peut s'agir d'un objet qui existe en mémoire sans connexion directe à la base de données à ce moment. Donc je touche signifie faire attention à cela et vérifier si vous l'avez déjà vérifié, s'il y a une différence entre elle et ce que vous avez dans la base de données parce que le portable pour faire une mise à jour, non ? Alors, il commence à camionner pour voir que, accord, il y a certains champs qui sont différents. Donc ce sont deux différents, disons des cartons rouges, non ? Et puis la ligne suivante dirait contextes point entrée. Et puis nous référençons l'état point de l'entité est égal à le modifier. Donc, une fois qu'on l'a dit, il n'a pas été modifié, alors il le saura. Ok, je dois faire une mise à jour. Allons à notre Git. Git est en fait plus facile à faire que de se rendre à tous. Mais une fois que vous obtenez, alors obtenez tous les oméga un peu plus de sens. Donc la première chose que je vais faire est d'obtenir un oeil interrogeable. Je voulais l'appeler requête de ce qui est dans le serveur DB. Mais les DBs sont déjà définis comme étant le type de données auquel nous avons affaire, n'est-ce pas ? Donc, il obtient tous les enregistrements qui sont essentiellement dans cette table. C' est à peu près ce que ça va faire. Et puis je vais vérifier s'il y avait un inclusivement. D' accord. Était-ce et inclut l'exigence, ce qui signifie que l'utilisateur a fait le code appelant , qui a appelé cette getMethod, aimeraient-ils inclure des détails supplémentaires ? Donc, j'ai dit plus tôt que quand il vient à un hôtel et à un pays, au lieu de chercher l'hôtel, puis d'obtenir l'ID de contrepartie et d' appeler à nouveau la base de données pour obtenir le contrat avec cet ID. Et puis c'est deux bases de données parce que vous pourriez faire un appel de base de données et nous recevons l'hôtel et y compris le pays afin qu'il remplira automatiquement cette propriété avec tous les détails de pays correspondants, droit, donc c'est ce que cela inclut est loin. Donc, cet extrait de code dit fondamentalement que si include n'est pas égal à null, donc par défaut ce n'est pas, c'est facultatif. Vous n'avez pas à leur donner de la valeur. Si cependant vous choisissez de mettre sa valeur. Si ce n'est pas égal à null, alors pour chaque propriété dans include, je veux inclure à la requête n'importe quelle propriété a été demandée. Alors ils ont dit pays, alors cette boucle foreach va fonctionner une fois. Si vous avez cinq clés étrangères et que vous les mettez toutes les cinq dans qui inclut ceci, alors cela va courir cinq fois, y compris chacune. peu près ce qui va toujours faire. D' accord ? Donc, c'est complètement facultatif, mais il peut y avoir des moments où vous devez inclure sur leur Tanzanie n'ont pas besoin à des fins de vitesse, vous ne voulez pas inclure tout le temps pour une requête, pour un peu d'informations lorsque Tu n'avais pas à le faire. Donc, cela nous aide à garder l'application plus rapide qu'elle ne le serait normalement si elle incluait tout le temps. Ensuite, la prochaine chose que nous voulons faire est de retourner notre point de requête de poids. Et puis je dirai qu'il n'y a pas de camionnage. C' est là que le camionnage entre en jeu parce que tout enregistrement qui est récupéré ici n'est pas suivi. Les copies prises et envoyées dans la mémoire centrale au client, la base de données et dans des mots différents sont vraiment terribles à elle. Donc c'est pour ça que je ne vois pas une touche, alors on a ce disque qui n'a pas été laissé tomber. Deux sont examinés et je dis toujours commencer à le regarder et il suffit de noter qu'il a été modifié au moment où il arrive ici, il a été modifié. Donc nous obtenons aussi petit camionnage. Mais après c'est ce que je veux vraiment faire est d'obtenir le premier enregistrement par défaut et il y a un async par défaut de premier ordre. On y va. Et puis je peux voir l'expression. Laissez-moi vous expliquer ce qu'est l'expression. Donc l'expression est définie comme Express sur la fonction t Boolean, et c'est le nom du paramètre. Donc, ces données qui nous permettent essentiellement de mettre ce soir une expression lambda parce qu'alors une expression lambda sur nous permettrait de voir ce QI. Et puis le lambda R0 et ensuite dirait point de requête quelque chose est égal à quelque chose d'autre. C' est pour ça que j'ai dit Bool, non ? Quelle que soit la condition. Donc, quand on veut récupérer la carte du vagabond, quelle est la condition qu'on veut utiliser pour récupérer celle de Ricard ? Est-ce par ID, est-ce par nom ? Donc, cela lui permet d'être très générique et flexible car alors nous pouvons écrire ou différentes expressions basées sur le contexte, mais en appelant une méthode à tout moment. D' accord, donc c'est tout pour le prochain, pour le, désolée. Donc la prochaine chose que nous devons faire est d'obtenir tout. Très bien, et obtenir tout va avoir tout ce code avec quelques ajustements en cours de route. Donc, tout d'abord, nous ne allons pas examiner nos valeurs par défaut. Laissez-moi juste modifier cette ligne d'époque. Nous obtenons la requête osmo camionnage et le nombre va faire la liste VO2 est couler. D' accord, c'est ça, oh, c'est 1-0. Appelant une fonction asynchrone, vous devez la précéder avec des mauvaises herbes. D' accord ? Donc nous tournons notre liste. Donc nous l'analysons pour la liste par opposition à celle où nous venons d'obtenir les valeurs par défaut de la première étoile ? Non, nous avons le même paramètre pour les Includes, mais nous en avons un autre pour Ardor Bay. Donc je vais mettre un autre petit extrait lu après. En fait, je vais mettre des extraits d'outils. Donc, d'abord, nous avons la requête. Ensuite, je vais vérifier s'il y avait une expression, quelqu'un pour filtrer la requête avant même de regarder elle inclut. Bon, donc je vais dire si l'expression n'est pas égale à null parce qu'on pourrait chercher une liste de cartons rouges. Mais nous voulons dire que nous sommes, le pays est un sur le soleil. Donnez-moi la liste des photos de la Jamaïque afin que nous puissions mettre dans l'expression pour voir où n'importe quelle condition est nécessaire pour spécifier de la Jamaïque. Et puis si ce n'est pas le cas, même si ce n'est pas égal à null, c' est-à-dire la condition est là, puis filtrez la requête pour moi s'il vous plaît. Donc la requête est égale à la requête initiale qui était tous les enregistrements d2, nous sommes, cette expression est vraie. Après que tu aies fait ça, parce qu'on aurait pu en avoir 500 et savoir que le filtre l'a ramené à 20. Ensuite, vous allez de l'avant et mettez sur les Incluts. D' accord. Et puis enfin, après avoir mis les inclusions et tout, je voudrais que vous commandiez si nécessaire. Donc, si la personne Boston sur l'art ou par l'huile veut en descendant ou ascendant R, ce R que vous voyez juste si elle, si la commande est entrée, l'enquête est égale à R2 par requête. Très bien, donc c'est vraiment tout ce qu'il y a, euh, allez-y, descendez. Donc, nous avons mis la majorité du travail hors du chemin. Nous avons encore deux étapes à franchir et nous en avons terminé avec cette tâche. Donc la prochaine chose que nous voulons faire est de créer ce que je vais appeler cette unité de travail, non ? Donc, nous avons le référentiel générique savoir quand lui donner l'unité de cadre de travail sur le sol supérieur dans le dépôt ire, je vais juste aller de l'avant et ajouter ce qui sera une autre interface. Donc, je l'ajoute juste, je l'appelle i unités hors travail, en changeant ceci en interface. Et celui-ci va hériter du jetable. D' accord ? Et alors ce que nous allons définir dans nos unités sont quatre, que cela va collecter notre registre pour chaque variation du référentiel générique ou par rapport à la classe T, non ? Donc pour l'instant, nous n'avons que deux tables pour répondre. Donc, je vais juste voir un dépôt générique pour le pays. Désolé, pour le pays. Et incluez tous les amis ou disparus. Et je vais juste appeler que le pays est tellement différent que les gens ont différentes conventions de nommage ici. J' appellerais le contraire. Certaines personnes diraient dépôt contraire ou tout ce que je suis Claudia pays. Parce que quand je fais appel aux unités de travail, je peux voir ces pays point quelle que soit l'opération que je veux effectuer. D' accord. Donc, nous allons le faire aussi pour les hôtels. Sont hôtel et j'appelle les hôtels de la propriété. Et puis nous allons avoir une autre opération, qui est la tâche C. Très bien, donc quand nous effectuerons toutes ces opérations, le CCI à mettre à jour, nous apportons des modifications aux contextes. À ce stade. C' est juste mis en scène, non ? Donc, lorsque nous voyons Enregistrer ou Enregistrer les modifications, alors il sera affecté. Donc, c'est à cela que cela sert, mais c'est en dehors du référentiel parce que s'il y a plusieurs changements à faire à ce moment-là, alors tous peuvent être pris en une seule opération plutôt que de faire des coûts multiples ou la base de données. Donc nous avons les unités sont pour. La prochaine chose serait de créer la classe concrète. Donc, dans un dépôt, nous allons ajouter la classe, l'appeler unité hors travail. Et puis vous l'additionnez pour le travail va hériter de i unités O4. Et encore une fois, incluez les références manquantes, puis implémentez l'interface. D' accord, alors ce que ça va vraiment savoir, c'est de dire, d' accord, vous les pays normaux, que dois-je revenir quand vous me faites appel à des pays ? Que dois-je faire ici ? Qu' est-ce que le double disposé, qu'est-ce qui a sauvé ? Ce sont les choses que nous devons définir. Donc, d'abord, je vais inclure une référence au contexte de base de données. Très bien, semblable à ce que nous avions avant. Et puis je vais définir mon constructeur. Porte C0. Essaie encore ça. On y va. Et je vais mettre dans les dates des contextes, ceux volés pour écrire à nouveau dans le panier. Donc je vais juste copier leurs parties là-bas et coller. On y va. Donc, j'initialise le contexte de données à l'intérieur de la cellule d'unité pour une cure et j'ai besoin de le savoir. Ok, j'ai aussi une copie des données du contexte. Alors ils se demandent probablement, alors pourquoi ai-je besoin des contextes ici ? Et c'est vraiment parce que ce que nous devons faire est de retourner une instance du dépositaire, mais nous devons ensuite revenir un peu plus loin. J' ai donc besoin de prier les événements de la même façon que nous les aurions définis de ce côté comme des soldats. Voyez si je peux le faire rapidement. Donc, je vais juste prendre cela et je vais définir deux propriétés privées des Holt et des pays respectifs, mais je ne veux pas les renommer sur quand enlever l'accesseur. Ce sera donc des pays. Sur celui-ci va être des hôtels. D' accord ? Donc, aucune donnée comment ces propriétés privées, je vais dire si ici, que si la propriété privée est vide, puis retourner une nouvelle instance du générique ou des déposants. Je vais juste faire ce tableau parce que C Sharp 9 est plutôt cool. Deuxièmement, il va dire quelque chose comme les pays et ensuite point d'interrogation. interrogation est égal à. Donc c'est le gars de la musique qui dit, si c'est nul, alors que dois-je faire puisque c'est une déclaration si ? Droit ? Maintenant, voyez simplement s'il est nul, puis retournez un objet du référentiel générique du pays de type. Et bien sûr, sur la base de notre définition, c'est que vous avez besoin d'un contexte de base de données, c'est pourquoi nous l'avons injecté ici. Nous passons donc dans le contexte. D' accord, et puis je vais faire la même chose pour une photo. Donc c'est comme notre registre. Non, c'est comme un rouleau de l'extase que tous ces dépôts sont potentiels génériques sur la Syrie et l'unité de travail à laquelle j'ai accès. Au contraire, l'hôtel est sur la table éternelle que vous définissez. Vous devez vous assurer que vous mettez Are vous faites des représentations pour cela dans l'unité de travail I ainsi que dans l'unité de travail. Mais tout ce que nous venons de faire avec le référentiel générique et le référentiel générique, nous ne voulons pas avoir à refaire tout cela avec une autre table de données que nous pourrions ajouter à l'avenir, n'est-ce pas ? Donc, c'est juste un boulon qui maintient cette liste et ces fonctions pour nous assurer que nous avons accès à ce dont nous avons besoin. Ici, dans nos unités, un registre de fourche. D' accord, donc la prochaine chose que nous devons faire, ou bien, deux autres choses. Donc, je veux définir cette pose et ensuite nous devons mettre en place un Save et ensuite nous en avons fini avec ça. Donc cette pose que je vais générer disposer vrai. Donc c'est comme ça que je le fais. Il peut y avoir des variations de l'unité de travail ailleurs. Mais c'est ainsi que j'en suis venu à le faire pour diverses raisons. Encore une fois, le contexte est roi. Donc ce que je vois ici, c'est que je vais appeler une autre méthode. Donc, je vais définir une méthode ici, juste que Visual Studio génère une méthode ou aide sur le Neith à cette fin. Et puis je vais juste dire, eh bien, en fait, maintenant que c'est moi qui le fais. Je vais juste dire ici sur ce contexte de l'étage. Donc, cette pose est vraiment comme un collecteur de déchets. Il voit quand j'ai fini, c'est quand les opérations sont terminées, s'il vous plaît saisir la mémoire. C' est le but. Donc, DC ici est en fait trié pour garbage collector si vous regardez la description garbage collector. Donc, cela signifie que lorsque dispose appelé, alors s'il vous plaît disposer du contexte et de la signification a tué toute mémoire que la connexion à la base de données utilisait, tuer la connexion, tuer toutes les ressources qu'elle utilisait, et allez-y et faites ce qu'il ferait par défaut de toute façon. Donc c'est tout pour l'élimination. La prochaine serait notre Sauvegarder les modifications. Et celui-ci est en fait assez simple parce que ce n'est vraiment qu'une seule ligne, au moins en ce moment où nous voyons un poids, point de contexte change un puits. Voilà la flèche. Je vois. Oh, mais qu'est-ce que je n'ai pas, je n'ai pas l'asynchrone. Une fois que j'ai mis ça là, tout va bien dans le monde. Alors laissez-moi juste dessiner construit pour voir si j'ai cassé quelque chose ou s'il y a quelque chose hors de place et avoir une construction réussie. Donc, cela signifie que j'ai réussi à mettre dans le code pour mes unités sont fork, au moins par code sont syntaxiquement. Plus tard, nous verrons si cela fonctionne ou non. Mais sachez, c'est une bonne fonctionnalité à avoir et cette tâche est faite. 15. MISE à jour-- Le type contraignant comprend pour l'unité de travail: Hé les gars, bienvenue. Donc, nous avons juste fini de mettre en place notre unité de travail qui a été un peu de travail et un peu d'explication et de partage entre un tas de fichiers. Donc j'ai gardé ça simple. Et le partenaire auquel je fais allusion est la partie avec les Incluts. Donc, nous l'avons gardé assez simplement en utilisant simplement une liste de chaîne de type. Et puis dans le dépôt générique, nous venons implémenter cette boucle foreach pour dire pour chaque propriété qui est dans la chaîne, puis allez-y et incluez, eh bien, en ce moment, nous voulons refactoriser c'est un peu parce que le danger de l'avoir de cette façon, c'est celle-là. Ceci est appelé une chaîne magique, donc elle est sujette à une erreur typographique et le compilateur ne saura jamais que c'est une erreur typographique que vous pourriez avoir tapée par inadvertance dans SEO et TR Y au lieu de COUNTA RY, et puis il compilerait, mais cela donnerait une flèche une fois que vous atteignez ce point de terminaison car Entity Framework Core ne saurait pas quoi faire avec la propriété mal orthographiée. Un autre problème pourrait être que je pourrais changer cette propriété de navigation à l'intérieur de l'hôtel de classe lui-même, n'est-ce pas ? Et si je l'ai renommé de pays à autre chose ? Et si je fais cela, alors cela conduirait également à la rupture quand nous, quand nous avons essayé de frapper le point de terminaison, pas lors de la compilation, ainsi de suite pour s'assurer que si quelque chose change dans le code, il casse autre chose afin que nous puissions corriger il est nul par opposition à plus tard quand un utilisateur se plaint de tension, n'est-ce pas ? Nous allons donc modifier les paramètres à l'intérieur du dépôt. Donc, je vais d'abord aller dans le référentiel générique oeil et nous allons changer cet outil de type de paramètre. Et j'inclus une table BigQuery. Donc, je vais juste supprimer cette liste de chaîne. Et je vais mettre ce nouveau type de données qui ressemble beaucoup à celui que j'ai commandé, mais c'est je interrogeable de type T. Et puis c'est j'ai inclus le quesyable et nous allons aller de l'avant et inclure tout manquant références. Donc c'est en fait plus comme une fonction, non ? Donc je vais le faire pour le ghetto, la liste des bons PJ ainsi que le Git. Donc, tout est nul va être ces données plus fortement typées. Maintenant, comme d'habitude, tout ce que nous changeons dans l'interface, nous devons changer dans la mise en œuvre. Donc, je suis juste allé de l'avant et mis à jour ces paramètres dans le générique ou l'affiche avec le même type de données. Et bien sûr, on voit qu'on a un tas de flèches à ce stade. Donc, la première flèche est parce que nous l'appelons, je les appelle inclure, je l'ai appelé inclut avant. Sémantique. Vous pouvez faire ce changement si vous le voulez ou non, mais c'est bon. Nous allons toujours vérifier si c'est nul ou non. Donc je vais juste faire ces changements en gros, non ? Et puis au lieu d'une boucle pour chaque boucle, ce que je vais faire est simplement de dire requête. Si ce n'est pas nul, alors les requêtes égales à inclure, ce qui est non, en fait un téléphone Sean l'enquête. Donc, en d'autres termes, il va voir si j'ai du contenu, alors j'appliquerai mes inclusions à la requête, et c'est la nouvelle valeur de la requête. Donc, cela enlève cette boucle foreach et rend le code beaucoup plus propre à mon avis. Et c'est vraiment pour modifier notre référentiel générique et je référentiel générique maintenant à l'intérieur de nos contrôleurs où nous interrompons réellement avec elle. C' est là que le changement majeur doit se produire. Donc, cette méthode incluait le pays. Donc je vais enlever ça. Et avec quoi ça va être remplacé. Et je vais juste nommer le paramètre. Donc, nous savons que nous avons affaire au paramètre include. Ce qui est remplacé par une expression lambda. Et donc je vais dire q point. Et puis je verrais inclure, inclure, qui est une méthode. Et puis à l'intérieur de cette méthode se trouve une autre expression lambda. Mais avant d'aller de l'avant, nous devons inclure Entity Framework Core afin que nous puissions aller de l'avant et ajouter cette référence de bibliothèque manquante, puis nous pouvons continuer notre frappe avec une autre expression lambda. Alors regardez-le de près. Nous avons Q ou je commence une expression lambda ne doit pas être q, e pourrait être, je, pourrait être de l'encre. Ça n'a pas vraiment d'importance. Nous le savons par je sais, mais je commence juste l'expression lambda et ensuite j'appelle la méthode include. Si vous regardez, vous verrez que vous avez un os Jia Trulia de presque toutes les méthodes disponibles pour vous, mais nous nous concentrons seulement sur le J'inclus sur l'inclusion. Donc Q dot inclure. Et puis nous avons une autre expression lambda à l'intérieur de la méthode include où je vois x point et puis je peux voir la propriété de navigation relative à la classe que nous sommes sur le point d'interroger. Donc, l'importance ici encore une fois est que si quelque chose change dans la classe de domaine, c'est juste du code. Donc si je change la référence de nom ici, alors ce pays n'existe plus. C' est notre ligne rouge. Il ne compilera pas. Nous devons le réparer avant de pouvoir le pousser à la production. Et c'est l'avantage de faire ce genre de changement en tapant fortement vos inclusions. Bon, donc je vais juste aller de l'avant et me laisser chercher le contrôleur du contrat. Nous avons donc une situation similaire ici avec nos hôtels et ce sera le même principe. Donc, je vais juste mettre dans ce paramètre include, inclure les références manquantes. Et cette fois, c'est des hôtels. Donc c'est X point et je peux juste voir les hôtels comme ça. Pas de fautes de frappe. Si j'ai une faute de frappe, alors c'est une erreur. Si je mets quelque chose qui n'existe pas, c'est une erreur, non ? Il est donc préférable d'utiliser simplement ces paramètres fortement typés. Cela semble un peu plus compliqué, oui, mais à long terme, il répondra à la maintenance beaucoup plus facile. Je suis juste en train de compiler pour m'assurer que rien d'autre n' a été cassé avec ces données et que nous avons une construction réussie. Donc, vous pouvez aller de l'avant et continuer et vous voir dans la prochaine leçon. 16. Configuration AutoMapper et dTO.: Hé les gars, bienvenue. Donc, dans cette leçon, nous allons configurer nos objets de transfert de données et nous allons utiliser la puissance ultime pour automatiser le processus de liaison de nos détails à nos objets de domaine. Donc, permettez-moi de donner un peu d'arrière-plan sur ce que je fais sont l'objet de transfert de données est nul. C' est vraiment une partie d'un modèle où nous essayons de découpler notre objet de domaine, signifie Souvenez-vous que cela représente une table de base de données. Nous essayons de découpler cela de l'interruption de l'utilisateur. Il faudra donc que les utilisateurs interagissent directement avec cette classe lorsqu'ils envoient et reçoivent des informations via notre API. Donc, nous avons des détails comme un peu comme une couche intermédiaire qui appliquera certaines déviations finalement à la partie frontale. Et nous pouvons faire beaucoup de choses et cela élargit la flexibilité. Nous pouvons donc l'utiliser pour assainir les données avant qu' passent à notre classe de données et, par extension, à notre base de données. Non, l'automne supérieur est une bibliothèque qui va réellement faciliter ou créatif ou nous l'appellerons mappings pour dire que ce détail, tout comme cette classe de données, Essayons d'abord de configurer nos objets de transfert de données. Donc, dans notre projet, je vais créer un nouveau dossier. Et ce dossier, je vais juste appeler ça des modèles. Les détails sont comme le modèle. Donc, si vous avez l'habitude d'utiliser MVC ou même des pages Ariza ou un autre corps non dominant ou que nous connaissons le mot modèle, i d t, o est juste une façon fantaisie de voir un modèle, mais il est généralement utilisé en termes d'API, non ? Donc, vous pouvez nommer ce modèle de dossier si vous voulez le nommer détails afin que vous sachiez exactement ce qu'il fait, c'est bon, mais je vais juste rester avec les modèles. Maintenant, au lieu du dossier Foreign Models, nous avons généralement un certain nombre de classes qui représentent chacune peut être une variation d'une requête par rapport à chaque objet de domaine. Commençons donc par les pays. Le pays a donc trois champs. D' accord ? Donc, je vais créer un outil soigné qui nous permettra d'interagir avec le contraire ou d'avoir une autre couche. Donc je vais l'appeler Pays D T O, et c'est ma convention de nommage. J' ai mis les détails à la fin du même nom, non ? Parce que je ne veux pas de notre coordinateur ici et d'évoquer là-haut. Et en ai-je fait une modification ? Et puis il s'avère que c'est toujours le mauvais. Donc, en nommant un détail, vous pouvez clairement voir lequel n'est pas le DTU sur lequel on a raison. Alors allez-y, créez le pays dto. Andrei Linde. Vraiment le dto doit ressembler à un outil similaire, la connaissance de domaine réelle que vous dites probablement, ok, alors pourquoi la duplication ? Parce que vous venez de créer une autre classe dans un autre dossier juste pour vous donner les mêmes propriétés. Eh bien, à ce stade, j'ai dit qu'on pouvait ajouter une validation pour que je puisse voir que le nom est requis, non ? Donc, cela signifie que quand un utilisateur va interrompre avec le détail, cette annotation va dire que vous ne pouvez pas m'envoyer d'informations pour ce dto sans cette valeur. Donc si ce n'est pas là, la validation va chasser. Nous pouvons aussi stipuler d'autres choses comme. La longueur de la chaîne. Et puis nous pouvons dire que la longueur maximale est de 150, ou si c'est un pays. Donc, disons qu'aucun pays ne devrait jamais avoir un nom de plus de 50 caractères cependant. Je n'ai pas fait mes recherches, mais nous laisse travailler avec 50, non ? Et si je voulais donner un message d'erreur spécifique, si cela a été violé, je ne peux pas voir les messages d'erreur égaux à l'arbre de maïs. Le nom est trop long. Donc, si cette validation de la longueur de chaîne pour le nom est violée, alors c'est l'erreur manque. Ainsi, vous pouvez toujours annoter la sarcelle de telle sorte que lorsque l'utilisateur interagit avec l'outil, l'usure, manipulation de certaines choses pour s'assurer que nous ne dépassons pas vont hors de la bande de ce que nous voulons que notre qualité de données soit. Une fois qu'ils ont passé avec succès cette validation. Ensuite, nous allons aller de l'avant et faire la cartographie entre le BTO et le pays. Donc, le principe est que l'utilisateur ne verrait jamais le pays quand il verra la classe de données et la base de données ne verrait jamais le détail. Donc les utilisateurs interrompent ici. Et puis au milieu, nous transférons en d eta d'ici à ici. Je le transmets ensuite aux Beats obèses. Donc, toutes les validations que nous pouvons ajouter et juste ajouter cela au nom court. Ici, je vais voir un nom court est également requis sur la longueur maximale pour le nom court serait d'écrire et message d'erreur nom court ou nom de pays court. Et on dit qu'un nom de pays court ne peut pas encore, c'est trop long, non ? Nous pouvons toujours faire du soleil beaucoup et GND Zope. Il y a d'autres annotations que nous pouvons ajouter en cours de route, mais ces deux sont celles que je vais utiliser rationnelles pour le détail. Maintenant, il y a aussi une extension ou extension de ce beurre et un peu plus où nous créons des BTU par opération. Ainsi, lorsque nous commencerons à développer notre contrôleur, nos contrôleurs commenceront à examiner les différents types d' opérations sur les verbes et ce que les gens font ou font. Certains cas où ils ont un détail par opération. Disons que j'ai un détail pour lire le détail pour créer un détail pour la mise à jour. Parce que la réalité est qu'il y a des moments où vous n'avez pas besoin de fournir certaines informations. Donc quelqu'un crée un pays. Je n'ai pas besoin d'eux pour avoir le champ d'identité, n'est-ce pas ? Donc, le détail avec lequel je voudrais qu'ils interrompent serait créer un outil de pays D. Et vous n'aurez pas l'occasion de fournir une valeur pour l'ID parce que nous n'avons vraiment pas besoin de la valeur pour l'ID. Donc, d'une manière générale, doivent avoir le pays ou j'ai les détails de base. Et puis R14 créé parce qu'une fois de plus, crée n'a pas besoin de l'ID. D' accord, donc 1ici, faire des verbes ar, vous verrez réellement la différence entre Hall. On utilise l'un ou l'autre. Je remarque que je le mets dans le même dossier. Les parties de responsabilité unique sont et peuvent prévaloir ici. Et vous faites chacun dans son propre fichier comme nous l'avons fait pour les classes de domaine. Ou puisque c'est une petite application, je vais juste mettre tous les détails qui sont liés à un domaine à l'intérieur la poussière grossière CM dans des classes séparées avec leurs noms appropriés. Donc je vais faire une pause ici et je vais vous mettre au défi d'aller de l'avant et de faire la même chose pour l'hôtel, créer le détail, et d'aller de l'avant et de mettre des validations pour le terrain. D' accord, donc j'espère que vous avez relevé ce défi et je suis là pour vous montrer ce que je savais si vous l'avez fait et que vous n'avez pas de flèches, c'est vraiment bien. Je l'ai fait un peu différemment. Donc je vais juste vous guider dans la réflexion derrière ce que j'ai fait ici pour l'hôtel Dto. Donc, je retourne le script au lieu de créer le till entier, le till et ensuite créer la version Create, ce que j'ai fait c'est que j'ai créé la version Create, puis je le laisse hériter du détail que BaseOne hérite du Create et je vais expliquer cette décision. Revenons à ce que nous venons de faire avec l'accord contradictoire, vous remarquez que nous avons répété les champs, non ? I ID dans l'un mais pas dans l'autre, mais il y avait un nom répété et je refactoriser celui-ci aussi nous avons répété le nom sur short_name, non ? Alors ce que j'ai fait, c'est de dire sur quels sont les champs communs ? Quels sont les champs uniques sinon. Donc ID, je n'ai vraiment besoin d'ID que quand je vais faire une mise à jour ou je vais regarder les détails ou quelque chose qui n'est pas une opération de création, non ? J' ai donc la créativité pour vous, qui va avoir tous les domaines qui sont absolument nécessaires à la création. Ils sont également absolument nécessaires si vous êtes à la recherche des détails ou si vous allez l'être. D' accord ? Et une fois de plus, vous avez des variations. Donc, si c'est que vous vouliez un point dto vous permet seulement de mettre à jour le nom. Et c'est ce que vous voulez exploser le comportement pour mettre à jour uniquement le nom du pays, mais pas le mème court, vous savez, juste par exemple, c_k, alors vous pouvez créer un besoin pour qui dit mettre à jour le nom du pays, BTO, et tout ce qu'il prend poses est le champ name. Donc, vous avez toutes ces options. Cependant, je ne fais pas ce granola dedans. Donc ce que je fais, c'est en définir un où les idées, pas les prisons, et c'est ce que nous allons gérer. Les opérations de création sont les opérations nécessaires non idéales. Et puis j'ai la base qui hérite de celui qui a tous les autres champs. Donc, la base a un ID et il hérite, donc il a automatiquement accès à tout ce qui a été défini. De cette façon, je n'ai pas besoin de répéter mes validations car au départ j'avais les mêmes validations deux fois dans le fichier. Et pour autant d'autres détails que j'ai pu définir, j'aurais eu ces validations encore et encore et encore. Donc c'était ma pensée ici. J' ai donc étendu cette idéologie. Aux détails de l'hôtel. Donc, le détail total de créer, qui a ses validations pour le nom, n'est-ce pas ? Et voir que j'ai copié et collé, je n'ai même pas changé ce message. Donc c'est le nom de l'hôtel est trop long, adresse est trop longue, et vous avez la longueur maximale. Nous pouvons ajouter le prêt minimum. Vous voulez probablement ajouter des longueurs minimales, le nom court, car ils doivent fournir au moins 11 caractères ou même un nom. Un personnage est nécessaire, n'est-ce pas ? Donc, en revenant à un hôtel, nous avons cette validation pour le nom, validation pour l'adresse, l'émeute. Et laissez-moi juste mettre de l'espace pour qu'on puisse voir où tout commence et s'arrête. On y va. Donc, pour le classement, c'est nécessaire. Et j'ai défini notre gamme de 1 à 5 parce qu'ils mangent doit être entre une note 1 étoile ou une note 5 étoiles. Bien sûr, nous utilisons double parce que vous avez 4.54.11.5, et cetera. Donc, le re-ingénieur, Jill voit quelle que soit la valeur numérique qu'il y a doit y avoir entre ces nombres. Et puis l'ID contraire est nécessaire. Non, non ce que j'ai l'ID de contour, mais contrairement à la classe de domaine, je n'ai pas défini le pays. Et aussi manquant au créateur est l'identifiant. Donc ces deux sont manquants parce qu'à la création tout ce dont j'ai besoin est l'ID. Tout ce que la base de données va voir est l'identifiant. Il ne va pas voir l'entité réelle ou quoi que ce soit provenant de ce champ. Sachez que le champ devient nécessaire, cependant, lorsque j'ai besoin de voir les détails, donc comme nous décrivons au lieu d'aller et d'exécuter une autre requête pour savoir quel pays a l'identifiant qui a été fourni ici. Je peux juste faire une inclusion et obtenir les détails du pays inclus. C' est pourquoi dans le détail de base, et je n'aime pas appeler celui-ci la base hérite habituellement de la base. Donc, quand j'ai dit BS, je veux dire seulement celle qui n'est pas nécessairement aussi spécifique pour une opération. Donc je l'utilise lâchement, mais on m'explique juste pour ne pas vous confondre. Donc, hotel dto hérite de tous les champs que nous sommes tous alignés dans la version Create de celui-ci. Mais alors il inclut l'ID et il inclut un objet de type pays dto. Donc, il aurait été assez facile de copier les champs et vous ne vous tromperez pas. Vous n'avez pas besoin de spécifier une clé étrangère dans le détail. Encore une fois, c'est face aux clients. Ce n'est pas centré sur la base de données, donc ça ne se soucie pas vraiment si c'est une clé étrangère ou ne pas simplement dire, Ok, j'ai besoin d'une cause entière j'ai été défini comme un int. Cependant, n'utilisaient pas Pays car à BTO ne devrait jamais France un objet de domaine directement. Beatles ont surmonté les détails. Doumani un objet pensé à des objets de domaine, mapper automatique est le seul pont entre les deux. Donc techniquement parlant, un dto bois ne sait même pas qu'il a un objet de domaine. Donc, il ne devrait pas y avoir de corrélation avec les objets de domaine et id2. Donc, la BTU est définie ici, et la propriété ici est aussi une DTU. Donc après tout ça, je vais juste faire une construction et voir s'il y a quelque chose qui n'est pas à sa place. Et j'ai une construction réussie. Donc tout semble être non, semble savoir où c'est censé être. Je vais juste ajouter deux choses de plus et ensuite nous pouvons aller de l'avant et installer et configurer le mappeur automatique. Sachez, quand on cherche un pays, il est parfois plus facile de chercher le pays, ou parfois plus facile de chercher le pays. Et vous verrez les détails de tous les hôtels qui font partie de ce pays. Donc nous avons fait ce lien ici où nous sommes autorisés à voir les détails du pays pour n'importe quel hôtel. Mais quand j'évoque, a plusieurs hôtels, à droite, nous devons être en mesure de dire, chercher le pays avec la carte d'identité. Et je veux voir tous les hôtels qui sont là, ce qui n'est pas rare partout sur Internet. Si vous cherchez, vous savez, sur un site de réservation pour regarder la Jamaïque, par exemple. Et ça va vous montrer la liste des hôtels. Donc, ce que nous devons faire dans notre objet de domaine, et nous allons répliquer les données à travers aussi. Mais nous devons avoir une propriété qui est liste virtuelle publique et d'autres utilisent liste Ion car c'est une extension du type de données de liste. Et c'est une liste de type hôtel. D' accord ? Et ça s'appellera Hôtels. Et on va débrancher cette propriété. Donc, cette propriété, quand nous n'avons pas besoin de faire une migration pour cela, ce n'est vraiment pas où aller à la base de données. Ceci est juste dire à l'objet de domaine que lorsque vous obtenez des données pour tous ceux-ci, si c'est une demande, alors vous pouvez également inclure la liste des hôtels associés au pays. Alors rappelez-vous dans nos unités de travail, nous avons dit que vous pouvez faire un inclusivement. Donc aurait inclus les détails d'un pays avec un hôtel donné. Ou nous pourrions chercher notre pays et inclure la liste des hôtels. C' est ce que cette propriété est là loin. Maintenant, ce que je vais faire est de permettre au détail d'avoir ce comportement aussi. Donc, dans notre pays dto, je vais placer celui-là à l'intérieur du VT0 non spécifique, non opératoire spécifique. Et une fois de plus, détails vitesse aux détails. Donc détail de l'hôtel, c'est le type de données avec lequel nous avons affaire. Et ça remonte à l'hôtel. Cela n'a pas besoin d'être virtuel. D' accord, donc nous avons un public où le potentiel regarder un pays dto et obtenir la liste des hôtels. En outre, les noms de champs ont trop entre le dto et notre objet de domaine si nous voulions qu'un mappage fonctionne de manière transparente. Sinon, il y a beaucoup de configurations. Je dois aller voir, oh, ce membre ou cette propriété comme celui-ci a dit que nous ne voulons pas passer par tout ça en fonction de ce que nous faisons ici. Tout devrait cartographier à l'autre sont deux son homologue, calme, eh bien, d'accord, donc j'ai vu carte, carte, carte, carte. Alors installons la cause supérieure de l'automne c'est ce que nous allons utiliser pour faire cette cartographie. Très bien, donc faites un clic droit sur le projet, allez à NYU encore paquets. Et puis on va à Burroughs et on cherche un mappeur automatique. Et ce que nous sommes vraiment voulu être en fin de compte des extensions de point supérieur dot microsoft injection de dépendance parce que celui-ci est spécifiquement pour dominer core que bien que sur, il n'est pas optimisé pour .net core, non ? Donc c'est celui que nous voulons. Nous pouvons simplement aller de l'avant et installer la tige d'automne n'est pas la norme là-bas, bien que des outils là-bas qui font des choses similaires à l'automne supérieur, mais celui-ci est très populaire. J' ai utilisé beaucoup. Il ne m'a pas manqué, au moins ces derniers temps, il n'a pas manqué. Donc, nous pouvons faire beaucoup de travail avec la partie supérieure de l'automne. Alors maintenant qu'on l'a installé, oh, j'ai pensé ça sur la flèche. Maintenant tout ce qu'il nous faut pour mettre en place une initialisation, n'est-ce pas ? Donc, ce que je vais faire est juste de créer un dossier. Et vous réalisez que j'aime créer des dossiers est un peu sépare ce qui se passe où quelqu'un est un appel cette configuration de dossier, configurations xy. Et dans ce dossier, je vais créer une classe qui est, je vais l'appeler un initialiseur de mappeur. D' accord, donc nous devons créer que la configuration sur la classe afin que ultime per sait comment il devrait se comporter et le regarder devrait prêter attention à. Donc, mappeur, initialiseur de mappeur. Et nous allons hériter de cette classe appelée profil. Maintenant, une fois que je fais cela, j'ai besoin d'inclure l'instruction using pour le mappeur automatique. Et puis cela me permet de créer ce dont j'ai besoin pour créer un constructeur. Donc, une fois qu'il l'a appelé pour annuler les initialisations. Et puis dans ce constructeur, j'ai besoin de définir toutes les mappages, non ? Donc, en d'autres termes, j'ai besoin de voir que cette classe de domaine appelée Country. Et puis nous allons de l'avant et incluons toute bibliothèque manquante. Leur but est de cartographier directement au pays le TOO. D' accord, allez-y et incluez ceci. Et puis nous ouvrons et fermons l'accolade. Et puis je vais juste suivre ça avec le smog de la rivière dot, qui est aussi une fonction. Donc, cela signifie que le pays avait la classe Nieto a une corrélation directe ou les champs dans le pays a besoin d'une classe comme un direct, ont une corrélation directe pour continuer les champs dto et ils vont dans les deux sens. D' accord, alors je vais vouloir le faire pour tous les détails que j'ai. C' est ce que j'ai dit. Tu peux te faire accorder. Oh, mais une fois que tu deviens granulaire, tu dois t'assurer de couvrir les mappings potentiels, non ? Donc, contrairement à créer et pays à pays, puis hôtel pour tenir le T0. D' accord ? Et puis le même comportement ou traitement Cmd pour l'hôtel à la création Toto BGO. Très bien, maintenant que nous avons la configuration de l'initialiseur de mappeur, nous devons savoir, l'inclure dans le démarrage de notre application. Donc, nous allons au démarrage comme d'habitude, et puis nous allons inclure un lion et les algues inclure ici sur la belle le noyau publicitaire où je suis allé voir Services, dot add, auto, mapper. Et puis cela va m'obliger à inclure quelque chose. Laisse-moi finir de l'écrire. D' abord. On y va. J' ai donc besoin d'inclure ou d'avoir la déclaration d'utilisation pour l'automobile. On y va. Donc, je finirais en haut et je vais voir taper off. Et je vais passer le type de données associé à l'initialiseur par initialiseur. Donc mapper __init__ et obtenir le laser droit orthographique. Et une fois de plus, incluez la référence manquante, n'est-ce pas ? Inclure l'instruction using. Et une fois que je fais ça, tige d' automne est prête et nous allons y aller. Donc, quand nous développons réellement ou terminons des points, nous verrons réellement le polaire de l'opérande d'automne contenir les détails, travail et tout ce qui concerne les classes de données, mais il est bon d'obtenir ces configurations diront à la vague dès le début, donc, vous définissez la norme pour votre application et plus tard, il n'y a pas autant de retouches à faire parce que cette norme a été établie, vous maintenez cette norme à mesure que votre application s'agrandit. Et toutes ces choses sont déjà en place. 17. Référencer et ajouter des modifications à GitHub: Hé les gars, bienvenue. Nous sommes donc au deuxième point de contrôle pour notre projet. Donc, après chaque module, nous allons juste examiner ce que nous avons fait, puis aller de l'avant et mettre à jour notre dépôt en conséquence. Il est donc toujours bon de garder Collins plus courts vos petites victoires de sorte que si vous avez froid est corrompu plus tard, vous pouvez toujours revenir à la version de travail la plus récente de votre application. Donc, tout d'abord, nous pouvons toujours savoir que les changements qui ont été faits en regardant les fichiers sont un deque signifie qu'il était là et il n'est pas différent de la dernière chose qui a été lancé dans. Et un signe plus signifie qu'il a été ajouté depuis le dernier poulet. Donc, Git garde toujours camion hors de ce que le fichier ressemble et vous fait savoir que ce n'est pas différent à travers la porte à Dick sont vous faire savoir que cela a été ajouté depuis la dernière fois. Si vous voulez voir ce qui change, vous pouvez réellement faire un clic droit aller pour obtenir et vous pouvez voir Afficher l'historique ou comparer. Donc, quand vous comparez pour dire, la dernière version que j'avais c'est les gauches et les pages qui prennent mes repères ? Donc, la version autorise que j'avais est à gauche et la nouvelle version est à droite. Donc, cela va vous montrer que ce neuf a été modifié de cette façon. Et partout où vous voyez un vert mis en évidence signifie que quelque chose s'est passé. Donc, lorsque vous travaillez dans un paramètre d'équipe cependant, il est toujours recommandé que vous ne travaillez pas sur les fichiers de couture pour enregistrer car alors si vous modifiez quelque chose sur votre triste j'ai modifié ce même fichier de mon côté, alors nous finirons avec ce concassant sorte de discuter de la situation où il dira , Eh bien, les deux lignes voient deux choses complètement différentes. Lequel dois-je utiliser ? Je ne vais pas avoir à gérer ce que vous appelez les conflits. Je cite Osaka en masse vous montrer que tous les conflits ne sont pas non. Mais j'espère que vous n'encodez pas ça. Donc ce qu'on va faire, c'est vérifier. Donc, pour ce faire, je peux faire un clic droit aller pour obtenir que c'est incorrect. Changements. On y va. Donc manœuvres et je vais Visual Studios à différentes mises en page. On ne veut pas obtenir de changements. Encore une fois, si vous ne voyez pas cela, vous pouvez toujours cliquer sur Afficher et vous pourrez voir cet élément de menu en conséquence. Donc, vous voulez toujours mettre dans un message qui dépeint ce qui était. Donc mon message est le moyen de dire que quiconque verrait le malade, je n'ai pas fait de base de données des unités supérieures d'automne pour l'affaire. Donc vous n'avez pas besoin de l'être, vous n'avez pas besoin d'écrire un essai. Mais laissez-moi au moins avoir une idée ou celui qui a une idée de ce que vous avez fait. Après ça, on peut cliquer sur cette voiture. Ensuite, nous disons de tout engager et de chanter. Donc, il va valider les changements un, et il vous invitera à enregistrer, il suffit de le lire et l'enregistrer va valider les changements localement et ensuite il sera en quelque sorte synchronisé avec GitHub. Et à ce moment-là, s'il y a des changements en attente de l'autre côté, ce qui signifie que votre membre de l'équipe a fait quelques changements et les enregistrer avant. Lorsque vous dites de valider tous les changements insubmersibles, obtenez les derniers. Et encore une fois, si vous modifiez le même fichier avec un contenu différent, c'est là que ce conflit pourrait surgir. Si vous ne le faites pas, alors c'est un processus vraiment transparent. Donc, ici, nous allons vous faire savoir qu'il a été synchronisé avec succès et vous pouvez passer à la tâche suivante. 18. Aperçu - Configuration des points Setting: Bienvenue les gars. À ce stade, nous avons pratiquement terminé au moins la majeure partie de nos configurations. Au fur et à mesure, nous verrons peut-être la nécessité d'inclure d'autres choses. Mais en ce moment, nous voulons commencer à faire fonctionner notre API parce qu' en dehors de frapper F5 et de voir swagger et voir les pattes, rien ne fonctionne, non ? Nous n'avons pas encore d'API. Donc, ce que nous voulons faire est en fait commencer à configurer nos points de terminaison get. Et je vais expliquer exactement ce que signifient les points de terminaison get. Donc, pour commencer, nous allons juste regarder ce contrôleur de prévisions météorologiques qui est venu avec notre projet. Mais c'est en fait juste un exemple de code qui fournit un contexte quant à ce que nous devons faire pour que notre point de fin soit opérationnel. Donc, notre contrôleur, et comme je l'ai déjà dit, contrôle en fait ce qui se passe quand un utilisateur demande une inflammation et enseigne au contrôleur. Les points de terminaison sont généralement déterminés par, sont ce que nous appellerons axones, qui sont ces fonctions qui vont être définies à l'intérieur du contrôleur. Et ce qu'il répond avec R lorsque le contrôleur les options, c'est plutôt qu'il fait le calcul et répond ensuite d'une manière que l'application appelante ou l'application cliente qui essaie d' accéder à l'API saura que c'était un appel réussi. Peut-être. Et d'une manière générale, chaque fois que quelqu'un me fait passer à des marchandises pour récupérer de l'information, où le mot obtient, ils ont quelque chose, s'attendent-ils à obtenir quelque chose ? Donc, dans le contexte de cet exemple de contrôleur, nous voyons que nous, quand nous appelons ce point de terminaison, il va retourner des données. Donc, nous obtenons bêta, donné que ce sont des données très aléatoires. Ce n'est rien de trop grave. Mais la réalité est que c'est la commande simple qui est en train d'obtenir, donc nous avons ce que nous appellerons ces attributs HTTP, non ? Et il voit, il définit le comportement de la fonction. Donc, quand on teste les résultats, et qu'on peut le faire ici, au soccer, et tu vas tout et tu nous montreras tous les exemples de ce qu'on pourrait manger. Cliquez ensuite sur Essayer pour Toyota et cliquez sur Exécuter. Et puis il va savoir montrer que c'était la demande qui a été envoyée. Donc, notez qu'il n'y a pas d'indicateur réel ici pour dire, oh, cette barre oblique est de connaître les enfants et de voir quel était le point final, nous connaissons le serveur basé sur le fait que lorsque nous exécutons l'application, c'est notre adresse de serveur. Et puis on connaît le contrôleur qu'on interagit avec les prévisions météorologiques, non ? C' est le nom de notre contrôleur. Le contrôleur de prévisions météorologiques est un mot clé statique jamais contrôlé et la convention de nommage SSI. Mais alors je ne sais pas ce qui agit dessus, ça, donc ce qui s'est vraiment passé, c'est ça, et je vais juste définir un point d'arrêt ici pour que nous puissions voir maintenant quand nous cliquons sur exécuter, il frappe réellement ces points d'arrêt. Ça appelle cette méthode. Et ça s'appelle Get. Et quand j'appuie sur F5, il revient juste avec toutes les informations qui ont été récupérées de cela. Donc, ce qui se passe vraiment ici, c'est basé sur le protocole et certaines définitions que nous allons faire ici pour chaque option. La façon dont nous formulons nos demandes, il le fera, le contrôle saura automatiquement lequel nous devrions frapper. Et le contexte pour cela dépassé derrière cela est que vous ne voulez pas devenir trop granulaire avec vos noms pour vos actions que vous ne voulez pas voir et obtenir 4x et en obtenir un, obtient un par ID, obtiens un par nom. Vous pouvez appeler, eh bien, vous pouvez appeler l'axone, essentiellement tout ce que vous voulez dire. Je peux lui donner son propre nom. Bien sûr, il ya des normes sont propriétaires de cela. Mais la réalité est que si vous avez plusieurs se mange, nommez-les tous pour le voir obtenir. Mais vous, sur la base des données qui sont nécessaires pour récupérer les informations, vous pouvez spécifier quel obtenir devrait être appelé. Donc, tout cela, encore une fois, c'est juste l'introduction. Donc, et dans la prochaine vidéo, nous allons créer notre propre contrôle. Maintenant, nous allons commencer avec les hôtels, désolé, avec les pays. Et nous allons voir exactement comment il se passe et vous voulez récupérer le pays est la liste des pays à partir des besoins de son via un appel API. 19. Construire le point Construct: D' accord, donc maintenant nous allons construire ou premier contrôleur et nos premières opérations GET. Donc, je vais faire un clic droit sur les contrôleurs, aller à Ajouter un contrôleur, et puis nous allons juste faire un contrôleur vide API. Donc, cela choisissez l'API à gauche et le contrôleur API tiret vide. Et nous allons cliquer sur Ajouter. Non, juste pour un peu de clarté. Nous sommes allés de l'avant et avons résumé une grande partie des opérations de base de données dans nos unités de travail afin ne pas interagir directement avec notre base de données par l'intermédiaire de nos contrôleurs, n'est-ce pas ? Si nous faisions contrôleur API avec des actions utilisant Entity framework, alors il générerait effectivement un contrôleur qui a un objet actif hors du contexte DB, qui est la connexion de base de données. Et nous serions en mesure de faire tout notre cadre d'entité ici. Ce danger hors que cependant, est le danger à long terme, il peut devenir moins maintenable que la fille des exigences, parce que alors vous allez finir par répéter beaucoup de cool, ce qui est pourquoi nous sommes allés jusqu'à R i unité hors travail, abstrait loin. Tout cela rendait ça très générique. Pour que nous ayons une base de code à laquelle nous faisons juste des appels plus dynamiques. Donc pour l'instant, je vais juste m'occuper du M21 parce qu' on n'a vraiment pas besoin d'aller de l'avant et d'érafler celui-ci. Mais au fur et à mesure que nous construisons l'application, vous verrez le caractère pratique de tout ce que nous avons fait. Donc, un tiret de contrôleur PI vide, allez-y et cliquez sur ajouter, puis le nom. Vous voulez généralement, une fois de plus, le neem jusqu'à ce qu'il reflète les points de terminaison parce que tout comme avec les prévisions météorologiques, nous ne surveillons pas quand nous chauffons les prévisions météorologiques de barre oblique URL. Nous nous attendons à nous occuper des prévisions météorologiques. Donc si je m'attends à être avec les hôtels, désolé, je commence par Clincher est que je garde une seule dose. Donc, nous aurons pays sont, disons les pays contrôleur. D'accord. Je voulais dire « pays ». D' accord, contrôleur de pays. Et puis on a notre manette vide. Non, je regarde derrière ce que vous regardez dans ce contrôleur, la racine. Nous avons donc deux mécanismes de routage que nous pouvons utiliser dans le développement d'APA sur ce développement d'API MVC. L' un est le convaincu sur le routage de base, le routage, non ? C' est là qu'on doit aller à la startup. Et nous configurerions dans les points de terminaison américains. On configurerait nos racines. Donc, points de terminaison Quincy, points, vadrouille, contrôleur, racines de contrôleur. On y va. Et puis je définirais en quelque sorte la convention de dénomination. Donc je pourrais dire nom, deux-points, et je dirai juste une valeur par défaut. Et puis la Convention pour le routage serait le modèle. montre devrait ressembler à. Et je vous montre que ce n'est pas celui qu'on va utiliser. Qu' est-ce que je veux juste m'assurer que vous comprenez exactement toutes les options qui sont là. Donc nous aurons le contrôleur et ensuite l'échantillon serait égal à la maison, n'est-ce pas ? Enchère Slash. Et par exemple, index. Et puis de la neige fondante. Tous les paramètres qui seraient requis ne sont pas sous la forme de l'ID. D' accord, donc cela devrait être encouragé dans les accolades aussi. Donc, ce serait notre façon de définir convaincu sur le schéma de routage de base. De cette façon, chaque fois que je demande entre, cette requête a besoin d'un Alistair spécifique que nous recherchons pour un contrôleur de disque de ce nom. Par exemple, contrôleur de prévisions météorologiques, ou fait un point de terminaison que nous espérons rechercher. Mais nous voulons ces actions spécifiques. J' ai donc mentionné que nous ne voulons pas être trop précis avec nos actions. Nous ne voulons pas dire obtenir les pays, obtenir le pays, pays par nom, obtenir le contour par, vous savez, nous les listons juste toutes les 1250 ventes aux enchères. Et puis vous appelez le client contre nous pour se souvenir de l'axone à utiliser à chaque appel. C' est donc ce que cela nous obligerait à faire jusqu'à présent. Et, et c'est, c'est probablement plus utile pour une application Web dans notre application MVC régulière. Mais quand nous considérons les normes d'API Arrest, ce qu'ils veulent, c'est que le verbe détermine ce que vous allez faire. Alors nous allons utiliser ce que nous appellerons les attributs rotatifs, n'est-ce pas ? Ce qui va juste dire, cherche le contrôleur. Et si nous voulions modifier la séquence, disons le contrôleur de slash api. Alors quoi que vous mettiez ici, qu'est-ce que ça va venir après les noms de serveur, nom de serveur étant localhost, deux-points, quel que soit le port deux de barre oblique, quelle que soit la route, n'est-ce pas ? Donc, si vous regardez en arrière, que vous avez des prévisions météorologiques, pétrole où les prévisions météorologiques, c'est ce qu'il y a là. Donc c'était cette barre oblique le contrôleur étant prévisions météo. Si nous regardons notre nouveau, nous voyons que nous avons slash api contrôleur slash. Donc, les liens auront l'air légèrement différents. Donc, quand on générera le doc de foot, tu verras ça venir à la lumière. Mais en ce moment, ce que nous allons utiliser est le routage basé sur les attributs. D' accord ? Donc, il nous permet de mapper directement à notre contrôleur et directement aux actions du tout étant trop spécifique sur laquelle exacte. Mais alors le verbe va déterminer quels endpoints devraient être appelés en fonction de la requête ci-dessous. Donc maintenant que nous avons tous été allumés, mais grandissons et nous allons effectivement câbler des offres et obtenir. Donc, avant de pouvoir faire autre chose, nous devons inclure nos privés en lecture seule i unité de travail afin que nous puissions profiter de l'accès à la base de données. Très bien, et je vais juste appeler celui-ci sur l'unité de travail de pointage. Donc, c'est ma convention de nommage où j'utilise un trait de soulignement et vous verrez qu'il est d'utiliser un trait de soulignement pour les variables privées. Et vous verrez que nous allons, donc nous en avons besoin. Et je vais juste mettre le bûcher. Donc, je l'enregistreur pour ça, nous devons aller installer ou des injections. Donc, je vais juste copier et coller rapidement ces afin que je n'ai pas besoin de typage monétaire à faire. Alors. Une fois de plus, l'injection de dépendance signifie qu'une fois que nous avons enregistré et sur cette note, nous devons aller au démarrage et compléter une configuration. Eh bien, une fois que vous avez enregistré quelque chose dans la startup en tant que service dans le bootstrapper, il devient disponible à quatre en injection dans la plupart des cas, non ? Jusqu' à présent, notre contrôleur, nous pouvons injecter l'instance de l'unité de fourche et nous allons juste en faire une copie à un usage local étranger. C' est ce que c'est quatre. Et nous ferons la même chose pour l'enregistreur. D' accord, donc nous avons nos copies locales de ceux-là. Non, la chose que nous devons faire dans une startup est d'enregistrer l'unité de travail. Donc, nous créons un intervalle, nous avons fait un enregistrement dans le bootstrapper. Donc je vais le laisser et je vais vous montrer l'erreur que vous auriez et ensuite nous pourrons la résoudre ensemble. D' accord, donc en continuant, après avoir fait ces choses préliminaires pour configurer mon constructeur, je vais définir que je veux sur HTTP. Et vous pouvez voir tous les verbes potentiels qui y figurent. Donc HTTP Get opération. Et pour terminer cette opération, je vais utiliser le public. Je vais juste aller asynchrone. Donc async public, tâche de type axone résultats. D' accord, donc si vous, si vous aviez généré le contrôleur avec le, avec l' Entity Framework, sont-ils ajoutés à celui-ci ? Tous auraient été défendus de résultats d'action. Donc, vous obtenez juste le code asynchrone du bloc. Donc, il est bon de commencer à utiliser lseek de la, dès le début, je peux nommer le pays get. D'accord. C' est très bien. Je veux dire, eh bien, dans ce cas, je veux tous les pays, donc les pays parce que je suis multiple, non ? Encore une fois, en fonction de notre routage, nous n'avons pas besoin de le préciser. Eh bien, vous voyez ça plus tard. Et puis notre tâche null va faire une capture d'essai. D' accord, donc nous allons essayer d'opérer et gérer toute erreur que nous pourrions avoir. Et je vais étendre ceci avec x afin que nous attrapions réellement l'objet exception. Et puis ici, je vais dire que les pays var est égal à o ou unité hors travail pour appeler les pays. Et puis je peux dire, prenez tout. D' accord, ça a l'air bien. Maintenant, rappelez-vous avec notre méthode, nous pourrions mettre et des experts ici si vous vouliez ajouter un filtre et obtenir toutes les entreprises où nous pourrions faire beaucoup de choses à partir de cette méthode seule, mais maintenant nous avons juste besoin de tout. D' accord, et puis je reviendrai. Donc, les types de retour sont très importants. Tu veux retourner toutes les clés quand tout est allé à notre, accord, c'est pour ça que ça s'appelle ok. Ou 200. Donc pour commencer ce numéro est 200 et nous pouvons retourner le vieux gosse avec les données. D' accord, donc ça a l'air bien. Jusqu' à présent, nous allons le modifier en peu de carburant, mais c'est ce que nous allons essayer de faire. Et si tout se passe bien, nous reviendrons. Ok, et ça va renvoyer au client appelant toutes les données provenant de cet appel. Sachez dans notre prise, à ce stade, notre bûcheron devient très important. Donc, erreur de journal de point d'enregistreur. Et puis je peux voir quelque chose comme le signe du dollar. Quelque chose a mal tourné. Et je peux voir que je peux mettre plus de détails dans le et quelqu'un utilise mon interpolation. Est-ce que ce dollar signe là au cas où vous n'en êtes pas familier, n'attribuez pas de chaîne. Il a fait ceux destinés à super imposer n'importe quelle variable à ce stade. Donc, je vais juste spécifier un peu le nom de la méthode où tout s'est mal passé, d'accord. Alors, nommez les pays. D' accord. Et puis je vais au patron dans l'objet d'exception. En fait, j'ai ça à l'envers. L' exception devrait venir en premier dans l'erreur de journal, virgule d' exception, puis quelque chose s'est mal passé avec notre exception, puis notre message. Donc, le journal Assyria avec en fait juste des seuils sont imprimés sur toute la trace de la pile. Ainsi, vous pouvez voir tous les détails de la flèche de l'exception qui a été vraie. Non, s'il y a une erreur, je ne veux pas simplement lancer ce que je voulais faire c'est alerter le client que quelque chose a mal tourné, Lee, donc oui, l'enregistreur voit que c'est pour tout usage interne. Mais alors je veux retourner quelque chose que l'utilisateur voit, vous savez, c'est ce qui se passe. Donc, un code d'état 500 est le code universel pour voir qu'il y avait un problème de serveur. D' accord, donc ça dit à l'utilisateur que ça, quelque chose s'est mal passé à part. Ce n'est pas toi, c'est moi. D' accord. Donc, le code d'état 500 signifie Erreur interne du serveur. Et d'autres disent s'il vous plaît essayer à nouveau plus tard. D' accord, c'est ce que sont nos clients. Regardez puis-je et consommer l'API verra quand il y a une erreur. Sinon, ils devraient obtenir la liste des pays. Laissez-nous tester ça. D' accord, donc la première chose que vous remarquerez, c'est que , non, notre nouveau point final a été ajouté au swagger. La deuxième chose que vous remarquerez est la différence entre la boucle de liens Holden. Donc, slash prévisions météo pour nous-mêmes slash api pays slash. Encore une fois, cela a à voir avec la route que nous avons définie apparaissent si c'est un contrôleur de slash api ou c'est juste le nom du contrôleur. D' accord, donc c'est dynamique. Donc, à tout moment, nous pouvons aller et supprimer l'API si c'est trop ennuyeux, mais nous allons le laisser pour l'instant. Alors laissez-nous le voir, essayez-le, puis nous cliquons sur Exécuter. Et qu'est-ce qu'on a ? Donc, tout d'abord, C'est l'URL de la requête, donc le serveur, OK, slash api pays slash. Et nous recevons cette erreur, c'est ça. Donc c'est en fait cracher Tool ou swagger toute la réponse. La mer ne parvient pas à résoudre le point de service activant ce point et vous voyez qu'il monte 500 erreur. D' accord, on lui a dit de retourner un 500 chaque fois qu'il se passe quelque chose de mauvais. Et l'autre chose à remarquer cependant, est que je ne spécifie pas le nom de la fonction appelée. Donc, avant de corriger cette erreur, notez que je ne dis pas slash api contrôleur slash slash slash get pays. Il appelle seulement le pays slash api slash. Vous, l'utilisateur ne connaissez pas le nom de la méthode appelée et étant, vous savez, renvoyer la réponse. Donc c'est une autre chose que lorsque nous parlons de la convention de routage, parce que nous spécifions que c'est, je la reçois automatiquement formée. Ça devrait être une commande Git. Donc, nous allons réparer l'ère et ensuite je vais la tester à nouveau en utilisant Postman, ce qui devrait fournir un peu plus de contexte quant à ce que nous entendons par GET versus post, et cetera, et cetera. Donc, pour corriger cette erreur, nous devons enregistrer notre service et je suppose avant dans notre démarrage, pas cs. Donc, au démarrage, nous devons dire quelque chose comme Services dot et ajouter des unités i transitoires ou quatre unités de travail. Donc, vous verrez les différentes options scolaires sont transitoires, ajouter portée, et ajouter le singleton. Oui, parfois j'oublie, non ? Alors ajoutez la chose que nous avons fait, un signal d'ajout TA1 avant, ni nous ne l'avons pas fait. D' accord, donc je suis trans. Cela signifie que chaque fois qu'elle est nécessaire, une nouvelle instance serait créée à portée signifie qu'une nouvelle instance est créée pour une période ou pour la durée de vie d'une certaine requête de mise en service. Et ajouter singleton signifie qu'une seule instance où ils existent pour toute la durée de l'application. Donc, en fonction de vos besoins, vous pourriez finir par en faire différents. Donc, ajouter transitoire ici signifie que chaque fois que quelqu'un touche mon contrôle, je vais toujours créer. Cela va toujours fournir une nouvelle copie. L' UI et c'est hors travail. Permettez-moi donc d'aller de l'avant et d'inclure les références manquantes. Et puis réessayons cette demande. Donc, cette fois, je vais utiliser Postman pour gérer cette requête. Je vais toujours essayer de voter seulement pour le montrer. Ok, donc on a une erreur pour l'enregistreur. Et d'accord, réparons ça. Donc, ce sont, il est bon de voir ces erreurs. Dc peut dire pourquoi. On ne peut pas. On peut suivre ces chaussures jusqu'à Y où on les trouve. Donc, je pense que le problème avec l'enregistreur est qu'il doit être injecté avec le contexte de la classe est injectée dans. Donc, dans ce cas, ce serait le contrôleur. Donc je vais juste échanger cette Alyssa I un bûcheron dans le contexte de ce changement où nous voyons la météo pour évoquer Schrodinger. D' accord, et puis essayons encore une fois. D' accord, donc on va essayer avec le facteur cette fois. Donc, je vais juste entrer l'URL de la requête, qui est encore une fois juste le est le deux-points localhost, le numéro de port que vous avez. Et puis slash api slash pays. Personne ne parlerait de GET contre post contre spots. Boltzmann, on peut essayer de changer le type. Alors rappelez-vous que nous l'avons construit pour être, je comprends que c'est ce qu'il est conçu pour être. qui signifie que si j'essaie d'appeler ce même point de terminaison sans post, cela va me donner un ne pourrait pas obtenir de réponse. Et OK, je reçois quelque chose à cause du SSL. Donc, vous pouvez simplement aller de l'avant et désactiver la vérification SSL et si vous rencontrez ce problème, d'accord, nous y allons. Donc méthode Mata charge. Méthode Mata charge signifie qu'il a envoyé une requête et le verbe qui a été demandé. Ces noix existent. D' accord, donc si j'avais essayé obtient et puis envoyer à nouveau nonce, je reçois un 500 et je reçois une autre flèche. D' accord ? Oh, on a une bonne erreur. Donc, ce concept de bonnes erreurs, où il est bon de voir ces erreurs et de comprendre comment les corriger, non ? Donc celui-ci dit que System.out prend point JSON donne une exception car un cycle potentiel détecté. Donc, le dollar a grandi à cela est qu'en raison de la dépendance à l'hôtel, Hôtel a une dépendance à l'égard du pays sur le pays. Il a cette dépendance à l'hôtel. Une fois qu'il est dit que c'est bien, je reçois hôtel qui a le contraire, je suis les hôtels d'Andrea. Je vois beaucoup de données comment aller d'un côté à l'autre. Alors je le suis, réparons celui-là. J' ai déjà rencontré celui-là. Alors allons-y et réparons ça. Pour ce faire, nous avons besoin d'une bibliothèque, gérer, obtenir des paquets. Et nous allons obtenir la nouvelle bibliothèque JSON soft dot, mais pas celle que nous voulons. Le Microsoft est b-a. Laisse-moi taper un nouveau tour doux. Ce n'est pas celui qu'on veut. Nous voulons celui-là, celui qui est optimisé. Pour notre but, n'est-ce pas ? Donc, je vais juste aller de l'avant et installer out1. Très bien, et une fois qu'il a été installé, ce que nous devons faire est d'aller au démarrage. Et nous allons ajouter des contrôleurs. Nous allons ajouter un nouveau JSON doux TEN. Là, nous allons définir quelques options. Donc tous les lambda RO, je veux dire que vous pouvez l'appeler option si vous en voulez. Tolkien va bien. Lambda R0. Et puis définissez ce point OP sérialiser ces paramètres de sérialiseur. Référence des points, la gestion des boucles est égale à deux lions analogues, alors ne vous éloignez pas trop de l'écran. Donc, les paramètres sérialiseurs gestion de la boucle de référence point est égale à JSON point doux de Newton, pas à la gestion de la boucle de référence. Et puis c'est une énumération, ainsi de suite pour dire ignorer. Donc, où vous voyez cela, nous voyons essentiellement où vous pouvez voir une boucle de référence se produire. Je ne sais pas, faites une grosse affaire avec ça, juste ignorez-le. Tourné les yeux. Laissez le programme s'exécuter. D' accord, donc une autre chose que je viens de traverser et de corriger les petites erreurs qui sont faites ici. Nous appelons obtenir tout ce que je n'ai pas fait était d'attendre une règle cardinale chaque fois que nous appelons une fonction asynchrone ou quelque chose qui est une tâche, s' assure que nous sommes des poids. Bon, alors essayons encore ça. D' accord, pour retourner au facteur, on va essayer d'en envoyer plus. Et ça a l'air un peu mieux. On y va. Status 200, d'accord ? D' accord, donc encore une fois, notre statut 200 est un sable universel que tout va bien. Et au lieu d'avoir à dire le code d'état 200, Knidos nous a donné une méthode car c'est malheureusement qu'ils n'ont pas méthode pour le moteur FIFO ou au moins je n'en ai pas encore vu une pour l'instant. C' est pourquoi celui-ci a l'air comme ça. Et nous pouvons simplement dire ok, avec les données à retourner et il sera automatiquement sérialisé en. On y va. D' accord, alors remarquez que chaque propriété revient et que les hôtels sont vides, Farnell, n'est-ce pas ? Parce que nous n'avons pas inclus les électeurs. Ce qu'on pourra faire plus tard. Donc, c'est comme ça que nous gérons je n'ai pas 7x une modification de plus à faire et c'est de faire le mappage. Rappelez-vous donc que nous ne voulons pas retourner les objets de domaine réels. J' avais raison, non. Obtient tout est de retour pays. Et le pays est l'objet de base de données. Ce que nous voulons retourner, c'est le dto. Donc, nous voulons revenir, contribuer accord. Et puis plus tard, nous verrons comment nous pouvons étendre le détail pour être un peu plus, rendre logique quant à la raison pour laquelle je vais passer par toute cette pelle parce que clairement le modèle de données que le modèle de domaine en tant que type de retour a fonctionné. Mais nous voulons toujours cette ségrégation. Donc je vais juste dire la continuité ou nous allons la cartographier. Nous avons donc besoin de notre mappeur Automne pour le faire. Et pour obtenir la partie supérieure de l'automne, je dois définir un type privé en lecture seulement appelé off. Je suis supérieur, donc je vais juste aller de l'avant et inclure ça et ensuite faire l'injection. D' accord, donc nous, après l'injection, nous allons séparer les sujets. Donc, nous allons dire que les pays var sont égaux à cet appel. Et puis je suis sorti d'une autre variable sous cela et l'appeler via les résultats est égal à carte de points de mappage que je suis allé pour spécifier le type de données que je veux mapper. Donc je veux le mapper à notre liste de pays de type dto pour lequel je dois inclure une référence manquante, d'accord ? Et divulguer ces crochets d'angle. Et la cartographie en temps de guerre est des pays qui sont déjà en train de revenir en liste. Très bien, donc quel que soit le type de données que vous êtes, vous revenez pour vous assurer que vous mappez à ce type de données approprié, puis tout cela. Donc, il va juste prendre tous les objets de domaine et les convertir en objets dto pays et y stocker. Donc, si je ne spécifiais pas la liste d'ions, j'obtiendrais une erreur car c'est une liste. Et j'essaie de, eh bien, ça donnerait une erreur indépendamment, cela peut ne pas vous donner une erreur de syntaxe, mais vous pouvez voir que le type de données n'est pas tout à fait ce que je m'attends parce que j'ai besoin de cette liste, non ? Donc, soyez très explicite dans cette section de carte. C' est votre cartographie. Je liste ceci, ou vous obtenez que j'espère le mapper à une liste de ce type de données. Et puis, au lieu de retourner, les pays renverront des résultats qui sont de type Pays D À. Donc, à ce stade, si c'est que nous voulions laisser quelques détails sont inclure plus de détails. Nous aurions pu définir ces champs supplémentaires ici, ne faites pas ce que les calculs voulaient faire ici. Et puis ils ne verraient jamais vraiment ce qu'il y a, ce qui vient directement de la base de données. Ce que nous l'aurions assaini, transformé, embelli autant que nous le voulons avant de retourner les données. Alors allons juste essayer et vérifier que celui-ci fonctionne et ensuite nous en avons fini avec ce truc. Revenons au facteur, on va dire « envoyer ». Donc ça va frapper la même méthode. Et c'est vrai, non, ça ramène. Donc voici une preuve qui apporte quelque chose de différent parce que rappelez-vous, les hôtels étaient au bas de la liste initialement, pas de nom d'hôtel d'identité que les noms courts. Donc, vous savez que ces données sont restructurées uniquement parce que les champs en contredisent vous êtes dans un ordre différent de ce qu'ils sont dans les objets de domaine. Quoi qu'il en soit, nous pouvons voir que cela fonctionne toujours et c'est comme ça que ça devrait vraiment être. Donc, quand nous reviendrons, nous allons voir comment nous pouvons obtenir un pays spécifique en fonction peut-être de la carte d'identité. Commençons par l'ID. 20. Construire GET par Id Construct: Très bien, donc auparavant, nous avons configuré notre méthode get, et c'est vraiment comme get all méthode, mais ce n'est pas tout le temps que notre application cliente veut tout obtenir. Parfois, je voulais obtenir des données spécifiques, d'accord, donc nous voulons au moins les fournir sur les points finaux où ils peuvent obtenir un pays basé sur un identifiant unique particulier. Dans ce cas, l'ID. D' accord ? Et juste pour le contexte, puisque nous facturons à l'API avec le contexte de ce client. Si vous avez vu une liste de pays et qu'il voulait voir les détails de l'un de ces pays et que vous cliquez sur afficher, alors ce qui se passerait est qu'il retournerait à la base de données et que ce pays spécifique affiche l'inflammation spécifique est le détail de ce pays. D' accord, donc c'est la même chose pour laquelle nous voulons fournir un point de terminaison. Donc, quand de leur côté, quand l'utilisateur clique sur le pays, ils sont sujets à des bogues, nous allons dire quel pays a été cliqué ici, quels ID il y a ? Voici l'API ID. S' il vous plaît, puis-je avoir les détails ? Et puis on dit : OK, on va faire la recherche. Voici les détails de ce pays. Donc, sans plus tarder, allons-y. Donc, en fait, je vais juste copier l'original get. D' accord, et on va juste faire quelques modifications mineures. Donc, la première modification sur serait les attributs. Donc oui, ils sont tous les deux et ça, c'est ça. Mais ce Get en particulier a besoin de savoir qu'il peut prendre un paramètre, d'accord ? Et c'est vraiment, cela fait beaucoup à voir avec la documentation sur les fins son bois, de sorte que lorsque les gens le voient, ils peuvent en même temps déduire comment il diffère au fur et à mesure qu'il se passe. Ainsi, vous pouvez définir le Git, mais ensuite vous ouvrez et fermez accolade, puis à l'intérieur, vous définissez le modèle pour le bien. Donc, je peux dire ici que je m'attends à ce que certains environnements soient appelés ID et qu'il devrait être de type int. Donc, si nous voulions obtenir par nom, nous pourrions faire quelque chose comme le nom de la chaîne de type. Bon, donc, vous savez que ce get va prendre ce nom de paramètre. Et les noms sont très importants. Et ce type de données, qui est également très important. Ensuite, on va devoir renommer ça. Je veux dire, obtenir des pays, ce n'est pas obtenir des pays, c'est obtenir un pays. Et il prend un ID de paramètre. Donc, comme avec n'importe quelle autre méthode dans c-sharp, une fois qu'ils appellent une méthode qui a des environnements sont dans, vous devez défendre l'appartement que c'est ce qu'il attend. Et notez que le nom ici, beaucoup est le nom qui est dans les attributs. Très bien, alors obtiens l'ID du pays, nul. Nous avons le même essai. Eh bien, nous allons changer la requête et les objets de mappage. Donc, d'une part, nous n'obtenons pas des pays où obtenir pays et travailler sur elle de la même manière. Ce sont les unités, les quatre pays, ce que nous appelons la méthode get. Très bien, et notre getMethod, remarquez la ligne rouge, la méthode get nécessite l'expression sont la stipulation derrière ce qu'il devrait obtenir exactement. Nous devons donc définir dans cette expression. Alors rappelez-vous que j'ai dit que l'expression va vraiment être une expression lambda. Je vais transmettre ce même genre d'expression lambda. Toujours dire Tolkien lambda R0. Et puis qu'est-ce que je cherche ? Q point. Et puis j'ai tous les champs hors de la table. Donc ça a été conçu pour les pays, n'est-ce pas ? Alors, quel est le champ dans les tables du pays dois-je chercher ? Je cherche un IB. Et ma condition est que l'ID dans la table du pays correspond à l'ID entrant par le paramètre. D' accord, et de la même manière, je peux inclure, parce que j'y pense juste. Si vous me demandez le pays dans ce contexte, quelqu'un a cliqué sur un pays. J' ai compris que vous voudrez peut-être voir tous les hôtels de ce pays en particulier. Donc, en regardant la liste des pays, vous vouliez seulement voir peut-être la liste des pays. Cependant, quand vous regardez un pays, vous voulez probablement voir tout le loto, n'est-ce pas ? Donc nos hôtels, donc je voulais dire une nouvelle liste, quelqu'un Abbas dans une nouvelle liste de chaînes de type. Et je vais y ajouter. Donc c'est tout ce que nous initialisons une liste et nous pouvons dire que je veux inclure des tos entières. Donc, une fois de plus, cela va maintenant passer, c'est nos unités hors travail va frapper le, laissez-moi trouver la méthode qui est dans le référentiel générique. Et ça va frapper le get. Donc, c'est l'expression, c'est les Incluts. Donc il a tous les cartons rouges. Ensuite, il est dit, s'il y a un inclusivement, allez-y et incluez tout ce que vous devez inclure, incluez les hôtels, n'est-ce pas ? Et puis nous allons regarder dans la requête, enlever le camionnage et retourner la première étoile par défaut pour exiger que beaucoup est, et par défaut signifie vraiment juste retour affinité néolithique. Eh bien, le premier enregistrement qui correspond à cette expression, donc ils s'exprimeraient serait où q dot id est égal à la valeur ID. Nous ferons tout le calcul et nous reviendrons. Ils veulent Red Guard a pris pays avec tous les hôtels qui sont disponibles. Donc, je vais juste vérifier avec mon domaine juste pour m'assurer que la chose est appelée Hôtels cause ce système beaucoup de la même manière dans l'ETO conscient, il doit être appelé orteils. Bon, maintenant qu'on a fait ce câblage, je vais juste changer ma cartographie. Donc, je parle d'un objet country, des objets juan. Donc je ne vais pas monter sur notre liste. Je fais juste une cartographie pour contribuer à la sarcelle. Donc c'est une cartographie one-to-one. Et j'enlève les S et répare les pluriels et les singulaires juste pour qu'un code soit explicite. On ne devrait pas appeler ces pays quand on n'en a qu'un, n'est-ce pas ? Donc j'essaie juste de m'assurer que c'est lisible. D' accord, et puis on va voir quelque chose s'est mal passé au nom du pays. D' accord, alors prenons celui-ci pour un tour pour voir que le get est très simple, non ? Nous ne voulions pas là-bas et nous avons pris le quota avec quelques modifications. Potentiellement pas avec ça. Alors voyons. Donc la première chose sur laquelle je voulais attirer votre attention est la documentation. Donc, vous voyez API slash pays et API idiotie slash pays ID barre oblique. Donc, cet ID étant affiché là est courtoisie de notre annotation ici. D' accord ? Et puis, si nous explorons vers le bas, vous verrez qu'ils voient réellement que le paramètre ID est requis. Pas deux façons à ce sujet. C' est un requis. D' accord ? Et si on dit « Essaie tout », tu peux mettre ça. Mais je vais mettre, je vais utiliser Postman pour tester celui-ci. D' accord ? Donc, quand je dis aller bien avec le facteur et le même point de terminaison et CSS et que je reçois l'origine maintenant obtenir, ce qui est d'obtenir la liste. Non, quand je modifie ce point de fin et que je dis barre oblique un, accord, puis cliquez sur envoyer, regarder ce que je reçois la boîte, donc je n'obtiens qu'un seul résultat. Et voici la carte d'identité. Et c'est la liste des hôtels qu' il n'y a qu'un seul hôtel associé à l'hôtel numéro un. Commencez par le pays numéro un. n'y a qu'un trou dans ce que c'est sur IRI. Donc, s'il y en a plus que tous seront répertoriés sous cette propriété ou attribut. Et puis le nom est le compte factice de short_name est GM. Donc, vous voyez que notre deuxième Git fonctionne. Laisse-moi juste mettre notre point d'arrêt. Et sûrement ce qui se passe quand nous répondons à cette demande. Donc, en plaçant notre point d'arrêt là, puis en cliquant à nouveau sur Envoyer, le point d'arrêt est activé. Si nous regardons dans la liste des paramètres, nous voyons notre valeur, une qui arrive. D' accord ? Et puis on peut aller de l'avant et je vais utiliser F 10. Donc, les nouvelles si elles ne vont pas dans toute la méthode provoquent que si je regarde un objet de pays revenir, vous verrez des hôtels et c'est au moins avec un seul identifiant, le nom, le nom court, et ensuite nous faisons le mapping. Donc aucun résultat n'a toutes les données qui étaient juste dans le pays. Et puis il va revenir à tout k avec les résultats va automatiquement le désérialiser le sérialiser dans les mises en page JSON. D' accord, et juste là, on en a fini avec notre deuxième get. Donc, maintenant, nous savons arriver à tous, et maintenant nous savons comment distinguer les exigences particulières par ligne de base. 21. Configurer des points Setup pour les hôtels: D' accord les gars, donc je vous lance un défi. Je veux que tu mettes la vidéo en pause. Oui, ça commence juste à, mais allez-y et arrêtez-le. Et je veux que vous alliez créer un contrôleur pour les hôtels. Vous pouvez appeler son contrôleur de l'hôtel. Et la fonctionnalité que nous venons de traverser avec notre contrôleur de pays. Je veux que tu le répliques dans le contexte des hôtels. Donc je l'ai déjà ici. Mais je veux que vous fassiez une pause où le vent passe ensemble. Mais je veux que vous arrêtiez l'activité pour vous-même. Et puis nous comparons les notes. Bon, Buck et moi sommes Sagan Buck parce que je suppose que vous arrêtez la vidéo et que vous savez que vous reprenez. Et maintenant, on peut le traverser ensemble. Ici, nous avons le contrôleur de l'hôtel et j'ai fait les mêmes étapes. J' ai cliqué avec le bouton droit sur les contrôleurs, j'ai cliqué sur Ajouter un contrôleur de données, contrôleur d'API vide appelé le contrôleur total. Je suis allé de l'avant et j'ai injecté de la musique sous les mêmes services qui n'étaient pas dans le contrôleur de contact et les initialiser dans le constructeur ? Non, tout est identique. Les seules choses qui ont vraiment changé où mes noms de variables, parce que évidemment je ne vais pas appeler celui-ci pays si nous avons hôtel. Donc obtenir des hôtels au lieu d'obtenir des pays se faire dire téléle, au lieu d'obtenir hôtel x2 et la similitude, vous voudriez arriver à un hôtel par ID. Une autre chose que je voudrais un point dit serait la cartographie où la cartographie pour tenir le T0. Et la dernière chose serait que j'ai ajouté plus d'attributs. Donc, comme nous voyons ce type d'attribut d'Eden, il indique le swagger Elis. Et je veux dire, il dicte le comportement, mais swagger ne dépend de son aussi de savoir comment LTL formule cette documentation. Donc ici, je lui fais savoir que cette méthode produit 200. Il produit aussi 500 parce que si vous vous souvenez, quand nous avons regardé swagger et qu'il est revenu à 500, vous auriez vu quelque chose voir sans papiers sous cette erreur 500. Et donc nous voulons juste nous assurer que swagger dit contextuellement autant d'informations au développeur que possible à tout moment. Alors, et j'ai parlé de swagger. Vous allez voir le pays de ségrégation différent de l'hôtel. D' accord ? J' espère que vous voyez ça. Et si nous regardons l'hôtel ou l'un de ceux-ci, que les attributs étaient les deux attributs ont été ajoutés à. Vous verrez que le 500 n'était pas là au départ et voir le 200 null 500 n'était pas là initialement. Bon, donc ça marche ou pour quelqu'un d'utiliser Postman pour faire des tests. Donc j'ai encore mon test de l'époque. Et le truc, c'est qu'avec Bozeman, tu peux toujours commencer un nouvel onglet, non ? Donc, au lieu d'utiliser une baignoire pour changer continuellement, je voulais en avoir une pour le ghetto sans paramètre et distribue ici. Donc, ce n'est pas un paramètre qui voit si cela fonctionne. D' accord, désolé, ils n'ont pas testé mon code avant. Non, je l'ai écrit et je ne l'ai pas testé et je suis heureux de voir que ça marche. D' accord ? Et puis celui avec le paramètre qui fonctionne également. Et pour l'instant, c'est tout ce qu'il y a à mettre en place nos contrôleurs. Très bien, donc autant de contrôleurs que vous pourriez avoir, bien sûr, des variations et basées sur des contextes, certaines choses peuvent différer. Mais nous avons un bon modèle sur lequel nous pouvons construire nos opérations Git. D' accord, donc tu peux aller de l'avant et juste faire ça. Et quand nous reviendrons, nous pousserons nos modifications à nos dépôts. 22. Touches finde et ajoutez des modifications à GitHub: D' accord les gars, donc nous sommes de retour dans notre projet et notre tâche aujourd'hui est simple. Où faire cygne pour vérifier tous nos changements ? Donc, tout ce qui est avec notre SDK aurait été modifié en cours de route une fois de plus, et tout ce qui a un signe plus vert a été ajouté. On peut donc aller de l'avant et faire des changements. Et je vais juste rafraîchir ce que je n'ai pas besoin de rafraîchir, partager toutes mes modifications. Et au lieu de cela, quelqu'un a mis dans mon message. Et mon message est juste de faire savoir à tout le monde que j'ai ajouté le contour et que les méthodes de get de l'hôtel fixent également les unités hors travail de référence d'injection de dépendance DI parce que rappelez-vous que nous avons fait cette modification au démarrage. Pour que je puisse aller de l'avant et m'engager et couler. Et une fois cela fait, nous sommes prêts à passer à notre prochain module. 23. Sécuriser votre API - Aperçu des sections: Bienvenue les gars. Dans cette leçon, nous allons faire un bref aperçu du concept de sécurité par rapport à votre API de repos. Maintenant, quand on parle de sécurité, même si c'est un peu explicite. Lorsque nous parlons de ce qu'est la sécurité, nous devons en quelque sorte entrer dans quelques détails lors de la discussion de trou, nous sécurisons une API. Maintenant, certaines de ces choses sont déjà prises en considération et sortent de la boîte avec au moins pas .NET Core API. Je ne peux pas vraiment voyager pour d'autres frameworks de développement d'API. Une fois de plus, la tension pour l'API .net, où ils ont en quelque sorte d'appliquer ou fortement encouragé certaines considérations de sécurité dès le départ de la création du projet. Et puis c'est à vous de décider si vous voulez continuer avec c'est vraiment et vraiment qu'ils le rendent si intégré que vous faites demain réaliser que toute la sécurité pourrait être hors de la boîte. Donc, le premier et probablement le plus important serait d'utiliser SSL. Donc SSO est un SSL standard, TLS. Il existe des normes pour la communication HTTP et ce qu'ils font est d'appliquer une certaine quantité de cryptage sur toutes les communications traversant le canal, n'est-ce pas ? Donc, lorsque vous créez le projet, je crois qu'il y avait une option là pour activer ou désactiver SSL et bien, je n'y ai pas apporté beaucoup d'attention. Mais si vous voulez voir si SSL est activé, vous pouvez toujours faire un clic droit aller dans le projet de réplica de propriétés, beaucoup de propriétés descendent au débogage. Et puis vous verrez ici que SSL est là par défaut. Donc, même en mode débogage, ils vous encouragent à utiliser SSL. Et bien sûr, lorsque vous publiez, vous êtes encouragés à utiliser les certificats SSL AS appropriés. Sinon, vous avez également accès à un système d'authentification de l'utilisateur très puissant sous la forme de noyau d'identité, nous serons assis, ce qui vous permet d'autoriser, authentifier, et disons les quêtes de désinfection basées sur qui, selon vous, devrait accéder à votre API. Maintenant, vous n'avez pas toujours besoin de cela pour une API. Parfois, votre API doit être accessible publiquement par tout le monde. Et puis il y a des moments où l'inscription de quelqu'un vérifie qui avant qu'il puisse accéder aux informations basées sur notre API et non, n' importe qui pourrait y accéder. La liste des hôtels sont particuliers loi hôtelière sera. Il n'y a aucune restriction pour authentifier et autoriser un utilisateur avant de le faire, cependant, nous allons mettre en place des choses qui nous permettraient de contrôler en quelque sorte qui a accès à un utilisateur. Bien que des choses comme ce que nous exposons dans nos URL et quand nous disons des URL, je veux dire comme Ici, nous sommes Rappelez-vous que lorsque nous voulons qu'il arrive à un hôtel particulier où charger l'utilisateur topos cet ID, ce ne sont pas des données sensibles. Cependant, si c'était quelque chose comme un mot de passe ou quelque chose que, vous savez, vous ne voulez pas voir le monde, alors vous ne voulez certainement pas le mettre dans des appartements. Et donc, la façon dont vous concevez, vous avez un moyen défensif de concevoir votre API de telle sorte que vous sécurisez implicitement certaines choses. Donc, avec un mauvais design, vous pourriez introduire des failles de sécurité. Donc, bien sûr, ce que vous permettez d'être Pâque aussi joli et prend les paramètres de Laura. Ce que vous calmez Êtes-vous crypter le long du chemin toutes ces choses, il, en rendant votre application sécurisée. Maintenant, avec tout ce qui dit, parfois nous pensons que nous devons avoir une chose très, très sûre. Nous avons essayé de mettre toutes les formes de sécurité dans notre API, et ce n'est pas nécessairement vrai, comme je l'ai toujours dit, le contexte détermine beaucoup. Donc, je vais vous donner un exemple d'une fois que j'ai dû développer une API ou supérieure sont détenues par un tiers. Et le concept était que ce service tiers fournissait des services de messagerie que mon entreprise aurait utilisés pour diverses applications ? Non. Ce que nous ne voulions pas faire était d'intégrer le point de terminaison tiers dans 5-6 obligations différentes. Parce que si le fournisseur modifiait son design ou quelque chose, il aurait cinq ou six points de contact différents qu'il faudrait maintenir. À la place. J' ai été chargé de développer une API qui consommerait l'API tierce, puis les applications internes consommeraient mon API de sorte que si le tiers modifiait leur conception, nous n'aurions que le 1 à changer car tout le monde consomme notre API déjà interne. Sachez quand, quand, quand la compagnie a mentionné que, bien sûr, la sécurité était très élevée sur la liste. Et je suis allé de l'avant et j'ai mis en œuvre toutes sortes d'authentification sur celui de Tolkien. Et nous allons regarder Tolkien aussi au fur et à mesure que nous allons. Mais toutes sortes de protocoles de sécurité et vraiment était exagéré parce que l'API interne était juste qu'elle était interne. Nous avions une liste blanche IP et des protocoles de protection réseau très solides entourant ce qui fonctionnait en interne sur notre réseau. Donc, pour avoir une application interne besoin de vérifier qui elle est afin d'accéder à l'autre API interne avant qu'elle ne soit envoyée au tiers. Tout ça était vraiment exagéré. Ça nous donne un scénario où j'aurais personnellement mis en œuvre quelque chose qui était exagéré. Après un certain temps, nous venons de construire tous les trucs en excès et nous avions tous les protocoles de sécurité pour éliminer l'équilibre du tout. Donc, une fois de plus, le contexte détermine beaucoup. Cependant, pour cette section, nous allons implémenter l'authentification, qui signifie que nos clients devront s'inscrire auprès de notre application, avec notre application API. Et ils devraient se connecter en passant le nom d'utilisateur et le mot de passe qu'ils auraient utilisés pour s'inscrire. Et puis après cela, nous les assumerons ce que nous appelons JSON. Les jetons Web sont des jetons porteurs qui auront des informations qui nous informeront chaque fois qu'ils font une demande de qui ils sont afin qu'ils n'aient pas à continuer à se connecter avant de pouvoir faire des choses qui le font une fois, obtenir ce Tolkien et transmettre ce jeton à chaque fois pour que nous puissions vérifier et accepter ou refuser. C' est ce que nous allons faire dans cette section assez de mon monologue. Prochaine étape, nous allons créer notre noyau identitaire qui intègre le noyau identitaire dans notre projet. 24. Configuration du noyau d'identité d'utilisateur: Hé les gars, bienvenue. Donc, notre première ligne de sécurité sera pour l'authentification. Et pour implémenter les fonctionnalités d'authentification dans notre API, nous allons profiter des bibliothèques intégrées de Neck CT. Nous allons donc apporter quelques modifications à notre contexte de base de données, à notre démarrage et à d'autres petites choses ici et là. Commençons donc par nos contextes de base de données où nous devons le changer d' étant contexte DB à null étant contexte DB d'identité. C' est donc juste une autre classe qui nous permet de profiter de ces services d'entité. Et quand je fais des points de contrôle, vous voyez ici que vous avez la possibilité d'installer une identité package.net si R dans un noyau de travail différent. Donc, vous allez de l'avant et trouvez et installez la dernière version. Et une fois que cela sera fait, nous devons apporter une autre modification. Visite sur la création de modèles, où je dois dire point BCE sur la création de modèles. Très bien, donc après avoir appelé la même fonction dans la classe de base, qui est notre nouvelle classe de base, je vais juste passer le long des objets de construction de couture que nous utilisons dans le contexte DB actuel. Maintenant, c'est la première étape. Nous allons passer au fichier de démarrage, puis commencer à apporter des modifications ici. Maintenant, ce que nous devons faire est de configurer nos services d'identité pour savoir quelle classe va être utilisée pour déduire les tables qui seront générées. Avant de passer à autre chose, permettez-moi de revenir un peu plus loin et d'expliquer ce qui va se passer. Où dire notre application dès le début que nous voulons utiliser, nous devons des services d'identité. C' est ce que nous sommes sur le point de faire. Sachez que les services d'identité seront basés sur une connexion de base de données à bien, une connexion à une base de données qui a des tables pour faciliter les choses liées à l'identité, utilise des rôles de stockage, les revendications de stockage sont connues les deux choses. Donc, ce que nous devons faire est de configurer les services d'identité pour savoir quelle classe va informer l'apparence de la table des utilisateurs. Et s'il y en a potentiellement un autre pour les rôles, les règles du titulaire, nous regarderons, et cetera. Donc déjà intégré est l'utilisateur appelé notre classe appelée Identity user. D' accord, laissez-moi aller de l'avant et inclure, disons que c'est un verre légitime qui est déjà intégré, qui peut être utilisé. Nous examinons les détails de l'utilisateur d'identité. Vous verrez qu'il a des champs pour local et vous n'avez pas besoin de venir ici. Mais si vous voulez arriver à ce point à nouveau, ce clic de contrôle puis les continents ou le contrôle cliquez jusqu'à ce que nous arrivions à cette partie. D' accord ? Donc, nous avons ces champs par défaut qui apparaîtront dans la base de données comme vous pouvez le voir de l'ID, nom d'utilisateur, e-mail et mot de passe, hachage de mot de passe, non ? Donc, ce sont des champs communs que toute table utilisateur doit avoir son traitement avec le hachage automatiquement. C' est tout, ça va toujours avoir tout ça intégré. Pas de problème. Cependant, il peut y avoir des moments où nous avons besoin d' un peu plus d'inflammation de la part de nos utilisateurs, puis juste e-mail, mot de passe et nom d'utilisateur potentiellement. Donc, ils nous permettent d'étendre la classe d'utilisateur d'identité et de mettre dans d'autres champs comme nous avons fait le nécessaire. J' ai donc déjà commencé ce processus dans les données crée cet utilisateur d'API d'herbe. Vous pouvez aller de l'avant, cliquez avec le bouton droit sur votre dossier, allez à ajouter un nouvel utilisateur API de classe. Et puis dans l'utilisateur API, ce que j'ai fait est d'hériter de l'utilisateur d'identité. Alors rappelez-vous qu'une fois l'héritage arrive, nous l'avons fait avec nos détails plus tôt. Donc, nous le faisons non, avec les administrateurs, c'est l'utilisateur, il va hériter automatiquement tous ces champs ainsi que tout autre champ dont je vois avoir besoin. Donc, dans ce cas, j'ai juste besoin de FirstName, LastName. Vous pourriez vouloir des dates de naissance égales à un pays de naissance, code régional, d'autres choses, peu importe ce que vous voulez, vous pouvez simplement étendre cette herbe et les ajouter, mais il aura toujours ces champs par défaut. Donc, une fois que vous avez cette classe créée, vous pouvez apporter deux modifications. Avant de revenir au début, je voulais ajouter cette classe en tant que contexte pour le contexte DB, mes crochets d' angle et voir l'année de contexte DB par rapport à l'API utilisable parce que par défaut, il est bon d'utiliser l'utilisateur d'identité. Donc, si vous n'avez pas cette exigence où vous avez besoin de plus de champs, alors vous n'avez pas à faire cette étape supplémentaire. Cependant, il serait bon de faire cette étape supplémentaire parce que plus tard, si vous avez besoin de l'étendre, vous pouvez le faire sans beaucoup de mal de tête ou bousculé. D' accord, donc c'est un changement de plus que nous aimerions. Contexte DB. Non, nous devons configurer les services d'identité. Donc je pourrais le faire à partir d'ici, mais je vais en quelque sorte apporter un autre voyage non, où nous ne voulons pas certains parfois vous ne voulez pas continuer à mettre et mettre dedans et le début des piles est gonflé. Et puis vous devez faire défiler les montagnes de citations, un ventilateur une configuration. Donc, ce que nous allons faire est de passer à notre projet pour créer une nouvelle classe. Si tu voulais le mettre dans un dossier, c'est bon, mais je vais le laisser à ce niveau. Donc, je veux appeler ça des extensions de service. Et puis à l'intérieur des extensions de service, je vais avoir un vide statique public. Et je vais appeler celui-ci configure les identités. Donc, cette classe va être comme, eh bien, c'est l'extension de service, disons qu'ils vont la configuration qui va continuer à charger dans cette largeur de fichier de démarrage, nous pouvons l'abstraiter à cela et cela s'appelle la méthode est à part ME, eh bien, vous verrez ça. Donc, je vais dire ceci comme un paramètre, ceci, et puis je service collection et l'appelle ses services. Inclure les références manquantes. Il y avait un but et puis cela n'est pas prêt à dire que je dois avoir cela comme un statique. Gus, on y va. D'accord. Donc, à l'intérieur de cette méthode, je vais avoir un verbe, je vais l'appeler constructeur. Donc, fondamentalement constructeurs, il va y avoir comme une fusion de nous construire des mêmes services que nous aurions ajoutés ici. Donc, de la même façon que vous auriez dit points Services et vous ajoutez ceci et cela. On peut l'abstraire de ce verre. Et maintenant nous l'appelons, c'est de l'autre côté, donc vous verrez en temps voulu. Donc nous allons être je suis r dot ajouter le noyau d'identité. Et puis nous passons dans la classe utilisateur. Donc, une fois de plus, nous utilisons l'API de classe utilisateur personnalisée utilisateur, API, utilisateur, non ? Et puis ouvrez et fermez l'accolade. Et j'ai juste besoin d'inclure tout manquant ou de faire référence à leur objectif. Et puis je vais avoir mon lambda Tolkien où peut personnaliser certaines choses sur la langue sainte va, les interactions de l'utilisateur, je peux définir mon mot de passe rédacteur de politiques. Je peux voir que tous les bus les chiffres les plus requis ou ont une longueur minimale, utiliser des caractères uniques. Toutes ces choses sont juste là, même si les promenades sont difficiles. Cependant, je suis plus intéressé à juste m'assurer que mes utilisateurs, donc q-dot utilisateur et nécessitent e-mail unique est vrai. D' accord, c'est le seul à un. Je suis vraiment intéressé par l'application de la rétine. Cependant, vous pouvez expérimenter et vous pouvez ajouter les autres que vous estimez nécessaires. Donc c'est la première ligne et ensuite je vais dire que le constructeur est égal à la nouvelle identité. Donc la plupart des services vont venir avec comme constructeur spécial, GAS chez Tantes, tout ça. Donc, je vais juste dire constructeur de densité et inclure la référence manquante. On y va. Donc nouveau constructeur d'identité, donnez-moi le constructeur, d'accord, donc c'est l'objet que nous venons de commencer, ce type d'utilisateur. Bon, donc quel que soit le type spécifié, ce qui était en bus là-bas, puis tapez parce que je veux utiliser des rouleaux. la même façon qu'il y a un utilisateur d'identité intégré, il y a un rôle d'identité intégré. Donc Roland veut dire que vous êtes administrateur, vous êtes utilisateur, quoi que ce soit, c'est ce que signifie le rôle, non ? Et puis après avoir spécifié cette ligne devrait être là, puis je suis passé dans les services de collecte i. Objet sous la forme de services. Après tout ça, je ne dirai pas de points de constructeur. Et nous devons lui dire où il devrait stocker sont les besoins fondamentaux à interrompre pour les services d'identité au mari. Donc je vais dire le contexte de base, non ? Donc, le contexte DB que nous utilisons comme base de données, nous transmettons l'objet correspondant pour cela. Et une terre de plus aux fournisseurs de jetons par défaut. J' ai dit que nous utiliserons le livre de Tolkien plus tard avec les bits officiels de Tolkien. Je mets tout ça là. Donc juste pour le contexte, encore une fois, cet objet constructeur est vraiment juste de dire, je construis tout ce qui doit faire pour ajouter aux services. C' est à peu près ce qu'on a fait tout ce temps. Donc, ici, nous avons dit Services, points, et nous ajoutons toutes ces lignes et options en cours ne semble pas chose serait une politique de base et ainsi de suite. Maintenant que nous avons extrait, extrait toutes ces lignes. Donc, cette méthode ou pour discuter et cette méthode que je peux connaître au démarrage voir Services point sur l'authentification parce que c'est la première chose que j'ai besoin d'ajouter, l'authentification. D' accord, il y a l'authentification sur le noyau aussi, mais j'utilise à l'authentification d'eux a eu des problèmes avec celui-ci jusqu'à présent, donc je vais juste rester avec. Et puis je dirai services, configurer l'identité. Très bien, gentil et simple. Donc, les services ne configurent pas l'identité est fondamentalement ce que nous venons de faire ici. Donc, vous pouvez commencer à le regarder de cette façon chaque fois que nous devons ajouter quelque chose au démarrage, si ce n'est pas le seul liner comme celui-ci, peut-être que nous pouvons commencer par similaire pour extraire ces choses dans ce fichier et avoir le à envoyer sur l'objet chaque fois qu'il est appelé. D' accord, ce n'est pas la fin du monde, mais différentes personnes aiment voir des choses différentes. Donc certaines personnes, moi y compris, qui n'aiment pas voir les fichiers de démarrage gonflés. Et au moins quand vous avez autant de code, vous devez faire défiler l'ennemi un défilement au-delà de la configuration sur cinq fois et 40 réaliser était là. Ce sont les choses peuvent devenir ennuyeux lorsque votre, votre application sur grandit. Donc, je vous montre juste un moyen que vous pouvez obstruer trop de lignes de code de votre section de configuration et l'avoir dans un espace très confiné. Donc maintenant, nous avons fait tout ça, et nous avons fait toute cette configuration. Ce que nous voulons faire est de faire une migration nulle part avec AJOUTER les tables pour l'identité, monsieur. Donc, ce que nous allons faire, c'est dire la migration du tableau de bord. Nous connaissons cette partie, disons que l'utilisateur ajouté sont ajoutés identité. Il le met comme ça, il a ajouté de l'identité. Et une fois que nous avons fait cela, nous arrivons à notre fichier de migration. Donc maintenant, quand vous regardez à travers, vous voyez les différents noms de table que nous avons la table des intervalles ISBN, nous avons est la table des utilisateurs d'arachide. Et si vous regardez de très près, vous voyez qu'en plus de tous les champs par défaut que nous avons vus précédemment, nous avons aussi les champs personnalisés qui ont été ajoutés au gaz. Très bien, Prénom, Nom. Donc, il va se bagarrer et va toujours mettre dans nos champs personnalisés. D' accord, juste de la même façon et les règles. Et si nous voulions plus d'informations sur les lignes faites cela, nous aurions pu ajouter une classe personnalisée, étendre sa, et ce serait le même. Allons-y et mettons-nous à jour nos besoins obèses. Et avec tout cela fait, nous avons terminé notre configuration pour nos services d'identité. Donc, vous pouvez vous donner une tape sur le dos. Cependant, la plupart de ce que nous avons fait est en arrière-plan. Si vous avez des preuves tangibles de quelque chose en cours, vous pouvez toujours vérifier votre base de données et vous verrez les tables qui ont été générées en conséquence. Bien, mais notre prochaine étape est de configurer réellement les points de terminaison de sorte que les utilisateurs peuvent éventuellement inflammation et être enregistrés en tant qu'utilisateurs de notre API et aussi pour eux de se connecter. Et puis après cela, nous allons parler de la façon dont nous continuons à vérifier que cet utilisateur devrait avoir accès après qu'il l'ait aimé. 25. Finition d'inscription d'utilisateur: Parce que bienvenue. Nous allons donc poursuivre notre cheminement vers la mise en place de notre authentification pour notre API. Et nous allons configurer ce point de terminaison pour les utilisateurs errer, une distribution et pour se connecter et par extension authentification. Non, j'ai déjà triché et mis en place la nouvelle manette pour que tu puisses faire une pause et aller de l'avant et se mettre à la vitesse, n'est-ce pas ? Pourrait contrôleurs, mais crée nouveau contrôleur qui est vide et l'appeler un contrôleur contre. Et je suis déjà allé de l'avant et j'ai commencé à faire mes injections. Donc, 2 ans familier avec vous serait voir pour la toute première fois. Donc vous connaissez déjà l'enregistreur et le mappeur, donc je n'ai pas besoin de les expliquer en détail. Cependant, vous verrez le gestionnaire d'utilisateurs et gestionnaire de connexion potentiellement pour la première fois. Ce sont deux bibliothèques intégrées gracieuseté d'identity core. Ainsi, lorsque vous les tapez, vous pouvez inclure la référence manquante et vous verrez que celles-ci commencent à apparaître en haut. Maintenant, notez le contexte pour le gestionnaire d'utilisateurs et pour le gestionnaire de connexion est l'utilisateur API sont quelle que soit la classe utilisateur personnalisée que vous auriez utilisé lorsque vous étiez en train de configurer l'identité. Si vous n'en avez pas utilisé, vous continuez à utiliser les identités. Donc, quelle que soit la classe, vous êtes assis en tant que contexte dans votre configuration, et ce fichier de configuration serait ici. Quelle que soit la classe que vous vous asseyez là, vous continuez à utiliser cette application pour la gorge. D' accord ? Donc le gestionnaire d'utilisateurs nous donne accès à un tas, notre suite de fonctions qui nous permet de gérer, connecter, de récupérer l'inflammation des utilisateurs, j'ai des utilisateurs. Donc, nous ne voulons pas avoir à écrire un code personnalisé à ajouter ou je n' ai pas à aller et mettre dans une unité de fonctions de travail pour l'utilisateur, l' interaction de la table utilisateur est relativement interaction. Toutes ces choses sortent de la boîte avec l'utilisation de l'argent, il suffit de se connecter gestionnaire et vous en avez un autre appelé gestionnaire des règles. Si nous avons besoin de l'utiliser, alors nous le ferons. Mais je suis juste l'adolescent ou la plupart de ces choses sont encapsulées dans ces services qui peuvent facilement être injectés dans notre application. Donc, maintenant que nous avons configuré notre contrôleur et injecté tout ce dont nous avons besoin, nous devons commencer à écrire nos points de terminaison sont en premier, point de terminaison va être pour l'enregistrement. Donc ça va ressembler à ça. Asynchrone public, tâche, action et résultat. Et le nom est registre. Pour l'inscription, puisque nous aurons besoin de données potentiellement sensibles, ne sera pas potentiellement nécessitera nom d'utilisateur, mot de passe, et ainsi de suite. Je ne veux pas envoyer ça à travers le tuyau dans le paramètre. Donc, nous avons discuté de cela dans la vidéo de présentation où je vais vous voir dans cela. Utiliser le paramètre est assez bien quand c'est quelque chose comme ça, juste un ID et rien à damner, non ? Mais quand vous demandez à l'utilisateur d'enregistrer et de soumettre des informations sensibles, vous ne voulez pas simplement commencer à voir des courriels de chaîne, passe de chaîne, et cetera. Parce que alors tout se croirait en texte brut sur le point de terminaison. Donc, ce que nous allons faire est de faire de celui-ci un post. Donc nous, nous avons fait le travail avec le verbe GET. Nous n'avons pas fait beaucoup de travail ou de travail avec le poste. Donc, un post, tout comme lorsque vous soumettez un formulaire sur Internet, lorsque vous cliquez sur Soumettre pour aller à, disons inscrivez-vous à Facebook ou inscrivez-vous à quelque chose en ligne. Si vous regardez dans l'URL en haut, vous ne voyez aucune des informations figurant dans la liste. Vous savez juste que vos informations ont laissé une page et qu'elles sont allées quelque part et que le pH delta pourrait représenter, c' est ce qu'est la post-opération. D' accord, donc le message est encapsulé et caché des regards indiscrets. Quand on le fait, il est envoyé à travers quatre sites d'implant, comme ce qu'on a vu ici. Donc il n'y a aucune raison de l'attacher. Donc, bien sûr, quand l'Inde a des informations sensibles, vous ne voulez pas utiliser une guitare, tout ce qui ne liera pas l'inflammation qui est envoyé à travers. Donc, avec cela considéré, le paramètre que nous allons utiliser ici va être un coût pour un. Donc, je vais mettre une annotation pour dire obtenir l'information du corps. L' expéditeur doit donc l'envoyer dans le corps plutôt que dans l'URL et le corps de la requête. Et puis nous pouvons spécifier un type de données qui devrait prendre les informations. Donc, je vais dire que le souverain détaillé de l'utilisateur crée un détail de l'utilisateur pour l'instant, mais je vais juste dire détail de l'utilisateur. D' accord. Alors allons de l'avant et crée cet utilisateur dto. Et puis j'expliquerai pourquoi ça ne marche pas comme ça. Donc, dans les modèles, nous cliquons sur Ajouter classe. Nous appelons le besoin de l'utilisateur. Et puis les détails de l'utilisateur doivent avoir au minimum les mêmes champs que nous devons retourner à notre utilisateur EPA. Et deuxièmement, nous avons besoin de l'utilisateur pour fournir. C' est ainsi que je conçois mes détails d'utilisateur. Ils peuvent faire une pause, le répliquer, mais je vais vous guider à travers c'est de toute façon, donc FirstName, LastName lors de l'inscription. Oui, la possibilité de passer ces deux champs. Remarquez que j'ai dit option parce que je suis assis ni comme requis. On a le numéro de téléphone. Donc, si vous voulez contre l'industrie ou le numéro de téléphone lorsque la zone, simplement dire pour l'API, encore une fois, pas nécessaire. Cependant, l'e-mail est absolument nécessaire et le mot de passe est définitivement requis. Et puis pour l'e-mail sera en fait utiliser cela comme nom d'utilisateur aussi. Donc, si nous avons ce détail, comme d'habitude, nous devons nous assurer que notre mappeur connaît le dto. Donc, l'initialiseur de mapper, je vais juste aller de l'avant et voir cet utilisateur APA. Et l'utilisateur dto doit savoir les uns sur les autres et inverser la carte, d'accord ? est donc ce que nous ferons. Donc, le but du corps de départ ici est de voir que lorsque, lorsque je demande atteint ce point de terminaison, vous regarderez dans le corps de la requête, ne regardez pas dans l'URL. Donc, un, je n'ai besoin de rien dans l'URL. Et deuxièmement, si l'utilisateur passe quelque chose dans l'URL, je m'en fiche. Je ne cherche pas d'inflammation dans l'URL. Cependant, le corps de la requête doit contenir des informations avec des champs autant pour l'utilisateur dto. Ils envoient plus d'informations que ce dont j'ai besoin. Il sera ignoré. Mais au minimum, ils doivent les envoyer pour que je les traite. C' est donc tout ce genre de liens quand on parle de désinfecter les demandes et de prendre des décisions en fonction de ce qui se passe à travers le tuyau. D' accord, alors revenons à notre contrôleur de cônes. Et puis ce que nous voulons faire à ce stade, et nous pouvons faire un certain nombre de choses. Donc, je vais tout d'abord, tendance aimé tentative d'enregistrement NC est venu pour et j'ai copié sur Piazza, qui est un peu débordé moi-même. Mais disons tentative d'inscription pour l'utilisateur dto, point email. Bon, donc quel que soit le courriel qui est arrivé sur l'utilisateur dto, c'est ce que je mets là. Donc, je vais également vérifier si l'état valide, si ce n'est pas un état valide. Donc, je peux voir si des modèles. Donc c'est tout ce qu'on vérifie les formulaires, non ? Si vous le faites, si vous avez fait MVC et vertiges ou simplement apprendre l'API, c'est à peu près le même processus. Nous cherchons à voir si l'état des modèles est valide, non ? Donc, à ce stade, je dirais probablement que si ce n'est pas valide, alors je suis allé retourner une mauvaise demande. Donc, cela signifie que vous avez envoyé une demande d'inscription, mais votre champ de validation, donc vous n'avez pas inclus l'e-mail qu'ils n'ont pas inclus ou vous ne répondez pas aux normes que j'aurais établies pour vous concernant la données que vous auriez dû envoyer, n'est-ce pas ? Et puis je peux retourner l'état du modèle afin qu'il informe l' expéditeur ce qui s'est mal passé. D' accord, donc si l'état des modèles n'est pas valide, alors nous le faisons. Sinon, nous pouvons procéder à essayer. Essayez tout simplement haut, haut, attrape cette exception. Permettez-moi donc de traiter de l'exception. Des parties où je vais voir la flèche du journal, quelque chose s'est mal passé dans cette section du registre. Et puis dans les temps précédents, qu'avons-nous fait ? Nous sommes retournés avec un code d'état 500. Donc, un autre type de retour que vous pouvez faire quand il y avait un problème est littéralement problème de retour. Et vous mettez le même genre de message. Pour que je puisse mettre quelque chose qui s'est mal passé. D' accord. Et puis dites-lui qu'il a un score de 500. Donc je vous montre juste qu'il y a différentes façons, vous savez, si vous regardez d'autres ressources, vous pouvez me voir le faire de cette façon et quelqu'un d'autre renvoie notre problème, quelqu'un retourne le code d'état manuellement. Il y a différentes façons de le faire, d'accord ? Mais alors pour ceux qui sont intégrés et ils lui ont déjà donné une méthode j'ai généralement je vous encourage à simplement les utiliser. On s'est donc occupé des mauvaises situations. J' aimerais juste dire que si ce n'est pas juste, faites-le. Non, qu'est-ce que je fais quand c'est bon ? Un, je peux dire que l'utilisateur var est égal à mapper dot mop dans l'utilisateur API. Et puis je mappe les détails de l'utilisateur. Alors il dira, d' accord, beaucoup de tous les domaines que nous connaissons déjà. Nous savons comment le mappeur fonctionne par un null. Et puis sachez que j'ai l'utilisateur. Je peux dire que les résultats var sont égaux à. Et je suis allé à notre poids, notre appel à mon gestionnaire d'utilisateurs points. Et puis voici, voici un tas de fonctions. Comme je l'ai dit, on peut faire un certain nombre de choses. Je peux dire créer une scène. Donc, le gestionnaire d'utilisateurs crée un évier, puis je vais juste passer les objets utilisateur. D' accord, alors allez-y et créez cet utilisateur. Il le prendra automatiquement au mot de passe, le hacher, le stocker, faire tout ce qu'il doit faire. Nous n'avons pas eu à écrire de logique complexe pour vraiment faciliter ça, n'est-ce pas ? Mais parfois les choses échouent. Donc, je vais dire, si ce n'est pas le résultat, pas réussi, non ? Donc, il vous dira, si elle a réussi ne sont pas, alors je vais également retourner une mauvaise demande. Donc je vais dire que quelque chose s'est mal passé. Cette fois. Ce n'est pas les mannequins, le truc. C' est probablement juste une flèche. Donc, la chose est que l'objet de résultat vous donne réellement les flèches. Si vous avez vraiment besoin de les énumérer tous, vous pouvez probablement les mettre dans une boucle, les lister, les mettre dans une chaîne et les renvoyer si vous voulez, si vous voulez donner autant de détails à l'utilisateur. Mais parfois ces détails peuvent être trop sensibles, donc vous devez faire attention aux informations que vous envoyez l'outil Bach, les clients qui appellent, n'est-ce pas ? Donc, à ce stade, je vais juste économiser les demandes de batterie. C' était un 400. Et c'est parce que l'utilisateur ou la distribution sur le terrain, c'est tout ce que vous devez savoir. Alors réessayez plus tard parce que cela aurait pu être de ma faute. Sinon, si vous voulez, comme quelque chose de sérieux leur aurait donné un 500s et tout. C' est de notre côté que le problème est, et si c'est que vous envoyez des données incorrectes, alors je vous dis ce qui est incorrect parce qu'une devise déclare énumérer ces cris. D' accord, et c'est à peu près tout pour le registre. Maintenant, puisque nous avons fait le registre, je pense que nous pourrions aussi bien simplement faire la connexion parce que bien qu'aucun moyen réel de tester notre login statistique de registre. Donc, je vais en fait simplement copier et coller ce code juste en dessous. Mais ce que nous devons faire est de changer le nom de l'action. Il s'agit donc d'une action de connexion. Nous utilisons le même besoin d'utilisateur ont été prises à partir de la même URL, du même corps, désolé, ignorant tout ce qui vient dans l'URL. Et puis ce que nous allons faire est de dire une tentative de connexion pour cet utilisateur. Si elle n'est pas valide, une fois de plus, les contraintes de validation, e-mail, mot de passe. Non. Une chose que nous pourrions vouloir considérer est, avons-nous besoin du même dto ou devrions-nous utiliser le CMB TO pour la connexion et l'enregistrement ? Même principe avec les autres détails, non ? Parce que pour une connexion, je n'ai pas besoin de votre prénom, nom, numéro de téléphone. Je ne veux que votre email et votre mot de passe. Donc, ce que je vais faire ici est rapidement juste faire la classe pour dire connexion ETO. Et je suis allé prendre ces deux champs, mettre juste le login parce que c'est absolument nécessaire Far login trucs. Mais ensuite j'ai laissé cela hériter des connexions. Donc, les champs sont partagés à travers le conseil d'administration indépendamment. D' accord, donc je ne devrais pas appeler ça un utilisateur de connexion. On y va. Faites savoir à mon mappeur que c'est une vague et le mappeur, Non, je n'ai vraiment pas besoin de laisser le mappeur connaitre celui-ci parce que l'opération va être légèrement différente. Donc, je vais laisser les détails de l'utilisateur dans le mappeur, mais je ne vais pas mettre celui-ci et je vais expliquer pourquoi. Donc, connectez-vous détail de l'utilisateur. Encore une fois, c'est une autre partie de la sécurité quand nous nettoyons exactement ce que nous voulons. Parce que si l'utilisateur peut avoir inclus malveillant, désolé, le client ne crie pas à l'utilisateur qui envoie la demande. Le client qui a envoyé les demandes aurait pu inclure une inflammation malveillante dans le corps de la demande. En faisant cette partie ici, je dis que je ne cherche que des champs qui correspondent à ce que j'ai tous alignés dans ce dto, dites ceci ET plus d'informations que j'ai besoin. Il va être ignoré de toute façon. C' est donc une autre partie des considérations de sécurité lors de la création d'API. Donc, nous obtenons l'utilisateur de connexion dto. Et puis pour la connexion, ok, eh bien, nous le validons. Ok, bien. Donc nous vérifions l'état des modèles et ensuite ce que je vais essayer. Donc rien d'autre à changer ici, sauf peut-être les messages de journal pour s'assurer que nous représentons avec précision où regardé Twin à tort. Très bien, donc sous le trio, ce qu'on va faire, je n'ai pas besoin de faire de cartographie, alors laisse-moi juste enlever ce qui est en essayant de commencer à zéro. Je vais dire que le résultat var est égal à, et c'est là que nous utilisons les mots de passe de point du gestionnaire de connexion signant un puits. Donc vous voyez ça et vous pouvez même faire un chèque. Vous pouvez vérifier si le mot de passe serait carted les rafales Australopithecine et bien sûr que cela dira tenu la situation à ce stade. Parce qu'on veut vraiment signer, n'est-ce pas ? Donc, la connexion est de voir prend deux surcharges. Nous pouvons passer dans l'ensemble de l'objet utilisateur. J' ai pris tout le mappage et le mot de passe. Ou nous pouvons choisir de simplement mettre le nom d'utilisateur et le mot de passe, qui est celui que je vais utiliser. Donc vous voyez que je suis les deux options. Donc, si nous les gardons upping passera dans l'objet utilisateur entier ainsi que le mot de passe. Dans ce cas, c'est wiki cependant. Donc, je vais juste dire utilisateur dto dot, et nous utilisons l'adresse e-mail comme nom d'utilisateur et mot de passe utilisateur dto dot. Et puis c'est pour l'aide. Alors lisons ce qu'est la persistance. Il indique drapeau indiquant si le cookie de signature doit persister après la fermeture du navigateur. Non. Je suis une API. Je ne sais pas quel genre d'application appelle. L' API pourrait être facteur. Il pourrait s'agir du navigateur, il pourrait s'agir d'une application mobile. Je n'ai pas besoin de persister quoi que ce soit, alors je vais dire faux. D' accord, et le dernier, l'échec de Lacan, je ne veux enfermer qui que ce soit quand ils ne se connectent pas serait une surcharge administrative. Encore une fois, le contexte est tout, mais c'est ce que notre code de connexion s'allume, ni le résultat ne sera un objet similaire à la tentative de registre. Donc, nous pouvons juste dire si les résultats sont désolé, sinon, résultat non réussi ou désolé, c'est asynchrone. Donc, quand nous ne parvenons pas à mettre sur l'attente, alors le résultat que nous allons obtenir ces tâches de type hors du type que nous attendons. Laisse-moi m'assurer de mettre Dewitt. Et quand je ferai ça, vous verrez que l'intellisense me donnant ce que je m'attendrais. Donc, si ce n'est pas réussi, laissez-moi juste vérifier ce que nous avons fait quand il n'a pas réussi ici. Ensuite, nous disons, nous disons mauvaise demande sur le dessus. Mais si elle est infructueuse, tentative de connexion, ce n'est pas nécessairement une mauvaise réponse était que je dirais juste sont mauvaise demande ou l'hôtel dirait est non autorisé. Droit. Ce qui est un pour 01 si je ne me trompe pas, non autorisé. Et je peux probablement juste retourner le détail de l'utilisateur pour voir que c'est ce qu'ils ont essayé d'utiliser. C' est non autorisé, je suis désolé. D' accord. Sinon, s'il y a ce feu, ça veut dire que tout va bien. Donc nous reviendrons. Je pourrais revenir. D' accord. J'ai utilisé accepté dans le passé, non. Donc tout ce qui a 200 dans la gamme 200 serait considéré comme un ok. Réponse. Alors, OK. Comme 200 vous avez créé qui est je pense outil pour oui, j'ai accepté ce qui est pensé à et cetera. Vous n'avez pas à vous soucier de mémoriser ces codes nécessairement. Sache que dans des situations particulières, vous voulez utiliser celui-ci ou non traité. D' accord ? Donc, c'est à quoi ressemblera notre fonction de connexion. Et d'accord, j'ai fait un changement. Ce pas d'art. Donc, laissez-nous tous, le registre voit que pas tous les chemins de citation, retour de o. c'est pourquoi je suis tellement désolé d'avoir raté ce noeud. Alors rappelez-vous que vous devez toujours avoir un ventilateur d'autres retours. Donc, de la même façon que nous avons dit que vous restez dans Windows, ce qui reviendra accepté par la suite, après le faire ici. Donc j'ai mis le retour accepté en haut aussi, non ? J' ai accepté votre tentative d'inscription et c'est fait. Non. Avant de passer aux tests, je voulais attirer quelque chose de très important à votre attention et c'est les considérations de routine pour ce point de terminaison où il a établi que la règle serait un contrôleur de slash api, dans ce cas, les cônes de barre oblique API. Dans les temps précédents qui disent le contrôleur de l'hôtel, nous aurions déterminé que nous ne pouvons pas avoir deux opérations de get identiques. Le nom de l'action n'est pas pertinent, mais je ne peux pas avoir deux opérations. Comme étant des verbes identiques, le verbe peut être le même, mais alors il doit y avoir une certaine nuance à une implémentation du verbe de l'autre. Dans cette situation, j'ai les deux comme poste. Les deux sont postés. Encore une fois, le nom ici n'a pas d'importance ce qu'ils sont les deux postes aussi, qui signifie que si j'essaie de faire n' importe quelle opération de post va ne pas savoir lequel utiliser. Ils sont tous les deux identiques en termes de ce qu'ils attendent. La seule façon que je puisse vraiment différencier ces deux-là est de leur donner leurs propres racines, non ? Donc, je peux dire que la racine pour le registre est registre. D' accord ? Et puis la route pour une connexion est la connexion. Alors que nous, à ce stade, la seule façon de frapper registre est de dire le serveur slash api slash slash slash registre. En tant que demande de poste. Bien que nous ne frappons la connexion est de voir tout slash api slash o slash slash connexion deux-points. Donc, je spécifie qu'une route pour ce point de terminaison est la connexion et celui-ci est registre. Maintenant nous, ils peuvent avoir des verbes identiques, mais comme il y a des endroits différents, ils n'interféreront pas les uns avec les autres. D' accord, donc c'était, c'est essayer d'enregistrer un utilisateur très rapidement. Alors que vérifions-nous vieux, ce que swagger a généré pour nous n' ajoute rien à son appel pour ID ici et j'en ai besoin. Ils le sont. Pas de poste, pas de recevoir, d'accord. Et puis si je développe, ils me montreront ce dont l'objet a besoin. On dirait que notre Chan a l'air quand il est en train de traverser le tuyau. D' accord, juste pour ceux mêmes pour la connexion. Donc, vous voyez la différence. Rappelez-vous que nous avons deux détails différents. Celui-ci a un mot de passe e-mail et les champs personnalisés. Celle-là. Il faut un e-mail et un mot de passe. C' est ce que je disais, que lorsque vous n'avez pas besoin de toutes les informations que vous créez, je dois céder pour limiter exactement ce dont vous avez besoin dans cette situation. Bon, alors essayons avec la tentative d'enregistrement. Donc je vais laisser cet e-mail. Je vais mettre un mot de bus qui a des personnages et un numéro. Et je suis allé laisser tout est vide parce que tout ce que j'ai vraiment besoin de notre e-mail et mot de passe, cependant, en laissant ceux-ci tels qu' ils sont, ils vont littéralement passer comme String, String et numéro de téléphone. Voyons donc ce qui se passe lorsque nous cliquons sur Exécuter. C' est, cette tentative me donne une erreur de 500. Donc, cela aurait été l'une de ces exemptions qui disaient ne pas résoudre un service particulier pour le moniteur de connexion. D' accord ? D' accord, donc le gestionnaire de connexion abandonne le problème et j'aimerais aller au dépannage. Mais quand je pense à est que je n'ai vraiment pas besoin du gestionnaire de connexion pour cette API. Et je vais vous expliquer. Donc, quand j'ai mis san en manager et injecté ça et toutes ces choses, c'était parce que c'est comme une réaction de genouillère. Chaque fois que nous avons l'authentification à faire, nous voulons toutes les bibliothèques qui peuvent aider à l'authentification. D' accord ? Cependant, dans le cas d'une application Web où quelqu'un soumet une tentative de connexion via un formulaire, cliquez sur Soumettre, puis soyez informé qu'ils sont autorisés à entrer par un message ou une indication indiquant le nom d'utilisateur hello. C' est vraiment le San dans le gestionnaire de créer quelque chose comme une session ou un cookie basé sur la configuration pour gérer cette session utilisateur. En termes d'API, nous ne sommes pas prêts à maintenir une session pour un nouvel utilisateur. Oui, votre registre, quoi ? Nous ne savons pas quand vous allez appeler le poumon entier de l'API. Et ce n'est pas comme si vous alliez être une attente dans l'API pour 1R peu parce que eBay va accepter votre demande, donner votre réponse sur être terminé. C' est pourquoi nous utilisons celui de Tolkien. Donc je ne veux pas y aller aussi, une fois que je me suis mis à parler de Tolkien. Mais à cause du Tolkien, nous n'avons vraiment pas besoin du gestionnaire de connexion au sens traditionnel de ce que fait le gestionnaire de connexion. Donc, je vais supprimer toutes les références au gestionnaire de connexion vraiment. Et je vais commenter le point de terminaison de connexion pour non. Donc c'est le contrôle, Casey, juste un commentaire. D' accord, donc je n'ai vraiment pas besoin de tout ça juste pour qu'on y arrive. Mais je dois juste partir moi-même et je m'excuse parfois que ces choses arrivent. Mais hé, nous allons juste commenter le code et ensuite nous le revisiterons plus tard. Sachez qu'il se rapporte à certains des messages d'erreur que nous voulons envoyer un Bock. Ce que je vais faire ici, c'est que j'avais tout le côté de la flèche du résultat. Vous verrez que vous pourriez trouver un moyen de mettre les flèches de résultats dans un paquet et envoyer quelqu'un pour dire pour chaque erreur dans les résultats, les erreurs. Je n'ai pas dit que ça ne pouvait pas être une information sensible. Donc j'accepte ce risque. Mais je vais dire les états du modèle point et je peux dire ajouter une flèche modale, qui va ensuite me demander notre clé. Je n'ai pas à mettre la clé. Et puis je vais voir une erreur. Dots, je suis désolé, erreur étant le message revenant du code de tentative de résultat. Voilà ce que je fais. J' ai mis le code comme clé, non ? Et donc la clé là veut dire quel est le nom de la flèche. Et puis la description de base serait juste là. Droit ? Ensuite, nous pouvons voir une mauvaise tentative d'utilisateur de requête a échoué ou ils vont rester l'état du modèle car il est déjà évident qu'il a échoué. C' est ainsi que nous allons procéder avec les messages d'erreur pour notre inscription chez lui. Alors essayons ça une fois de plus. Très bien, alors portez un swagger en peau de Buckskin avec tous les points de connexion et les points. Mais nous allons juste essayer de mettre mon mot de passe compliqué une fois de plus et ensuite exécuter. D' accord, et ça a l'air un peu mieux. D' accord, donc d'abord il n'y avait pas de plaintes concernant gestionnaire d'utilisateurs ou un service informatique qui n'était pas enregistré. C' est 12. Voyez ici maintenant nous récupérons un 400 et nous récupérons quelques détails car la montre est fausse. Donc, dans un nom d'utilisateur valide, nom d'utilisateur, vide, vide est incorrect et ne peut contenir que des lettres ou des chiffres. D' accord, c'est parce qu'on a fait une cartographie, mais on ne demande que des e-mails. L' utilisateur d'identité réel doit également avoir une valeur de nom d'utilisateur. Donc, ce que je dois faire ici est de spécifier le nom d'utilisateur points points est égal à l'adresse e-mail, donc l'adresse e-mail est obligatoire champ. Le nom d'utilisateur est un champ et un mot de passe obligatoires. Ce sont tous des champs obligatoires par l'utilisateur d'identité. J' allais donc fournir un email et un mot de passe. Je vais juste aller de l'avant et fournir le nom d'utilisateur. En outre, quel est le même que l'adresse e-mail ? Ok, alors essayons juste encore une fois. Très bien, et quand je fais ça, et je mets les mêmes détails utilisateur à l'exemple et mot de passe un, regardez pendant que nous obtenons, nous obtenons une réponse 200. D' accord. Et c'était juste nous étonner. Tout est bon à y aller. Il n'a donc pas échoué. n'y a pas d'erreur de validation ou quoi que ce soit du genre. Je remarque qu'il dit sur documenté pour l'outil à glucose, nous n'avons pas laissé le contrôleur ni laissé swagger savoir que l'outil à est un type de retour potentiel. Rappelez-vous donc que nous l'avons fait avec les autres contrôleurs où nous avons répertorié tous les types de retour potentiels. Donc, vous pouvez aller de l'avant et répliquer que dans le contrôleur domestique britannique, ce que l'étranger toujours Singapour, une distribution sur le processus. Tu sais, tu pourrais être déçue. Ils ne vont pas tester le login pour l'instant, mais ce n'est vraiment pas un login. C' est plus que ça va être plus comme un d souvent, une autorisation de voir, ok, vous sur Tolkien et c'est valide, oui, vous pouvez accéder à la ressource que vous voulez. Parce qu'une fois de plus, un login est vraiment de créer une session et permettre à quelqu'un d'y accéder pendant un certain temps. Alors que ce que j'ai pris avec une API, nous ne savons pas à quelle période vous pourriez avoir besoin d'accès. Nous n'avons pas besoin de faciliter pendant une période plus longue que nécessaire pour traiter votre demande et vous donner votre réponse. Donc, nous voulons juste savoir que vous êtes inacceptable, accesseur, validez ça, vous donnez ce que vous voulez et ensuite nous en avons fini avec vous. C' est pourquoi nous allons faire les trousses d'outils. Donc, quand nous y arriverons, nous irons de l'avant et hosho plus couloir restreindre l'accès. 26. IMPORTant : Fête d'inscription d'utilisateur: Hé les gars, un addendum rapide à ce qui a été fait dans l'activité précédente, assis sur un point de terminaison de distribution et tout ce que cela a fonctionné. Cependant, quand j'ai réalisé que mon utilisateur n'avait pas mot de passe et c'est parce que je n'ai pas mis ce tuyau sur. Donc, si vous regardez la fonction utilisateur crée, il a deux surcharges. Un où il crée juste l'utilisateur et un autre où il vous demande de l'utilisateur et le pasteur d'aller avec eux. Donc, je ne suis pas tout à fait sûr pourquoi ils ressentent le besoin de rencontrer deux, parce que pour moi un utilisateur doit avoir un analyseur bots, je suppose que pour différentes situations, il peut avoir besoin de stocker quelque chose ou pas les autres. Donc, la virgule de l'utilisateur et puis de l'utilisateur besoin sarcelle, nous prenons le mot de passe afin que nous puissions nous assurer que lorsque le gestionnaire de l'utilisateur crée cet utilisateur, ce mot de passe va également être haché et stocké sur leur enregistrement. 27. Ajouter des rôles d'utilisateur: Hé les gars, bienvenue. Donc, une partie très importante de l'utilisateur autorise Sean est de savoir quel rôle cet utilisateur est dans un ponton. Non, nous n'avons rien fait associé aux rôles, étions plus préoccupés par l'obtention des informations de l'utilisateur, la validation et si nous créons l'utilisateur ne sont pas. Maintenant, quand il s'agit de rôles, les rôles qui sont autorisés à exister dans le système avant l'utilisation du système. Donc, de la même façon que nous aurions mis en place ces opérations de semis pour les hôtels sur leurs pays, moins d'importance vraiment que les rôles seraient ainsi de suite pour s'assurer que le côté rural là dès le départ afin que lorsque les utilisateurs commencent enregistrement, les règles sont déjà là. Donc ce qu'on veut faire, c'est les voir, mais au lieu de cela, je vais les planter comme on voit ce pays et cet hôtel. Je vais vous montrer un moyen que nous pouvons extraire cette opération des contextes o dB et garder les contextes DB aussi légers que possible, similaire à Hollywood vous a montré de le faire avec nos services que nous installons. Donc, ce que je vais faire est de configurer un nouveau dossier, avoir des configurations sont à m. Il suffit d'aller de l'avant et d'ajouter un autre dossier à l'intérieur de cela et je vais l'appeler c'est des entités. Donc des configurations pour tout ce qui est lié à son entité. Et puis je vais ajouter un cours. Et puis je voulais appeler cette configuration de rôle de classe. Allez-y et ajoutez-le. Et puis cette règle classes de configuration héritant de la configuration de type d'entité I. Et ce sera du type, puis LE rôle. D' accord, allons de l'avant et incluons les références manquantes. Donc, il ne touche pas la configuration rurale ou qu'il doit être associé à ce type de configuration. Et bien sûr, nous devons aller de l'avant et mettre en œuvre tout ce que cela voit doit être implémenté, qui est notre fonction de configuration. Très bien, donc il y a aussi une fois que vous devez aller dans possible ou le constructeur de couture qui est utilisé sur la création de modélisation. Donc, alors nous pouvons réellement répliquer le code que nous avons où nous disons que le point de constructeur a des données. Et puis au lieu de point Builder a des données, nous pouvons aller de l'avant et créer de nouveaux rôles, des objets neuraux. Laissez-moi juste sélectionner tous ces guillemets. Très bien, donc nouvelle règle d'identité. Et nous allons juste initialiser cet objet. Je ne vais pas lui donner un ID, ID de zone startled, le nom qui s'appelle cet utilisateur. Et nous devons donner son nom non normalisé, qui est vraiment une version en majuscule de cela. Sur le nom vraiment. Et puis. Je vais aussi lui donner administrateur administrateur, c'est administrateur construit. Et puis le normalisé est tout CHEOPS, version du ministère, porte, ajouter le ministère. C' est toujours mesurer les droits de spins de débogage sympa mais les orthographes, alors ne me conduisez pas. D'accord. Donc, pas que nous ayons cette méthode de configuration et autant de lignes que vous pensez avoir besoin, vous pouvez aller de l'avant et les configurer. Mais la partie la plus importante de tout cela est quand nous sommes prêts à le mettre dans le système, nous avons seulement besoin de dire constructeur, points, appliquer. Désolé, build dir dot, fly configuration. Et puis je vais juste dire une nouvelle configuration de rôle. Et puis inclure le magasin de réfraction manquant connu Lee créé. Et on y va. Donc vous voyez que ça me ressemble beaucoup, ça a l'air beaucoup plus propre que d'avoir tout ça. Rappelez-vous que la raison pour laquelle nous l'avons déplacé du haut ici au-dessus la liste était qu'il était si énorme une fonction parce qu'un suivre ces lignes. Si vous le souhaitez, vous pouvez mettre en pause, savoir et essayer de créer d'autres fichiers de configuration pour le pays et l'hôtel. D' accord, donc j'espère que tu l'as vraiment essayé parce que je l'ai fait. D' accord. Donc je ne vais pas te demander de faire quoi que ce soit. Je ne vais pas le faire. Donc juste au cas où vous auriez besoin de conseils. Nous sommes allés de l'avant et avons créé des fichiers de configuration par type. D' accord, donc nous avons Holton, je suis du pays et partout où tout ce que nous avons créé, roulé ensemble. J' ai fait pays, même nommage pourrait essentiellement copier et coller du code et suppose parties essentielles contra configuration que je configuration de type d' entité par rapport au pays, le contexte. Et puis le même code qui était là pour créer les pays que je viens de couper et de coller. D' accord, la seule chose est que dans la précédente, nous avions un point de constructeur dans t, quelque chose comme ça et j'ai enlevé cette partie de l'entité. Donc, il dit que construire leurs points a des données pour que vous puissiez aller de l'avant et répliquer cela à la fois dans le pays et l'hôtel. Et si vous faites votre propre truc à travers un autre et non, vous êtes sur la construction de modèles. Ça a l'air plus propre. D' accord. Et je pense que je vais juste mettre celui-là. Je n'ai pas vraiment eu beaucoup comme en ce qui concerne les bateaux de commande hors de nous le met au fond. Et puisque c'est l'ordre dans lequel tout a été créé de toute façon, alors pays, puis hôtel, alors nous avons les règles. Encore une fois, ces deux-là sont vraiment facultatifs en termes de ce qui est vraiment nécessaire pour mettre en place une application, n'est-ce pas ? Donc, maintenant que nous avons la configuration de rôle sont semer, nous pouvons simplement ajouter la migration et dire des règles par défaut ajoutées. Et, et le fichier de migration résultant a deux entrées dans notre fichier de règles. Donc, vous voyez généré son propre ID. C' est pour ça que je ne voulais pas modifier ça. Mais ensuite, nous obtenons l'utilisateur et nous obtenons l'administrateur. Donc, lorsque nous mettons à jour la base de données, il va de l'avant et faire l'insertion. Donc, une fois que cela sera fait, nous avons deux autres changements à apporter. Donc, on est dans le détail de l'utilisateur. J' ai introduit cette collection de chaîne de type et j'appelle ses rôles, non ? Nous donnons donc à l'utilisateur la possibilité de dire quel ou quels rôles cette personne devrait avoir, n'est-ce pas ? Et puis dans le contrôleur cône, juste après que nous avons vérifié si la tentative d'enregistrement a été réussie ou non, sont l'opération de création d'utilisateur a réussi ou non. Rappelez-vous si cela dépasse ce est la déclaration, cela signifie qu'il a réussi. Ensuite, nous avons fait l'étape supplémentaire de dire point, point, ajouter des rôles asynchrones. Et nous ajoutons à l'utilisateur qui vient d'être créé, le rôle qui est arrivé, nos rôles qui sont entrés dans. Donc, si vous regardez cela, il a quelques remplacements. Une annonce sur lui permet de chevaucher ou ne pas surcharger, désolé. Donc, le seul maître vous permet de simplement passer une liste de rôles. Et c'est tout. Nous allons juste jouer et ajouter à cet utilisateur. Donc, une fois que tous existent, alors il sera associé à l'utilisateur dans le backend. Une fois de plus, fonction intégrée, pas beaucoup de code ou d'effort nécessaire sur nos parties. Prenons ça pour notre vitesse. Donc, dans Swagger, vous voyez qu'ils modifient les valeurs potentielles, non ? Pour qu'ils le montrent. Je peux passer dans un tableau appelé règles. Donc l'ironie est les crochets, alors qu'un objet est l'accolade, non ? Alors essayons-le. Et je vais laisser ce même utilisateur ne semble pas l'utiliser. On a du succès avec la dernière fois. Très bien, donc cela signifie que je devrais recevoir un message de validation pour voir qu'il ne devrait pas fonctionner ce que je vais transmettre dans le rôle d'utilisateur et quand exécuter. Et voilà ce que je reçois. Donc, le résultat est que j'ai une mauvaise demande 400. courriels en double sont le problème. C' est déjà pris pour que la validation fonctionne. Alors voyons. Utilisateur dans les hôtels. Hotel listing.com fait quelque chose de différent. Et c'est l'utilisateur. Alors je vais aller de l'avant et exécuter. Et ce que je reçois n'est pas une mauvaise réponse. D' accord, ça a l'air bien. Voyons donc ce qui s'est passé dans la base de données après ces opérations. Donc je vais tuer l'exécution, aller dans le Gestionnaire de serveur. Et tout d'abord, je veux regarder dans la session de table des utilisateurs d' au moins deux utilisations basées sur mes tests jusqu'à présent. Et on y va. Nous avons USA, liste totale et utilisateur par exemple. D' accord, donc c'est bien. Le prochain serait les rôles. Donc j'ai juste échafaudé les règles moi-même. Je vois juste que la règle est en vigueur. Ce sont donc les règles que nous avons créées. Cependant, l'association de rôle d'utilisateur est stockée ici car il s'agit d'un plusieurs-à-plusieurs. Ils voient donc que de nombreux utilisateurs peuvent avoir de nombreux rôles, non ? C' est pourquoi nous chargeons un aria, car peut-être un utilisateur pourrait être administrateur et utilisateur, peut-être un superviseur, etc. , basé sur un système. C' est tous les contextes, non ? Cependant, dans ce tableau, lorsque nous affichons des données, alors nous devrions voir l'ID utilisateur associé à l'ID de rôle. D' accord, donc si nous devions juste revenir en arrière et vérifier, vous voyez que c'est le nom d'utilisateur. On y va. Et les huit, f, sept. Donc, si je regarde ce même ID utilisateur et l'être si sept et le rôle 755. Donc, vous devez aller à celui-ci pour voir lequel est 755, qui est utilisateur. C' est donc tout ce que nous commençons à intégrer l' autorisation basée sur des règles dans nos systèmes et tous nos utilisateurs. Quand ils seront inscrits, nous serons inscrits avec leurs rôles appropriés. 28. Explorez des jetons Web JSON (JWT): Hé les gars, bienvenue. Donc Randall, Nous voulons commencer à discuter de nos jetons web JSON, mais avant d'aller de l'avant et de les mettre en œuvre et sont à des montagnes de beau code. Pour ce faire, je veux vendre une compréhension complète de l'objectif qu'ils servent dans l'ensemble du workflow, la sécurité de l'API et tout. Donc, il y a une autorité principale, au moins dans mon livre, ils sont l'autorité principale sous la forme de l'autorisation 0. Si je ne me trompe pas, il y a probablement des pionniers pour ce genre de protocole. Mais vous pouvez aller à JWT point IO et vous atterrissez sur le CMP est que j'ai ici où ils affichent pour vous certains mettre Tolkien et sorte de vous montrer la panne. Donc, nous allons discuter exactement pourquoi Tolkien sont inutiles et ce qu'ils disent exactement quand, quand ils sont décodés. Alors voyons. Une fois de plus, la personne tente de se connecter à notre API, ou elle tente d'accéder à notre ressource à partir de notre API. Nous avons un accès restreint. Nous leur disons donc que nous devons savoir qui vous êtes et ce que vous êtes capable de faire. Mais alors je dois m'assurer que vous êtes quelqu'un qui devrait pouvoir accéder à mon système pour commencer, n'est-ce pas ? Donc, notre Tolkien ici à peu près serait délivré à eux après une tentative de connexion réussie. Ils transmettraient donc leur nom d'utilisateur et mot de passe que nous avons déjà stockés dans notre système parce qu'ils sont enregistrés. Une fois que nous vérifions qu'ils sont, qui ils disent être, nous allons leur donner un jeton avec les informations que nous avons sur eux afin que lorsqu'ils font des requêtes ultérieures, ils puissent utiliser ce jeton au lieu d'essayer de connectez-vous à chaque fois. Donc, ce Tolkien représenterait un silence sont une représentation codée de toutes les informations que nous avons pour eux qui pourraient inclure leur nom d'utilisateur, leur passe, leur mot de passe, apologiste, mcdr, leur nom d'utilisateur, leur adresse e-mail, s'ils sont différents. Nous leur permettons d'utiliser ce jeton pour accéder au système, quel rôle ils ont. Et cet autre appelé revendications, qui signifie que vous êtes capable de faire ce qui commence sur vibrer. Donc, ce sont les choses que nous encodons dans cette énorme chaîne et les renvoyons après qu'ils se sont connectés avec succès. Ou l'avantage de cela est que de leur côté, ils n'ont pas à continuer à appeler la connexion parce que n'oubliez pas que nous ne prenons pas la décision de savoir s'ils ont été connectés précédemment ou non. Donc, au lieu de devoir essayer de se connecter chaque fois qu'ils vont faire un appel API. Les connecteurs obtiennent ce jeton et ensuite le faire plutôt appeler avec ce jeton attaché à leurs requêtes. En outre, quand nous recevons la demande, alors nous voyons qu'il y a un Tolkien, nous le décoder, valide qu'il vient de nous et puis les rediriger en conséquence ou fournir la réponse en conséquence. Donc c'est ce que la sécurité JWT est tout un bateau. Et vous verrez que cette chaîne est en fait rouge codé par couleur. Je pense que ça va dire fournisseur d'amour et a explosé, non ? Et à peu près manger six x1 est l'o expliqué ici. Donc, c'est la section d'en-tête qui contient quel algorithme de hachage a été utilisé, ainsi que le type de Tolkien, qui dans ce cas c'est JWT. La section centrale a la charge utile ou les données. Donc, la charge utile est vraiment de voir toutes ces informations est ce que je sais sur cet utilisateur. Donc, plus on y ajoute d'informations, plus la section sera grande. D' accord, et sur la droite, vous voyez ici, ils vous montrent ce qui est exactement inclus dans cette charge utile. Ainsi, la charge utile peut avoir conduit la date d'expiration de l'heure Tolkien ou Dayton, parce que généralement vous émettez un jeton pour une période de temps finie. Donc, tant que ce jeton est valide, alors ils ne veulent pas difficile de se connecter à nouveau, n'est-ce pas ? Dès qu'il est invalide, ils peuvent vouloir se connecter et obtenir notre nouveau jeton, puis continuer. Donc, c'est ce qui permet le but que l'on sert. Et puis les pirates savent avec la signature. Habituellement, le serveur utilise la partie signature pour vérifier si le Tolkien contient une information valide ou non. Donc, si nous émettons le jeton et nous voudrions vérifier qu'il vient de nous parce que n'importe qui peut vraiment encoder ce genre de données. Ce qu'ils voulaient s'assurer qu'ils ont, n'entendez pas codé par rapport à notre clé d'émission pour s' assurer qu'il vient vraiment de nous et qu'il est valide dans notre système. Donc, j'espère que cela a éclairci certains des, disons que les zones grises sont ce que JWT ne sait pas en l'utilisant. Quand nous reviendrons, nous commencerons à changer ou à modifier les configurations de notre API pour en faciliter l'utilisation. 29. Implémenter l'authentification JWT: D' accord, les gars, nous reviendrons. Donc, nous allons sauter directement dans la configuration de nos configurations pour notre JWT. Je vais donc créer une nouvelle section dans notre fichier de paramètres. Je vais l'appeler JWT. Et fondamentalement, nous allons juste coder en dur certaines valeurs dont nous savons que nous aurons besoin en cours de route lors de l'émission et de la validation. Bon, donc je vais dire émetteur. Et cela signifie que je suis l'autorité émettrice. Ainsi, vous pouvez mettre votre nom d'application ou votre nom de domaine, quel qu'il soit. Je vais juste dire les majuscules sur le nom ici, OTA listant PA. Donc, cela signifie seulement quand un JWC JRR Tolkien arrive avec ce problème ou vais-je faire attention ? Ce que vous verrez plus à cela plus tard. Et il y a d'autres choses que vous pouvez mettre ici. Vous pouvez mettre comme le temps d'expiration des presets. En fait, vous pouvez mettre une clé ici car il y a une valeur clé qui va être utilisée pour régler le Tolkien. Cependant, en général, vous ne voulez pas mettre cette clé dans le fichier de paramètres de l'application pour des raisons de sécurité, n'est-ce pas ? Donc, si vous le mettez là, alors quelqu'un peut voir le fichier de paramètres de l'application et puis comprendre la clé qui est utilisée. Je suis, je mets dans une vallée GUID ici, mais cela pourrait facilement être votre nom ou autre. Donc c'est quelque chose dont vous avez besoin que vous voulez utiliser pour vérifier notre clé Janvier. Bien, donc alternativement, au lieu de mettre quelque chose de sensible dans le fichier de paramètres de l'application, parce que vous ne voulez pas trop d'informations sensibles dans ce fichier. Ce que vous pourriez faire est de créer une variable d'environnement. Maintenant, bien sûr, s'il crée sa propre machine de développement, alors vous devez vous assurer que vous avez également créé sur le serveur lorsqu'il est déployé. Donc, un moyen rapide d'afficher l'environnement ou configurations ou la variable d'environnement est d'afficher une invite de commande, mesurer le mode administrateur d'urine. Donc, si c'est que cela s'est produit sur une machine au travail où vous ne disposez pas de privilèges d'administration, alors vous devez vous assurer de l'inclure dans vos notes de mise à jour afin que les administrateurs système soient des ingénieurs DevOps, celui qui effectue le déploiement sait quoi faire. Donc, je vais dire définir x. et une fois de plus, c'est une variable d'environnement donc divulgue au niveau des fenêtres. Donc, à moins qu'un pirate était, quelqu'un malveillant a été en mesure d'accéder au réel et se connecter à la machine qui ne verra probablement jamais cette valeur sont l'art de ski. Donc je vais appeler cette clé, lui donner la valeur. Donc, encore une fois, ce n'est tout simplement pas bon. C' est ce que j'ai généré. C' est assez compliqué. Ça ne doit pas nécessairement être si compliqué. Mais encore une fois, c'est un contexte, c'est tout, d'accord ? Donc, quelle que soit la valeur que vous y mettez, assurez-vous de l'envelopper entre guillemets. Laisse-moi faire ça. Donc, clé ouverte entre guillemets la valeur proche barre oblique m et m, disant fondamentalement qu'il doit être une variable système et non une variable locale. C' est pour ça que tu en as besoin. Assurez-vous que votre administrateur, sorte que vous voyez qu'il a été enregistré. D' accord, âme et tout ça. Nous avons cette mise en place. Nous pouvons aller de l'avant et créer notre extension de service parce que nous devons étendre notre startup. Donc, une fois de plus, au lieu de le faire ici, nous allons juste passer aux extensions de service et créer une nouvelle méthode. Celle-là, nous allons avoir un vide statique public. Donc, je vais juste copier ceci sur deux, malgré ce bart et dire que dW t configuré . Et puis nous prenons les mêmes paramètres des services. Mais ensuite, nous prenons aussi la configuration I. C' est la configuration qui nous donne accès aux configurations de paramètres d'application encore pour Fred, pour un petit contexte de cela. Quand on, laisse-moi voir. Donc vous voyez ici nous avons dit la configuration, obtenir la chaîne de connexion, salut la configuration, non ? C' est ce qu'on fait référence ici. Je me suis dit montré. Alors allez-y et dans fluide tout ce qui manque. Et puis à l'intérieur de ce fichier, c'est là que des morceaux de magie vont se produire. Donc, nous allons dire que var paramètres JWT est égal à. Et puis je vais appeler sur la section get point de configuration. Et la section que nous allons obtenir est les séances de JWT. D' accord, c'est ce qui m'a permis de vérifier ça. Oh, c'est des apologistes JWT. Je l'appelle JWT. D' accord. Cela donne une flèche et je pense que c'est parce que j'ai inclus avec les bibliothèques afin que mature, c'est Again I configuration. Je ne veux pas d'extensions qui configurent et pas la personne ultime. Laisse-moi essayer encore une fois. Et on y va. Pas de flèches, tous droits. Donc, la clé secrète, non, je dirai var Ki est égal à et puis je peux appeler un point d'environnement, obtenir une variable d'environnement. Et rappelez-vous que nous définissons le nom de cette variable d'environnement, sachez juste qu'ils apportent bouclé mon invite de commande. Je l'ai mis sur C0. Donc, quoi que vous utiliserez, il y a le nom de votre variable d'environnement. Donc t. Ensuite, nous voulons dire un point de services ajouter l'authentification. Donc, je vais ajouter une option d'authentification avec des options. Désolé, laisse-moi juste comprendre ça. Donc ils disent OPT ou vous dites tout sauf le lambda. Et puis je vais juste ouvrir et fermer l'accolade parce que nous avons beaucoup de configurations que nous allions ici. C' est chaque fois que vous avez plusieurs lignes, les agendas ouvrent l'accolade bouclée, puis chaque ligne se termine par un point-virgule, quelqu'un pour dire tous les points par défaut schéma x0 égal à. Et puis ils ont les défauts de la bière JWT, âme, ce qui n'est pas là. Et je pense que j'ai besoin de quelques bibliothèques ou de chansons de. De New obtient. Laisse-moi vérifier les barils, c'est là. Besoin d'inclure le Microsoft est à l'authentification de base, le Bureau JWT. Alors, nous allons de l'avant et obtenons ça. Sachez qu'il est inclus JWT Birra système d'authentification par point par défaut. Donc, cela signifie essentiellement que j'ajoute l'authentification à l'application. Et le schéma par défaut que je veux est le JWT. Ok, donc hors du mais quelqu'un essaie de s'authentifier, vérifier un jeton de porteur. C' est essentiellement ce que ça dit. Et puis le schéma de défi par défaut est la même chose. Bon, alors vérifiez pour cela pour l'authentification et le défi. Quoi qu'il en soit, quelle que soit l'information qui se trouve, défiez-le en fonction de la norme JWT. Et l'extension consciente est que je vais juste enlever le point-virgule pour un peu. Donc, je voulais voir dans la ligne suivante point ajouter porteur JWT. Et puis celui-ci va encore avoir des options. Donc je vais faire mon lambda Tolkien, puis ouvrir et fermer accolade. Et l'image est corrigée l'indentation, non ? Donc, nous disons tous les paramètres de validation de point Tolkien. Il y a donc pas mal de paramètres que vous pouvez configurer en cours de route. Chaque personne peut être différente. Encore une fois, l'institution pourrait être différente. Ce que je fais, c'est ces programmes éducatifs, mais dans votre entreprise, vous pourriez avoir d'autres besoins que ce que je vais décrire ici. Donc, si c'est votre situation, alors vous agissez en conséquence, n'est-ce pas ? Donc, un nouveau Tolkien paramètres de validation. Et puis nous allons savoir tous décrire certains des paramètres que nous allons utiliser pour valider que ce Tolkien, vous savez, devrait accorder l'accès à quelqu'un. Alors ici, nous pouvons voir, Voulons-nous valider qui a émis le Tolkien ? C' est généralement une bonne idée. Considérant que nous avons traversé tout le mal de dire ici est l'émetteur. Donc, cela signifie que si quelqu'un met une autre valeur là, alors nous disons, eh bien, si je connais les valeurs là-bas, alors ça devrait être invalide. Boolean voulait valider la durée de vie, n'est-ce pas ? Donc, de cette façon, nous allons rejeter le Tolkien si c'est si elle est expirée, sera automatiquement rejeté. Alors, tu veux faire ça ? Oui. Et puis un autre que nous voulons probablement faire est de valider le problème isu ou la clé de signature. Et nous avons déjà établi que c'était la valeur clé en haut, non ? Donc, pour vous assurer que c'est toujours la clé de signature correcte. Et puis nous continuons. Et puis je suis allé voir un émetteur valide. Ou l'émetteur valide pour un Tolkien donné serait les paramètres JW, les paramètres JWT, qui est une section de condamnation. Prends la section, tout ça. Et puis ce serait l'émetteur, non ? Donc, leur valeur est définie pour l'émetteur. Je veux cette valeur de point, leur but. Et puis voyons que la clé de signature de l'émetteur est égale à une nouvelle symétrique. Donc non, nous allons être en train de hacher. Et donc, et c'est pourquoi j'ai dit que ça peut être une vallée compliquée, ça ne doit pas nécessairement l'être parce que quand ça va le mettre en place, ça va le faire, on va le hacher de toute façon. Donc vous dites nouvelle symétrie, clé de sécurité symétrique. Et puis nous encodons. Donc, vous voyez, même avec mon très, très compliqué qui était basé sur un vide, nous encodons ceci et ensuite nous allons le hacher à nouveau après. Très bien, donc comme je l'ai dit que cela ne doit pas nécessairement être si compliqué à la fois encoder W2 si obtenir par son ou le décomposer en octets. Et puis nous transmettons la valeur clé que nous avons obtenue de l'environnement. Donc, les parties les plus importantes de ce qu'est la clé, ne la mettez pas dans les paramètres de l'application, n'est-ce pas ? Il est jeté dessus, il aurait pu y aller. Mais, vous savez, d'être beaucoup d'abondance de prudence. Vous le mettez dans les variables d'environnement. Je Alf le met dans les paramètres de l'application avant, mais alors cela était loin application très interne et pas nécessaire pour faire face au public ou et donc nous allons juste aller de l'avant et inclure toutes les références manquantes là. Et puis je pense que c'est juste à peu près pour les paramètres de validation une fois de plus, fonction de votre situation, vous pourriez avoir besoin de plus de validations que je ne le mets ici, n'est-ce pas ? Donc c'est tout ce que je vais utiliser, point-virgule, point-virgule, et ensuite c'est tout pour nos extensions. Donc non, nous pouvons aller au démarrage et nous pouvons faire appel à nos services JWT configurés point JWT configurés. Et nous avons cet objet de configuration transmis en bas de la ligne, non ? Et puis nous arrêtons un peu la facture juste pour nous assurer que tout est plus doux, construire avec succès, nous pouvons poursuivre nos tâches. Donc la prochaine chose que je voulais faire est de créer des fonctionnalités pour la validation et l'émission du Tolkien, non ? Donc je vais monter, je veux dire, juste effondrer tout dans le projet sont à. Et puis dans notre puits, je dépôt et dépôts. Donc, ce que je vais faire est de créer un autre dossier appelé services. Je voulais juste m'assurer que tout va bien, sépare ses montres inconscientes. Donc les services seraient pour les extensions, n'est-ce pas ? Je suis allé ajouter une nouvelle classe. En fait, je suis désolé. J' aurais dû nommer ce manager. Donc, j'ajoute une nouvelle classe appelée hors gestionnaire. Vous finissez par faire exactement ce que j'Adidas a renommé le fichier et il sera automatiquement, automatiquement renommé cela. Mais alors désolé, ce n'est pas une classe, c'est une interface. On y va. Donc, dans cette interface, je voulais avoir une tâche qui va retourner booléen. Et je voulais l'appeler validez l'utilisateur. Et puis cela va prendre l'utilisateur de connexion dto divulgation. C' est l'utilisateur Nietzsche. Oh, eh bien, des fins d'uniformité. Et nous allons aller de l'avant et inclure les références manquantes comme d'habitude. Et puis je vais avoir quelque chose d'autre qui va créer et retourner le Tolkien, rappel de quelqu'un qu'il crée Tolkien. D' accord, donc j'ai besoin d'un cours pour consommer cette lecture. Quelqu' un va aller de l'avant et je ne veux pas l'appeler au poste de directeur. Celui-ci est en fait une classe qui va hériter de son homonyme d'interface, qui va alors voir ces implements, les méthodes que vous m'avez dit que je devrais avoir. Avant de passer à autre chose, nous devons nous assurer que nous enregistrons notre service dans notre trappeur de bottes ici dans le fichier style.css. Donc, nous allons juste dire un service que les chances ont attrapé et avoir un oeil off manager cartographié sur Off Manager. Et nous ajoutons une fois de plus à la sculpture. Donc c'est très important. Donc nous allons créer ce Tolkien. Donc, à l'intérieur de Off Manager, je vais mettre ces deux-là. Je vais injecter des trucs d'outils. J' ai donc besoin de mon, Tout d'abord, j'ai besoin du gestionnaire d'utilisateurs, que je peux facilement obtenir à partir de cônes, mon adresse. J' ai besoin de cette instance exacte de gestionnaire d'utilisateurs, n'est-ce pas ? Et allez-y et incluez la référence manquante. Et je vais également devoir injecter une instance du Gestionnaire de configuration. Alors allez-y et faites ses présentations pour ceux-ci, puis finissez l'injection. Et une fois que c'est fait, on pourra continuer. Commençons donc par valider l'utilisateur. C' est un fruit suspendu plus bas. Alors traitons juste de ça d'abord, non ? Donc, quand nous voulons valider, l'utilisateur dirait fondamentalement, nous voulions continuer à dire que ce USA existe dans le système et est-ce que l'analyseur est acquis ? Il y en a. Donc, je peux dire l'utilisateur var Z égal à attend, gestionnaire d'utilisateur point trouver par nom un lavabo. Et puis rappelez-vous que pour cette amende par nom signifie fondamentalement fan par les États-Unis en Inde, il est, il demande le nom d'utilisateur. J' utilisais l'adresse e-mail comme nom d'utilisateur. Donc, nous ne demandons que l'adresse e-mail dans dto, mais à l'échelle du système est où l'histoire qui a aussi un nom d'utilisateur, n'est-ce pas ? Donc je peux aller de l'avant et faire ça. Et ça veut dire, oh, alors o, ça veut dire que j'ai besoin de mon asynch, non. Donc, à chaque fois que vous agacez, vous lisez une déclaration parfaite oh, attendez et vous êtes toujours en ligne rouge. Il suffit de vérifier deux fois. Si vous avez l'asynchrone, il a tendance à snip. Avec la pratique, il devient permanent. Donc, après que nous vérifions si nous avons téléphone cet utilisateur, donc cela est prêt à revenir aux utilisateurs objet sur le stockage ici. Ensuite, je vais voir, et je vais juste, au lieu d'écrire une déclaration if, je vais juste écrire comme un opérateur ternaire pour dire utilisateur pas égal à null. Et donc il suffit de vérifier. Ce n'est pas le schéma Turner et ce n'est qu'un énoncé logique. Donc, retournez si l'utilisateur n'est pas égal à null. Gestionnaire d'utilisateurs, point vérification du mot de passe async. Je dis toujours le mot de passe de point utilisateur. Désolé, pas utilisateur, détail de l'utilisateur. Parce que nous ne connaissons pas le hachage du mot de passe. Donc, l'utilisateur dto dot mots de passe, donc c'est automatique. devez entrer pour voir si ce mot de passe est valide pour l'utilisateur en cours de vérification. Donc, si nous retournons quelqu'un avec un nom d'utilisateur et que le mot de passe est valide, cela va retourner vrai ou faux basé sur l'ancien peigne, tout cela. Et ce qui nous manque ici, c'est tout ce dont nous avons besoin pour utiliser nos objets. Donc, j'ai besoin de como utilisateur, l'utilisateur a besoin de rendement buzzer, allez. Donc, il va vérifier le mot de passe, voir s'il est valide et désordonné. Vous auriez quelque chose si ce nom d'utilisateur existait et alors nous saurions que c'est un élément utilisateur valide. Expliquons ce qui se passe dans l'opération de création de Tolkien. Donc, ici, nous voulons créer un objet pour l'attribution des informations d'identification. Et je vais chercher ce qu'on appellera des réclamations. Et je pense que j'ai besoin d'inclure ses amis. Très bien, ainsi de suite, créez une partie Tolkien ou nous voulons faire quelques choses sur pour créer des identifiants de signature sur pour obtenir des revendications, et ensuite nous voulons les ajouter à l'option de jeton. Donc je vais juste les écrire ligne par ligne. Obtenir la signature, obtenir les identifiants de ponçage, obtenir des Canadiens, et ensuite créer des options de Tolkien, d'accord, où je vais être, nous devons créer ces méthodes si adorables qu'il y a des terres, n'est-ce pas ? Non. Mais à la fin de l'opération, je vais dire retour nouvelle sécurité JWT. Et plus que cela a besoin de quelque chose, alors le gestionnaire de jeton de sécurité OUT, c'est à, donc nous devons inclure ce modèle d'identité, point JWT de Tolkien, ceci, et c'est une méthode ou une classe ou non. Droit ? Tolkien, qui est aussi une méthode, mais il prend les options de jeton. Donc, tout ce que nous obtenons ici est basé sur ce que nous recevons ici et BSL obtiendrait, mais là. Bon, alors commençons par celle-là. Donc, je vais juste passer le curseur dessus et générer la méthode pour cela. Et il peut être privé, donc vous n'en avez pas besoin pour avoir des opérations publiques. Nous recevons donc les identifiants de ponçage. Donc la première chose que je dois faire est de récupérer la clé. D' accord ? Et nous allons faire une opération similaire à ce que nous avons fait dans les extensions de service pour obtenir la clé. Donc, il est juste allé sur et copié et collé ces deux lignes. La clé get, elle provient de la variable d'environnement et ensuite nous avons codé pour obtenir des secrets. Et puis la prochaine chose que nous allons faire est juste de retourner nouvelles identifiants de signature sains d'esprit. Et ça va avoir les secrets. Donc secret ici serait la version encodée ou sa virgule secrète. Et puis nous lui avons fait savoir que l'algorithme de sécurité utilisé pour cela était la dent de scie H M 5-6. D' accord, on y va. Donc c'est de s'occuper des références descendantes, non ? Non, faisons les réclamations pour obtenir. Donc, je vais juste passer le curseur sur celui-ci, faire la même chose génère le stub de méthode pour cela. D' accord ? Et puis, je viens de remarquer que c'est de type objet, donc je vais rendre très explicite qu'il signe des informations d'identification. C' est le type de retour de ça, non ? Je suis sûr que l'objet aurait fonctionné ce que je voudrais juste m' assurer que tout est fortement tapé. Alors celui-là, laisse-moi aller de l'avant et en faire un évier. Et il doit être une tâche qui va retourner une liste de revendications. D' accord, donc la raison pour laquelle nous devons passer par tout cela est notre revendication plutôt que nos revendications. Il y a un que nous devons passer par tout cela. Le défendeur types que nous avons dit var pour explicite haut ici, alors il aurait déduit ce type de retour les ports, bateaux. Parce que nous avons dit var, il ne sait pas, donc c'est juste être très vague. D' accord, alors allons-y et obtenons les réclamations. Donc je vais déclarer une nouvelle liste. Les revendications Var sont égales à une nouvelle liste de revendications de type. Et nous allons ajouter un nouveau nom. Et puis, ce qui prétend, c'est que ce sont des morceaux d'information qui disent vraiment qui sont ce que vous pouvez faire, n'est-ce pas ? Donc, je prétends être ceci sont prétendus être en mesure de le faire. Ce sont donc les éléments que nous voulons nous assurer qu'ils sont inclus dans notre application ou dans notre boîte à outils. Donc, le premier thème que je voulais ajouter est les types de réclamation point. Je suis allé regarder, il y a un tas de 0 et je suis donc ce sont tous des types de réclamations qui sont là. Voir le rôle est-il là, vous pouvez ajouter plusieurs règles, email, toutes ces choses merveilleuses, non ? Quelqu' un pour voir Nim. Nim signifie généralement nom d'utilisateur, e-mail, auto-explicatif, etc. Donc, si je disais que je voulais soit nettoyer le nom de type, le nom de l'utilisateur qui a été juste validé qui quelqu'un est dehors pour changer quelque chose ici. Donc, je garde les locaux de l'utilisateur de validité, ce qui signifie que je devrais essayer de le transmettre. Donc, ce que je vais faire ici, créer une autre variable ici de type utilisateur APA, et je vais l'appeler utilisateur. Et puis au lieu de localiser l'utilisateur dans invalidate, je vais juste le faire ainsi de suite. Où, dans le contexte de cette classe, nous aurons accès aux données de l'utilisateur. C' est son idée, non ? Alors continuons. Donc le nom est Lynn pour venir de point utilisateur et nous allons juste utiliser, eh bien, nous pouvons utiliser le nom d'utilisateur, non ? Comme pour le manque. Donc, dans une situation où vous n'utiliseriez pas l'e-mail comme nom d'utilisateur, alors vous avez le nom d'utilisateur à utiliser comme un nom propre et minimal. Tu voudrais avoir ça, n'est-ce pas ? Ensuite, nous pouvons dire les lignes var. Et ensuite, nous pouvons nos poids. Et utilisez le gestionnaire d'utilisateurs pour obtenir les rôles pour les utilisateurs. Donc il y a des rouleaux d'un évier. On y va. Je passerais simplement aux États-Unis car il va automatiquement aller chercher toutes les règles pour cet utilisateur et les retourner sous la forme de liste. Là, on va faire la liste. Et puis pour chacun de ceux qui veulent ajouter, alors, donc pour chaque règle dans les rôles, nous voulons ajouter cette revendication. Donc, je peux voir les réclamations point. Et puis je dirai une nouvelle revendication de la même façon que nous l'avons fait ici. Et il suffit de dire les revendications qui ajoutent un nouveau nettoyage, mais ensuite le type de clic serait un rôle. Et puis la règle de retour en ordre ou à ajouter serait régie de notre boucle. Très bien, et après tout cela, et nous l' avons construit et encore une fois, en fonction des revendications que vous souhaitez faire, vous pouvez voir toutes les réclamations potentielles ici. Tu peux en mettre autant que tu veux, non ? Une fois qu'ils sont faits, vous pouvez simplement retourner les réclamations. Donc c'est Troodon et un autre à y aller, non ? Donc, je vais juste générer cette méthode, toujours savoir qui va combiner les informations d'identification de ponçage et les revendications et créer le Tolkien réel à émettre à l'utilisateur. Très bien, donc ici le type de retour serait de type sécurité JWT. Tolkien écrit, JWT sécurité Tolkien, cependant, de sorte que nous sommes très explicites quant à ce qu'il devrait être. Maintenant, au lieu de cette méthode. On va voir ce var. Donc je dois prendre les séances. paramètres JWT Var sont égaux à, et je ne veux vraiment pas retaper cela. Laisse-moi voir si je peux juste obtenir le rapide ici. Sans doute, j'aurais pu retenir la peine, mais c'est bon. paramètres Var est que, bien que nous disons les options var sont Tolkien options est égal à la nouvelle sécurité JWT Tolkien. Et puis nous devons utiliser ce constructeur. Donc, il est apparu sur lui à un bien sûr. Donc, nous allons remplir certains paramètres. Donc, je suis allé à spécifier que l'émetteur que je veux vient de la section Paramètres JWT pour le valide vous faciliter votre juste comme ce que nous avions ici, c'est le problème que nous voulons. Nous avons donc mis cela comme un problème. Y at-il le prochain serait les revendications. Et puis les réclamations viendraient de notre liste. Réclamations, retraits, prêt patron dans les paramètres ici, non ? Et puis nous voulons définir l'expiration sur. Dites expiration est toujours bon de s'asseoir. Donc, il est en fait vous demande une valeur expires. Maintenant, vous pouvez définir 15, inclure 10 mg, et ça pourrait le faire. Ou vous pouvez simplement modifier le fichier de paramètres et définir la valeur là, droite, donc puisque c'est là que vont toutes mes valeurs codées en dur, je vais juste le garder uniforme. Et donc je vais juste dire obtenir cette valeur à partir du fichier de paramètres. C' est dans la section « Lifetime ». Donc, cela signifie que cette valeur, cette Tolkien une fois, une fois créée, ne sera valide que pour 15 minutes. C' est vrai. Et puis les identifiants de ponçage, que nous avons définis déjà ou effectivement transmis, seraient ici. Maintenant, une fois que tout cela est fait, nous allons de l'avant et nous revenons. Nos options sont, laissez-moi le nommer plus, plus approprié. C' est le jeton parce que c'est la création du Tolkien ou retourné dans Tolkien. Et puis c'est Tolkien, non ? Ensuite, nous le sérialisons dans une chaîne et retournons cette chaîne null. Nous avons fait un peu de travail ici. Et la seule chose que nous devons probablement faire après est de nous assurer que nous et moi sommes désolés, je vois juste une erreur ici avec la configuration. C' était la sienne. Et assurez-vous juste que j'ai le bon blob construit. Donc, je dirai et que nous avons fait un peu ici pour faire fonctionner nos choses de Tolkien. Donc ce qu'on veut faire, c'est, je suis désolé, donc c'est bon. Donc, à cause de sa propre configuration, je ne voyais pas cette flèche expire devrait être. Je l'ai fait. Et je n'ai mis que 15 minutes. Alors laissez-moi, laissez-moi refaire que quelqu'un pour sauver l'expérience var SHA-1 est égal à, je ne regarde pas devrait vraiment se produire est nous disons points datetime null. Quand un Tolkien a été demandé, ajoutons quelques minutes. Alors quoi que ce soit, quel que soit le seuil que vous voulez. Donc, si c'est de minutes du tout, était-tu juste dire ajouter que les appropriés, c'est quelques minutes bizarres. Et puis nous mettrions la valeur. Et la valeur ici est la chaîne. Donc, cela signifie que je dois faire quelque chose comme un outil int convertit points. Et comme je l'ai dit en 32, ou est-ce que cela nécessite le double ? Je pense que cela nécessite un double. Alors laissez-moi faire, je vais me convertir à la place de la ligne de frein et fermer ça. Donc, je convertissais quelques minutes à Bobo. Je suis désolé. Oui. On y va. Donc nous faisons qui convertit un double expiration est obtenir la valeur de l'exploration, non ? Donc, à ce stade, nous savons quand le Tolkien ne serait plus valide et il me manque un point-virgule ici et laissez-moi faire une construction. Et nous n'avons pas de flèches. Alors je chanterai quand nous reviendrons, nous explorerons l'authentification entière. En fait, notre autorisation effectivement gagné empêche l'accès à nos ressources, puis à la façon dont nous avons réellement configuré le point de terminaison pour authentifier l'utilisateur et facile à parler et en conséquence. 30. Protection des points Protecting: Très bien les gars, bienvenue. Donc, sortir des étapes de la mise en place de notre gestionnaire d'authentification pour émettre génère un problème. Les jetons, ce que nous voulons faire est en fait finir nos points de terminaison de connexion à la to et où nous validons réellement le Tolkien et autorisons ou refusons l'accès à quiconque passe ce jeton, non ? Donc, la première chose que nous voulions faire est d'injecter notre nouveau service Off Manager afin que nous sachions comment faire les zones d'injection. Ils peuvent simplement aller de l'avant et appuyer sur pause et aller de l'avant et compléter cet opérateur d'injection. Donc, une fois que vous avez ajouté les trois nouvelles lignes, une pour la propriété privée, une dans le constructeur et l'initialisation. Ensuite, nous pouvons aller sur la création ou la connexion point de terminaison. Donc, vous auriez déjà commenté le point de terminaison de connexion. Vous pouvez le décommenter et j'en aurai déjà la version révisée à l'écran. Alors passons à travers ça ensemble. Donc, ce que nous voulons faire est de nous connecter pour valider notre demande ou les données à venir en détail. Ensuite, je vais dire si le gestionnaire off valide l'utilisateur, sinon thread, donc il pourrait facilement lire, il dit égal à faux incase, vous devez C sharp. Sinon, vous mettez juste le capteur d'exclamation. Cela signifie que si ce n'est pas un utilisateur valide que retourner sur Auteur car, eh bien, si vous essayez de vous connecter et que vous n'êtes pas un utilisateur valide, alors vous n'êtes pas autorisé à aller plus loin, n'est-ce pas ? Sinon, nous allons retourner accepté sont ok. Quoi qu'il en soit, je vois accepté, accepté, nouveau et un nouvel objet avec, avec une expression appelée Tolkien. Et il faudra la valeur du jeton qui est créé. Donc, nous disons un poids sur le score hors points manager créer Tolkien. Alors rappelez-vous que c'est ce que nous aurions mis en place dans notre responsable Auth. Juste null create Tolkien passe, génère tous ces bits et morceaux de données, puis retourne le Tolkien. C' est donc ce que cette charge utile aura, ainsi de suite pour aller de l'avant et tester cette fonctionnalité. Revoyons donc notre point de terminaison de connexion. Je vais juste utiliser le football pour ces parties de son sont le striatal il et mettre dans un utilisateur que non, j'ai créé et est déjà inscrit. Et puis je vais cliquer sur Exécuter. Et voyons ce qui se passe. Ou c'est le cas, et nous recevons une réponse symbolique. Donc vous voyez cette grosse chaîne, tolkien, c'est en vertu des experts et nous allons mettre dans un objet personnalisé. Et la valeur passée est le jeton qui est ici. Donc, si j'ai fait ce jeton et aller sur notre site Web, regardez ce qu'il y a dans les jetons. Coller. Ensuite, nous verrons ici que nous avons l'algorithme, nous avons Traviata example.com. C' est la revendication de l'utilisateur. Eh bien, le rôle. Très bien, et nous avons le délai d'expiration. Et si vous survolez, il vous montrera exactement l'heure à partir de laquelle il est émis et l'émetteur. D' accord. Et puis si nous voulions aller jusqu'à ce que son amie trompe, alors nous pourrions le faire, mais avoir déjà le mécanisme pour le faire en interne, donc nous n'avons pas besoin de le faire ici. Donc maintenant, ce que je veux faire est d'expérimenter avec empêcher quelqu'un d'accéder à nos terminaux. Donc je vais utiliser notre hôtel. Pour contrôler cet exercice. Disons donc que la possibilité d'obtenir la liste des hôtels, tout le monde devrait pouvoir le faire. Nous devrions pouvoir l'appeler sans s'authentifier, qui est ce que nous avons fait jusqu'à null. Cependant, nous voulons ajouter une inondation autorisée ou des annotations à l'appel pour obtenir les détails d'un hôtel. Donc on vient de mettre Autoriser. Et en fait, vous pouvez étendre l', l'annotation ici pour le GET HTTP et ajouter l'autorisation juste là. D' accord, donc tu pourrais le faire de toute façon. Donc si tu as celle-là, tu n'as pas besoin de celui-là. Personnellement, j'aime les séparer. Donc, de l'autorisation HTTP GET et en fait aime ou préfèrent le mettre en haut. Donc, comme je le vois, je sais que c'est un point de terminaison autorisé. Bon, alors ce qu'on veut faire c'est tester notre appel. Donc, ce point de terminaison non autorisé et autorisé. Donc, ce but. Et pour cette activité, je vais utiliser le facteur, quelqu'un a d'abord testé celui que nous n'avons pas autorisé juste pour s'assurer que cela fonctionne toujours. D' accord. Il y a une liste de photos, trois hôtels. Bien. Maintenant, je vais tester celui avec le point de fin qui nécessite une valeur d'id, non ? Donc quand je clique sur Envoyer, ça va dire 401 non autorisé. Il ne dit pas 401 sur Auteur car je ne me suis pas connecté ou quoi que ce soit parce que je veux dire, c'est déjà autorisé et récemment le schéma par défaut à C, j'ai besoin de voir un Tolkien pour autoriser ne sont pas solides. Cela se produit automatiquement. Si nous avons un vieux Tolkien là-dedans, ce que je fais, c'est un jeton qui a été émis il y a plus de 15 minutes. Ensuite, il refusera automatiquement l'accès. Donc, quand un Tolkien est émis, et puis il prend des flèches, ce sont les propriétaires du client appelant application et désolé d'aller chercher une nouvelle boîte à outils, ce qui signifie passe par le processus de connexion à nouveau, obtient un nouveau jeton, puis revenez et essayez d'accéder à ces points de terminaison. D' accord ? Donc, dans Postman, ce que nous voulons faire est d'aller dans l'autorisation et de choisir le jeton porteur dans cette liste déroulante. Ensuite, nous fournissons le jeton que nous avons, qui est le Tolkien frais. Et quand on fait ça, et je reçois toujours un 401 non autorisé, donc il y a une configuration qui manque. Et laissez-moi y aller plus que probable, c'est dans le point de démarrage cs. Et je pense que j'ai laissé un intergiciel, donc je dois ajouter. Utilisez l'authentification ici. D' accord ? Alors assure-toi que tu as ça. Utilisez l'authentification et les questions de commande dans ces situations, l'authentification, puis l'autorisation et tout cela avant qu'ils ne soient en place, pas NVC. Les différentes versions .NET Core peuvent comporter différents middlewares. Donc, tant que vous obtenez ce thème général, vous devriez être bon. Essayons donc à nouveau cette même requête. Et nous avons beaucoup mieux réussi. D' accord, donc nous obtenons le statut 200 OK. et nous voyons le seul hôtel que nous avons demandé. Donc, sachez que nous avons juste protégé notre point de terminaison parce que si je supprime cela et dis dans tous les intérêts et encore une fois, je reçois un 401 non autorisé une fois que j'inclut le Birra Tolkien, je reçois le statut 200. Si je modifie cet esprit, Tolkien, alors c'est non autorisé parce que le Tolkien ne pouvait pas être validé contre l'inflammation a été encodé et mis à l'origine. est ainsi que vous pouvez aller de l'avant et durcir votre API. Et encore une fois, cette méthode JWT est très sécurisée parce que cette charge utile, oui, elle peut être décodée, mais elle voulait ne pas contenir d'informations trop sensibles et informations qu'elle contient devraient être information que si vous le voyez, il est éteint. Aucune conséquence majeure pour l'API et l'infrastructure sous-jacente. Cependant, il me suffit de vérifier qui vous êtes et que je suis celui qui vous a donné accès au système. 31. Référencer et ajouter des modifications à GitHub: Bienvenue les gars, où c'est un autre point de contrôle important. Et chaque fois que nous arrivons à des points de contrôle importants, nous allons de l'avant et vérifions notre code afin que vous puissiez simplement aller de l'avant et écrire votre message d'enregistrement, puis valider tout et synchroniser. Et une fois que cela sera terminé, nous passerons à notre prochaine activité passionnante. 32. Construire le point Construct POST: Bienvenue les gars. Dans cette leçon, nous traiterons de la méthode ou du verbe HTTP post qui nous permet de créer des ressources ou de nouveaux enregistrements dans notre base de données. Bien que nous ayons travaillé avec post précédemment quand nous étions assis notre fonctionnalité de connexion dans notre contrôleur, nous avons fait une sorte d'expérience avec le post et nous avons exploré le fait que nous pouvons réellement transmettre des données sous la forme du corps, sont des objets adjacents qui seraient désérialisés dans n'importe quel objet que nous avons réglé pour elle. Et de cette façon, aucune information sensible n'a besoin de passer par une URL RNA visible de manière. Donc, ce que nous allons faire, c'est mettre en place la fonctionnalité de poste pour notre hôtel. Pour que lorsque nous créons un hôtel, nous pouvons demander à l'utilisateur d'envoyer tous les détails sol Hôtel sous la forme d'un objet JSON et ensuite nous le transmettons à la base de données. J' ai donc déjà préparé les méthodes, le web ou le verbe HTTP post. Et nous allons retourner l'outil Status 400 Status un ainsi que le statut 500. Maintenant, notez que c'est 2l un et pas 200 parce que 2-1 signifie créé. Donc, nous allons indiquer deux, l'application appelante ou le client que oui, tout ce que vous êtes demandé à être créé a été créé. Commençons donc et maintenant la première chose que je voudrais faire avant d'aller de l'avant et créer quoi que ce soit ou d'apporter des données dans ma base de données est de vérifier si les données qui arrivent sont valides. Donc, ce que je voulais faire est de mettre dans une déclaration if ici pour dire sinon, l'état du modèle est valide. Donc on a fait quelque chose comme ça. Je crois que lorsque nous faisons la connexion où nous avons dit, est l'état du modèle valide, signifie que tout ce que j'ai dit est requis. C' est là ? Sinon, nous avons retourné la torsion de beurre. Donc nous allons faire la même chose, répliquer cette étape ici. Mais je vois si ce n'est pas valide, alors vous allez adorer l'air et dire qu'il y avait une tentative de poste invalide dans cette méthode, non ? Et nous retournons la mauvaise demande. Sinon, nous voulons essayer et les opérations. Donc, nous avons notre prise d'essai. Et l'uniformité de notre code est telle que nous pouvons réellement prendre ces vieux. Donc vous commencez à voir que nous répétons la certitude, c'est que toutes ces choses, si nous voulions changer un message ? Ils devraient le changer ici, changé dans ce niveau de la méthode GnG. Et alors que nous nous développons, nous devons avoir plus de points de contact. Donc plus tard, nous verrons tout le week-end, abstraction de toute cette répétition. Mais en ce moment, je veux juste m'assurer que nous comprenons les concepts de chronométré. D' accord, donc nous allons juste aller de l'avant et modifier le message d'erreur et savoir que vous pouvez essayer ou fonctionner. Maintenant qu'est-ce qu'on va essayer ? La première chose que je voudrais faire est de prendre ce dto. Et si on passe juste en revue ce détail, il a le nom, l'adresse, émeutes, et on s'attend à une identité contraire. Et puis nous avons hôtel dto, qui a une carte d'identité et le pays. Donc, une fois de plus, la raison pour laquelle nous n'utilisons pas les détails de l'hôtel est que nous n'avons pas besoin de la valeur d'ID rencontrée avec la tentative de création. C' est pourquoi nous avons seulement les champs pour lesquels nous avons absolument besoin de valeurs décrites dans la version Create de ce dto. Maintenant, une fois que j'ai le détail, ce que je veux faire est de le cartographier. Quelqu' un dit juste var hôtel est égal à mapper la carte de points dans un objet de type hôtel, qui est un objet de données, et la cartographie du contenu de l'hôtel. prochain arrêt, nous allons appeler notre unité hors travail. Donc, je vais voir l'unité de travail de soulignement, points, Hôtels, point. Et puis j'ai en cert tout ce qui insère mon objet de type hôtel. Parce que le temps qu'il arrive ici, quelles que soient les validations que vous devez mettre, vous pouvez mettre en place. Donc ici je suis juste en train de valider une molécule états si vous aviez d'autres choses que vous aviez besoin pour assurer qu'elles sont en place avant qu'il nous fasse feu comme essayer de l'insérer, vous assurez-vous de faire tous ces contrôles et balances et retourner la batterie quête ou quoi que ce soit, Aristote, toujours un client avant de commencer réellement en insert. Et même en faisant l'insert, s'il y a une exception, nous allons toujours retourner quelque chose sauf que ce sera des centaines FIFO puisque la zone est probablement de notre côté. Donc, après avoir appelé l'insert, la prochaine chose que nous devons faire est d'appeler la sauvegarde. Avis. Quand on récupérait juste, on pouvait juste faire une attente qui n'y a pas de sauvegarde. Cependant, à cette occasion, nous modifions la base de données de sorte que nous devons valider le changement que nous effectuons par la suite. C' est pourquoi nous devons appeler la sauvegarde. Maintenant, après tout ça, nous devons rendre quelque chose de gentil. Alors, qu'est-ce que je retourne ? Ness, je vais dire créer, Ted, Non, j'ai assez créé, créé à l'action juste là, en fait non créé à la racine aussi. Donc ils ont tous retourné le 201. C' est juste que quand tu dis créé, c'est juste 201. Il, cependant vous pouvez dire Créé pour acheminer et le faire appeler le point de terminaison, se faire dire à avec l'ID requis, dire en fait retourne, ils ont créé des objets au client, ce qui je pense est utile. Donc, je vais aller avec créé à la racine. Ensuite, je dois spécifier le nom de l'itinéraire. Donc, dans ce cas, j'ai dit que je voulais aller chercher Hotel. Et puis après cela, je dois spécifier quelles valeurs de paramètre ce point de terminaison pourrait avoir besoin. Donc, si je regarde en arrière, je rentre à la maison AU IT a besoin d'un ID plus doux spécifier un nouvel objet. Et il va avoir un champ appelé ID, et il va être égal à hotel dot id. Avis hôtel maintenant total dto, hotel ETO n'a pas de valeur id. Cependant, après cette opération, cet objet sera mis à jour avec son ID. Et puis c'est ce que nous allons passer. Alors prenons celui-là pour un tour. Mais juste avant de faire ça, avant que je ne m'en aille, nous devons laisser cette règle, pas plus qu'elle ait ce nom, n'est-ce pas ? Donc, même si elle a le nom, nous devons lui faire savoir qu'il obtient l'opération qui va de ce nom, pas nécessairement livre de racines par ce nom, droit. Je peux juste ajouter ici et dire que le nom est égal. Donc, c'est comme une petite note de surnom interne à voir. C' est votre nom chaque fois que quelqu'un de vos frères et sœurs, frère et soeur étant un autre axone appelle. Alors essayons que c'est à nouveau. Bon, donc on va tester celui-là chez Facteur. Et j'ai déjà un objet ici, donc j'ai effectivement copié cet objet de notre précédent getText. Nous avons donc déjà établi que la carte d'identité n'est pas requise. Cependant, juste aller à Slugger, juste pour vous montrer ce que swagger va guérir un bateau. Quand on regarde le poste de l'hôtel, ça nous montre que c'est tout ce que ça va être terrible. Donc, même si nous envoyons des informations supplémentaires, elles seront ignorées. Très bien, donc c'est à ça que notre objet doit ressembler pour entrer dans nos messages. Donc, en utilisant le facteur, je vais vraiment le tester avec l'ID et voyons ce qui se passe. Alors je vais cliquer sur « Envoyez-moi ». Cet axone est sur le poteau. Nous avons notre point de terminaison, puis cliquez sur Envoyer. Et nous obtenons cette ère à la fois l'opération système non valide Nauru, beaucoup est fourni des valeurs. Donc, cela signifie que nous devons restructurer le code ou sur un CreateDat r2. Donc, en revenant au code, laissez-moi juste voir ce qui est surcharges sont là. Et nous avons le nom racine de chaîne où la valeur objective, je crois que je manque l'objet réel. On y va. Donc, virgule et les hôtels ou en passant sur l'id et l'objet réel à afficher. Essayons encore une fois. Donc, les mêmes tests qui donnent une erreur, je vais l'essayer à nouveau. Et on y va. Alors regarde la différence entre les deux charges utiles, où récupérer notre objet d'hôtel avec la valeur d'identification de 6 ou x, même le 5 est 5 ici, c'est cinq ici, non ? Donc, juste pour vous montrer que cela n'a rien fait, parce que nous ne leur avons pas permis de soumettre ces données. Donc c'est une autre raison. C' est une bonne idée d'utiliser des détails pour nettoyer ce qui peut entrer dans votre API. Maintenant, en plus d'afficher le nouveau besoin d'un autre avantage, ceux qui utilisent créé à Rutan pointant vers le point final serait que dans les en-têtes nous retournons réellement l'emplacement où ils peuvent aller chercher cet enregistrement. Donc, vous voyez, il avait un certain but si j'avais juste, vous savez, le client, s'ils regardent dans les en-têtes et juste obtenir l'emplacement après que j'ai retourné les données qu'ils peuvent réellement utiliser cela et faire un et récupérer leur enregistrement. Mais bien sûr, je ne suis pas autorisé. Donc vous savez, tout ce shebang déjà qui doit passer par le passé et faire tout ça. Sur le point d'être autorisé, je ne pense pas que ce soit dangereux de permettre à quelqu'un de récupérer un hôtel par carte d'identité, n'est-ce pas ? Donc, nous l'avons autorisé au départ parce que nous étions en train de tester. Cependant, dans la pratique, je ne pense pas que nous avons besoin d'autoriser, se faire dire à. Si nous leur permettons d'obtenir l'auditeur devrait. Cependant, je pense qu'il serait bon d'autoriser qui peut créer. Très bien, donc c'est à vous de décider des règles métier et vos besoins détermineront où vous mettez l'auteur en tant que sécurité à domicile, vous appliquez nos propres points de terminaison et opérations de l'année. Donc, dans cette situation, je vais autoriser la création d'hôtels donc vous devez être autorisé. Et pour moi, c'est bien pire, si vous n'êtes pas dans le rôle d'administrateur, alors vous ne devriez pas être en mesure de le faire. Donc, pour appliquer l'autorisation basée sur des règles, je peux voir les rôles égaux, puis énumérer autant de règles que je veux prendre en charge. Donc, si je dis autoriser Règles, administrateur, cela signifie que si vous autorisez, obtient Tolkien, mais vous êtes un utilisateur, pas un administrateur, alors vous ne pouvez pas effectuer quoi que ce soit que vous n'êtes toujours pas autorisé. Cependant, si vous êtes administrateur, vous pouvez aller de l'avant. Donc, c'est tout une fois de plus, vous pouvez continuer à en faire respecter un. Quel point final exposez-vous à John public par rapport à un auteur, utilisateur authentifié ? Et puis par extension, comment étendez-vous ces fonctionnalités à quel groupe autorisé d'utilisateurs qui peuvent autoriser en fonction des stratégies, des règles. Et il y a beaucoup d'options à votre disposition. S' il appuie sur une virgule, vous verrez que vous avez le schéma d'authentification. On pourrait faire un JWT, un autre mot de passe, et cetera, et cetera. Vous pouvez appliquer une stratégie et la limiter par rôles. Il y a donc beaucoup d'options pour cela. Donc, d'accord, non, je vais vous défier encore une fois ce qu'on vient de faire avec Create Hotel. Je vous encourage à essayer de le faire avec le pays. Assurez-vous que vous le testez et que vous récupérez votre pays avec succès. Et nous comparerons les notes. Et on est de retour. J' espère que tu t'es arrêté et que tu l'as essayé. Sinon, allez-y et faites une pause. Non, mais je vais vous expliquer ce que j'ai fait. Et vraiment et vraiment, vous remarquerez que le code est presque identique. Un où, dans le contrôleur du pays, nous avons les mêmes mesures d'autorisation. Encore une fois, votre contexte peut être différent du mien, mais nous voulons simplement nous assurer que nous sécurisons les points de terminaison en conséquence. Nous faisons un message HTTP aura des types de retour similaires à ce que nous avons fait avec l'hôtel, sauf pour l'action que je vais appeler Créer contour passant dans le dto approprié. Nous validons d'abord l'état du modèle. Et puis nous allons de l'avant et ajoutons juste de la même manière. Et puis nous avons créé à la racine obtenir contraire possible l'objet. Et nous avons fait en sorte d'ajouter ce nom ici. Donc, vous voyez, une fois que vous avez le coup, à moins que vous ayez des circonstances extrêmes, nous devons faire des calculs et des calculs supplémentaires. Et même alors, ce serait juste une question de cartographie sur r. Eh bien, oui, vous n'auriez probablement pas obtenu les valeurs calculées à travers le détail. Vous allez donc le mapper au type d'objet. Et puis vous faites tous vos calculs, puis vous insérez et enregistrez. Donc, il n'y a vraiment pas grand-chose à créer des ressources dans votre API. 33. Construire le point d'extrémité PUT: Bienvenue les gars. Nous poursuivons notre parcours de développement d'API et nous explorerons le verbe PUT. Ce pneu. Maintenant, mettre est similaire au post, sauf qu'il est principalement utilisé pour soit créatif, il n'existe pas, ou mettre à jour s'il n'existe pas. Alors commençons. Et quand nous vous avons testé, cela aura un peu plus de sens pour vous. Donc la première chose que je voudrais faire est de reproduire le genre de restriction quant à qui peut accéder à la mise à moi. Si vous ne pouvez pas créer la niche ne devrait pas être en mesure de mettre à jour, n'est-ce pas ? Encore une fois, des contextes, des règles, mais je vais juste autoriser. Et je vais juste autoriser. Je ne vais même pas le faire statuer sur la base. Droit. Ainsi, l'administrateur peut créer plusieurs fois qu'il est autorisé. Vous pouvez aller de l'avant et créer un vous pouvez aller de l'avant et mettre à jour, désolé, en ce qui concerne la règle d'autosoins. D' accord, donc le suivant serait le port HTTP, et c'est notre nouveau verbe. Et plus ou moins vont avoir les mêmes codes de retour sauf en faisant quelque chose de différent pour celui-ci. Alors laissez-moi juste commenter celui-ci noeuds et quand nous y arriverons, puis nous l'ajusterons. Donc nous avons le travail de notre méthode. Et je vais juste copier. Donc, il peut se déplacer rapidement avec la préparation de ce talon de méthode, n'est-ce pas ? Et celui-ci sera l'hôtel de mise à jour. Maintenant, en termes de détail qui sera utilisé pour les mises à jour hôtel. Eh bien, d'abord, nous avons besoin du paramètre pour l'ID. Vous savez, il y a deux écoles de pensée, ou peut-être trois écoles de pensées à ce sujet. Mais disons deux écoles de pensée. numéro un est que j'ai besoin d'avoir l'ID dans l'URL, tout comme tout ce que nous avions était qu'ils vont bien. Donc je dois, j'ai besoin que vous transmettiez l'ID avec l'URL. Mais alors une école de pensée dirait que le détail doit également avoir la carte d'identité. Cela signifie donc que le client doit transmettre l'ID avec l'URL et positif dans le corps des données à mettre à jour. Maintenant, c'est un point de validation potentiel où vous vérifiez si l'identifiant qui a été envoyé dans l'URL correspond au central d'ID dans lequel la charge utile ou le dto. Et s'il y a une inadéquation, alors vous me renvoyez la demande de beurre. D' accord, donc c'est une méthode pour le faire et je parle juste avant de le faire. L' autre serait que le détail n'a pas besoin d'avoir l'ID car l'identifiant va être dans l'URL. Donc, je m'attends à passer sur l'URL avec l'ID de l'enregistrement que vous souhaitez mettre à jour. Et puis vous me passez juste les informations mises à jour et je l'applique en conséquence. Maintenant, c'est aussi une chaise acceptable assez de pensées, ils sont tous les deux acceptables. Encore une fois, les règles de contexte. Donc, certains d'entre vous se sentiront plus à l'aise avec la double vérification, ayant l'ID dans l'URL et le corps. Et puis vous vérifiez, et puis si elles ne correspondent pas, alors vous rejettez la tentative. Certaines personnes ne me dérangent pas d'avoir un endroit soulignant avec l'opération. Donc, nous allons adopter l'approche où nous avons un endroit et non pas dans le dto. Maintenant à cause de ça, je pourrais. Utilisez le crée hôtel dto. Mais pour moi, cela violerait la règle de la responsabilité unique que j'ai préconisée. Parce que quand vous dites créer Hôtel De Jiao, il dit à quiconque lit le code que c'est pour la création. Pourquoi est-il dans la mise à jour ? Et maintenant, vous avez deux options. Encore une fois, vous pouvez soit renommer ceci en quelque chose comme upsert, où ce détail sert un double but de créer et de mettre à jour notre insertion et notre mise à jour, où le portmanteau upsert, non ? Mais une fois de plus, toujours une responsabilité unique dépend de la façon dont vous voulez être strict. Vous pouvez également vous rendre compte que vous pouvez avoir des champs différents dans les offres 2D car ce que vous accepteriez pour la création, vous pourriez ne pas exposer tout cela pour le potentiel de celui-ci. Donc, vous voulez considérer toutes ces choses. Donc, ce que je ferais est en fait de créer un second détail. J' en ai donc créé un autre, je l'appelle mise à jour hôtel VT0. Dans ce contexte, tout ce qui est ici pour la création est juste jeu pour les mises à jour. D' accord, donc je ne vais pas aller de l'avant et en créer un autre du tout. Je l'ai fait, c'était juste hériter. Donc je fais ça juste à cause du concept de responsabilité unique que j'ai en tête. Je fais Assouan pour m'assurer que lorsque vous voyez Mettre à jour les détails totaux, vous savez ce que c'est loin. Cependant, sinon, ce que vous voulez probablement faire est juste d'être plus particulier avec les champs que vous exposez dans la mise à jour dto. Et nous avons vu où cela peut aider avec un certain contrôle déjà. Donc je vais aller de l'avant avec ce niveau d'héritage. Encore une fois, c'est à vous de voir. Et nous voulions juste écrire du code propre et nous assurer qu'il soit lisible à la fin de la journée, non ? Donc, je prends l'ID dans le paramètre, puis je prends les champs pour la mise à jour dans le corps de la requête. Donc, je vais commencer par mes vérifications de validation et quand dire si non les états du modèle, point est valide, si ce n'est pas valide, ou si la valeur id envoyée est inférieure à un, est-ce que je veux dire qu'il devrait en être au moins un. Ecrivez-le pour être 0 sont négatifs. Donc, dans les deux cas, je veux juste enregistrer et retourner les demandes de batterie que quelque chose ne va pas avec votre tentative. D' accord ? Et ensuite, nous pourrons passer à notre essai et attraper. Et puis nous savons que pour la section enfants, nous allons enregistrer l'erreur ainsi que retourner le statut 500. Bon, alors voyons ce que nous allons essayer. Pour essayer, j'ai besoin de l'enregistrement original qui doit être mis à jour. Donc, ce que je dois faire est en fait sauver l'hôtel var est égal à attendre l'unité 04, Tomates point, me chercher. Direct Cards, met dans mon filtre où l'ID est équivalent à l'ID entrant par le paramètre, n'est-ce pas ? Alors je peux faire un autre chèque. Je peux voir si Hôtel est équivalent à null. Donc je n'aurais pas pu faire une recherche. Peut-être que Boston, la carte d'identité dix nos vies, six hôtels et un laissez-passer en dix avec quelque chose à mettre à jour. Je vais essayer de le trouver, mais je dois m'assurer que je l'ai trouvé bien. Alors je le ferais probablement. Demandes de bourgeon. Disons donc que je fais la même chose ici, mais dans la section des quêtes de beurre. Et nous allons voir soumis n'est pas valide. D' accord, donc il n'y a pas d'état de modèle, donc un peu hors du dossier avec cet ID Xist ne le sont pas. Et vous pourriez même simplement étendre l'unité de travail pour faire l'existe. Mais ce que je fais, c'est l'avoir une fois. Si c'est nul, alors on y met fin. Cependant, si ce n'est pas nul, alors nous pouvons aller de l'avant et essayer de faire notre part. Maintenant, je vais rapidement assimiler l'outil serait d'utiliser le mob de points de mappeur. Et puis je peux voir à ce stade quelle est la source, sorte que la série source Hôtel. Et puis je vais dire, je veux que ce soit la norme, désolé, la source serait l'eau dto. Mes excuses. Donc, un hôtel dto est la nouvelle source parce que l'hôtel dto a les dernières informations. Et puis je vais voir l'hôtel à droite. Donc, si nous regardons cette surcharge de mappeur, il faut deux choses, la source et une destination. Et puis ce qu'il va faire est juste de balayer ce qui est dans la source vers la destination existante. Donc, effectivement, nous avons juste dit ce qu'il y a dans cela, mettez-le dans le fait que s'il y a deux champs qui ne sont pas égaux, alors s'il vous plaît mettre à jour tout cela avec les champs provenant du détail, n'est-ce pas ? Et puis on peut savoir voir l'unité 04. Pas un problème, c'est que nous n'avons pas fait de suivi. Donc, si nous faisions du camionnage, nous aurions pu dire « sauver les bateaux ». Nous ne faisons pas de camionnage pour voir les mises à jour. Et puis passer à l'hôtel. Droit ? Et puis nous, vous savez, c'est tous les quatre sauf. Donc juste une ligne de code supplémentaire, pas trop mal. Donc, la chose est, je me souviens que j'ai été expliqué qu'avec la méthode de mise à jour, ce que nous avons fait était de voir, s'il vous plaît faites attention à toutes les entités ici, touchez-la et changez son état pour le modifier de sorte que c'est un modifié. Donc, quand on économise, il sera en quelque sorte dans le registre pour être sauvegardé ou mis à jour, n'est-ce pas ? Si nous n'avions pas r Si nous avions rendu le suivi facultatif, alors nous n'aurions pas eu à prendre cette étape supplémentaire de dire des mises à jour. Nous aurions pu faire le changement et voir si le parce que le camionnage est en fait par défaut. Donc j'explique juste ce petit peu trop parce que je ne l'ai pas mentionné. Donc laissez-nous, après avoir sauvegardé, nous pouvons retourner du contenu nul. Donc un vieux contenu semble être un beurre appliquer, mais c'est vraiment un outil pour lequel est quelque chose dans 200, ce qui est bon, non ? Donc c'est bien parce que je ne veux pas avoir quoi que ce soit à te dire, d' accord, tu as envoyé une mise à jour. Ok, il n'y a plus rien à faire. Tu es bon d'y aller, non ? Donc, c'est ce que le pas de contenu est vraiment loin. Donc, en revenant à celui que nous avons dit qu'il enseignait, ils diront le statut aux quatre. Essayons ça. Donc, juste pour attirer votre attention sur ce que le swagger fait, vous verrez que chaque type est joliment codé par couleur. Donc, si le mot ne suffisait pas, alors vous voyez le code de couleur mis est joliment indiqué là. Et il y a notre dto avec les champs, et il attend une valeur id dans les paramètres. Bon, alors utilisons le facteur. Et je vais aller jusqu'au dernier total que nous avons créé. Donc c'était notre tentative de post réussie et nous l'avons récupérée. Donc, la valeur de l'ID est six. Donc, je vais dire Put est mon verbe et je transmets cherche comme valeur d'ID, puis je vais mettre une virgule. Ça a été mal orthographié. C'est un minuscule changement elle, mais comme nous le verrons, la souscription virgule n'est pas vraiment cinq, mais c'est 4.84 pilotes de lune Jamaica Grand Resort. Et tandis que les pays de la Jamaïque. Alors laissons ça. Allons-y et envoyons voir ce qui se passe. Droit. Méthode non autorisée. Et oh, je pense que je sais pourquoi nous n'avons pas mis sur le paramètre seul réponse sur le port. Donc, de la même façon que nous avons ceci sur le GET HTTP après spécifier sur le put, qu'il devrait prendre ce paramètre. Donc les affaires étaient là. Et essayons encore ça. Donc, Buckskin Postman, je pense que ça devrait avoir le 401, ce dimère. C' est mieux. Donc, la méthode 405 non autorisée signifie que soit vous avez quelque chose mal avec leur demande, soit votre point final doit être trop corrigé. Holder Quest devrait regarder. Donc, sachez juste que c'est ce que nous rencontrons. Nous avions la demande correctement, mais le point de terminaison manquait. Très bien, donc c'est bon de voir ces petites choses en cours de route pour que quand elles arrivent, vous puissiez prendre le contrôle de la situation. Donc ce qu'on doit faire, c'est avoir un Tolkien. Et je crois que j'ai encore ma demande d'utilisateur ici. Donc, il est vraiment cool avec les deux argent peut toujours revenir en arrière et obtenir des demandes précédentes. Alors laissez-moi juste attraper mon Tolkien, revenir ici, l' ajouter à l'en-tête d'autorisation, puis réessayer. Et il frappe mon siège un point d'arrêt là-bas. Bon, alors continuons. Et là, il est un outil pour aucun contenu, donc il a traité avec succès les demandes. Qu' est-ce qui ne renvoie aucun contenu ? Eh bien, pas de contenu, mais encore une fois, un outil pour est un bon type de retour. Alors passons maintenant à notre Git précédent et voyons ce qui se passe. Un Tolkien. Laisse-moi aller de l'avant et mettre ce Tolkien ici et faire le « get ». Et puis nous verrons qu'il y a une virgule R et il y a 18 chances pour 4.8. En ce qui nous concerne, le put fonctionne ? Non, juste en se basant sur ce qui fait et ne le fait pas. Faire. Tu vois si tu manques quelque chose ? Voyons voir. Vous avez certains champs qui ne sont pas obligatoires. D' accord ? Droit. Non, c'est difficile de tester ce que je vais aller de l'avant et de modifier ce dto. Alors laissez-moi passer pour créer des besoins de vous, et je vais dire que le champ d'adresse n'est pas nécessaire. D' accord. Je suis allé redémarrer. Alors pourquoi ce redémarrage et laissez-moi juste expliquer ce qui est portable à faire. Le put va toujours remplacer les données. La seule chose qu'il fait est qu'il remplace à peu près la carte d'identité ? Donc, chaque fois que vous allez faire un put, vous devez être conscient que quelles que soient les données qui sont là, il va l'utiliser pour remplacer, disons que si je ne fournit pas d'adresse, disons pour traiter toute cette charge utile, ce n'est plus nécessaire. Je ne donne pas d'adresse. Qu' est-ce que je fais la mise à jour, n'est-ce pas ? Même hôtel et je fais la mise à jour que j'envoie. D' accord, donc je reçois un outil sans contenu, mais regardez ce qui arrive à mes données. Donc, remarquez que nous avions un volume non adressé. Aucune adresse n'est nulle, disons la moitié. Faire attention chaque fois que vous utilisez ce genre d' objets sont au moins à mettre car il va toujours le remplacer par les données qu'il a obtenues. Il vous appartient donc de vous assurer que vos validations représentent la qualité de données que vous voulez vraiment de votre application cliente, vous construisiez une usine ou que ce soit un tiers qui construit le client. L' API est la vôtre et vous devez définir cette norme car elle n'est pas nécessaire, je charge une valeur nulle pour être là. Sachez encore une fois, cela pourrait être bon ou mauvais en fonction de votre situation, mais c'est ainsi que le mettre fonctionnera. Donc je vais encourager votre rétine à faire une pause, répliquer le point de terminaison pour le contrôleur du pays. Ensuite, nous allons examiner quelque chose d'autre comme il en a besoin et comment nous pouvons entrer un peu plus de besoins de janvier seulement en ce moment. D' accord. Donc nous sommes de retour et j'espère que vous avez fait une pause et essayé vous-même, mais j'ai déjà fait le pays de mise à jour et je vais juste vous guider rapidement. n'y a rien ici, c'est tout. C' est hors de l'ordinaire par rapport aux hôtels. Tout est assez standard. Nous avons le détail de création contraire que je dois mettre à jour. On y va. C' est une bonne chose que je fasse cette critique. D' accord, donc nous mettons à jour contredisent pour vous contredire. Et tout le reste a l'air de la même façon. Non. Une chose que je tiens à souligner avec la mise à jour contredit pour vous est que j'ai inclus cette propriété qui est une liste d'hôtels. D' accord, donc oui, sans doute, je pourrais le mettre ici et ensuite le retirer de celui-ci et ensuite laisser le pays dto hériter de la mise à jour contredire pour sensibiliser tous ces éléments et la liste. Donc, ça aurait tout. Tu pourrais faire ça. Mais alors c'est juste ramener à la maison le point que vous voulez vraiment garder vos détails aussi uniques que possible. Parce que alors, vous savez, vous avez peut-être partagé des sensations à terre, mais alors vous pouvez avoir des champs uniques aussi le long du chemin. Maintenant, la pertinence de cette liste d'hôtels est que je peux réellement utiliser ma mise à jour, accompagner et aussi insérer de nouveaux hôtels sont des hôtels liés parce que rappelez-vous que les hôtels, Cela signifie qu'un pays a une liste d'hôtels, non ? On contraste de nombreux hôtels, c'est pourquoi nous pouvons les référencer par liste ici. D' accord, alors explorons à quoi ça ressemblerait. Donc, si je passe à ma documentation de swagger et que je regarde la charge utile potentielle que vous voyez ici où ils me montrent que je peux mettre le nom, le nom abrégé, puis une série d'hôtels. Et puis je peux mettre des détails pour l'hôtel. Et bien sûr, l'hôtel a, mais alors les détails pour le pays. Et c'est ce qu'ils voulaient vraiment dire quand ils ont dit que ça pourrait devenir cyclique parce que c'est juste une grande chose après l'autre, après une autre. Cependant, nous allons essayer cela. On va insérer un nouvel hôtel. Nous sommes désolés, un nouveau pays avec de nouveaux hôtels. Donc je vais juste dupliquer cette clique postsecondaire, disons l'onglet Dupliquer, puisque je l'ai déjà là. Avant de le faire, laissez-moi voir tous les pays que j'habite. Je n'ai pas vraiment de tests avec le pays. Laisse-moi chercher tous mes pays pour que je puisse voir mes options. J' ai donc la Jamaïque, les Bahamas et les îles Caïmanes et voir si nous devons mettre à jour les îles Caïmanes à cause de l'île Cayman, ce devrait être Island Zoo cosmétiques, mais continuons à mettre à jour ça. Donc je vais me laisser juste prendre mes repères. Donc je vais prendre la charge utile de l'échantillon sont de notre swagger. Et puis le pays est désolé, la carte d'identité du pays que je veux. J' essaie juste de trouver où était la carte d'identité consciente est trois. Donc, le nom sera les îles Caïmanes. L' inconvénient, le paramètre final serait la barre oblique du pays trois. D' accord, le nom court encore CI. Donc, une fois de plus, vous devez fournir la valeur que vous attendez d'avoir leur après. D' accord. Et puis je vais à l'intérieur de la section de l'hôtel, enlever tout ce que je ne veux vraiment pas. D' accord, comme presque tout fait, laisse-moi revenir aux détails. Je viens de remarquer que je liste le vieux hôtel dto ici, donc je n'ai pas dit ce qui pourrait consolider les matériaux est une bonne raison pour laquelle je ne consolide pas. J' ai dit Hôtel Dto. Hotel dto met alors dans l'id. mais si je fais un insert mettant à jour îles Caïmans alors que je veux insérer un nouvel hôtel automatiquement, ce qui signifie que je n'ai pas besoin de la valeur d'ID. Donc, ce détail est en fait incorrect. Ce que je devrais avoir ici, c'est créer. Hôtel VT0, qui est une meilleure représentation des données que je souhaite collecter. Et cela permettrait également de se débarrasser de l'excès se sent comme le pays et la liste étendue de photos. Essayons encore une fois. Bon, alors maintenant quand je regarde dans swagger et que je regarde le schéma qui semble beaucoup mieux. Ainsi, vous pouvez voir les détails sont très importants. Qu' est-ce que vous avez besoin de votre utilisateur ? S' assure que vous n'exposez que cela. Donc je vais prendre cette charge corrigée, retourner chez Postman et ce sera beaucoup moins déroutant pour moi, non ? Essayons à nouveau. Ça va être les îles Caïmanes avec I capital I, non ? Le nom court est encore CI je dois fournir cela. Et puis dans la section hôtels, je peux en fait énumérer tous les hôtels sont des objets d'hôtel. Donc, ce support carré signifie zone. Ensuite, l'accolade encapsule toutes les propriétés de l'objet que je peux dire virgule et liste la deuxième virgule OSU et continuer à les mettre, non ? Donc ici je vais mettre le Ritz-Carlton et ses adresses, Grand Cayman, il a une note de 4.5 et pas sur l'hôtel local. Donc, ils sont en fait tenir ceux dans grand Kim et il peut, si vous voulez vérifier que, cependant, je ne vais pas spécifier l'ID du conteneur. D' accord, donc je vais en fait supprimer l'ID de clincher, mais ensuite je l'ai comme requis, donc je vais l'enlever dans la charge utile. Et ce que je vais faire, c'est moi le changement dans le code lui-même pour le dto. Allons juste là-bas et le rendre pas nécessaire ces juste pour cette expérience. Et essayons ça. Donc changer milieu aurait la liste des photos. Ils ne font référence à aucun pays pour le moment. Cependant, ils sont en dessous de la charge utile du pays où les idées contraires trois, alors envoyons. Et je reçois un outil sans contenu. Laisse-moi aller vérifier. Laisse-moi prendre la liste des hôtels et voir ce que Kim bug. D' accord, on y va. Nous avons donc l'hôtel local qui revient avec un Sullivan idéal et le Ritz-Carlton qui revient avec une carte d'identité de huit. Et les deux sont des parties du pays trois sont essentiels à l'esprit. Donc, vous voyez, c'est comme ça que vous pouvez réellement utiliser le put. Donc, nous verrons, est-ce que cette chose existe ? Sinon, je vais le créer. Et la seule façon qu'il sache qu'il existe est si la valeur id est fournie. Donc, quand il n'y a pas de valeur d'ID , va dire, cela n'a pas d'ID. Donc, je vais aller de l'avant et le créer. Cependant, en raison de nos contraintes que nous mettons sur notre point final, nous ne permettons pas aux gens d'utiliser simplement le put to create parce que nous vérifions qu'une valeur id doit être présente, qu'une valeur d'ID raisonnable doit être présente avant de déplacer sur. Donc, ce sont les deux contraintes que vous pouvez utiliser pour vous assurer que le put fonctionne comme vous le voulez pour quiconque son opération globale est très polyvalent. 34. Construire le point d'extrémité de SUPposition.: Bienvenue les gars. Dans cette leçon, nous explorerons comment nous supprimons les données via notre API. J' ai donc déjà créé cette action. Si vous le souhaitez, mettez en pause et activé. Donc, je vous donne un aperçu a encore ce dont il a besoin pour ressembler, au moins au début, le verbe est HTTP delete. Nous devons lui faire savoir qu'il devrait s'attendre un certain paramètre sous la forme d'idées et d'entiers nous l'autorisons. C' est un autre que vous voulez probablement appliquer un rôle pour l'administrateur car nous supprimons. Sinon, vous pouvez simplement le laisser comme autorisation. Et nous savons que les codes de réponse ici seraient 4024500. Vous pouvez donc faire une pause et essayer, puis nous pouvons comparer les notes. Donc, ce que j'ai dans cette suppression hôtel axon est une validation pour s'assurer que la valeur d'ID a un sens. C' est le numéro un. Donc nous faisons cela et puis nous avons rejeté fait une demande de batterie. Si cela n'a pas de sens, alors je vais essayer d'attraper son art dans journalisation et nous renvoyer le code d'état, désolé, de 500. Mais quand il essaie de fonctionner, ce qu'il fait est de réessayer l'hôtel avec l'identifiant qui a été transmis. Nous vérifions si cet hôtel existe. Sinon, nous voyons une fois de plus mauvaise demande et enregistrons l'erreur. Sinon, nous continuons à supprimer l'hôtel et enregistrer nos modifications, puis nous ne retournons aucun contenu. Donc vous voyez qu'il n'y avait pas grand-chose à supprimer l'hôtel. Il en va de même pour le pays. C' est à peu près la même méthode que nous avons le pays de suppression, nous avons le même statut est si vous voulez étendre les mêmes autorisations en conséquence. Et nous passons par, nous obtenons l'ID, nous vérifions que le volume a du sens. Et puis nous essayons l'opération, obtenir le pays, valider que ce n'est pas un faux numéro. Et puis en procédant et en le supprimant, s'il va si loin, nous retournons un contenu nul de deux ou quatre. Donc, ce que nous voulons faire est de tester la suppression d'un hôtel plutôt que de tester la suppression d'un contrat. Et vous allez voir pourquoi je mets l'accent sur ces deux tests. Donc, avec l'introduction du point de terminaison de suppression, football obtient un peu plus de bobine pleine. Vous voyez la suppression en cours de promotion ici. Et ce que nous allons faire, c'est utiliser le facteur et essayer de nous supprimer. Donc, vous avez le point final. Vous savez, nous avons besoin du volume d'ID dans l'URL. Nous allons choisir notre verbe comme supprimer. D' accord ? Et ce que je vais faire, c'est choisir une photo que je ne veux pas vraiment, non ? Donc je pense que celui-là était juste un test aléatoire. Vous voyez qu'il dit toujours chaîne, chaîne juste conduit les valeurs par défaut sont là dans l'exemple de charge utile. Donc je vais supprimer l'hôtel avec le numéro d'identification 5. Donc, dans ma suppression. Demande je mets dans la barre oblique d'URL x5, puis envoie. Bien sûr que je dois l'autoriser. Alors laissez-moi revenir un peu et la tendance obtenir Tolkien leur but. D' accord, voilà un Tolkien. Prenez le discours et le pull John, jeton de porteur d'autorisation. On y va. Et nous n'avons pas de contenu. Donc si je regarde la liste, je ne devrais pas voir l'hôtel avec la carte d'identité 5. Il est là. Ça va quatre puis six. Donc cinq est parti. Maintenant, c'est un trou. Nous supprimerions un hôtel. Non, le truc avec les pays que le pays a des hôtels. C' est donc un peu plus risqué lorsque nous supprimons un pays que nous allons devoir supprimer les hôtels aussi. Alors voyons à quoi ça ressemble. Alors je vais dire Pays. Et en regardant en arrière, je vois que nous devons à Cayman avoir V1 aux Bahamas. Essayons donc de supprimer le contraire des Bahamas. Il n'a qu'un hôtel, donc nous allons juste, par le bulletin fait un sacrifice de point E1 ou E2. On peut toujours l'additionner plus tard. Donc ce que je vais faire, c'est voir le pays avec l'ID3 et aller par ici. Mets ça là. D' accord, j'ai eu 3 et j'ai envoyé. Et nous voyons où obtenir une âme sans contenu. Si je regarde la liste des pays que nous examinons la liste des pays que je ne devrais pas voir. Oh, j'ai supprimé K mineur. C' est très bien. Donc je n'avais pas besoin que Kamen, donc nous allons NF2 pays 12, Je pensais que House supprime Bahamas, excuses. Donc, cela signifie qu'aucun des hôtels qui ont la valeur d'identification 3 ne devrait être là pour que nous envoyons, et c'est là. Nous avons donc un contrat avec l'ID un pays avec ID deux, pays avec id1, un, et cetera. Donc, aucun pays avec ID3 ne reste. Et c'est parce que dans notre migration quand nous avons créé la base de données. Ainsi, vous pouvez aller au premier fichier de migration, je l'appelle la base de données créée. Vous verrez dans la configuration que la contrainte sur la clé étrangère était qu'il disait référence cascade point d'enchères. Donc cascade signifie que si vous faites un changement au parent, ce qui signifie pays, sol, vous avez contraire être le parent et les hôtels sont assez conscients. Les enfants sont donc à la garde. Si vous apportez des modifications à l'accord contraire, il cliquerait sur celui de l'hôtel. Donc, dans ce cas, les gènes que nous fabriquons sont que nous supprimons le parent requis. Donc, sur suppression, je veux cascade, ce qui signifie que tout ce que vous faites au parent, répliquez cette action sur l'enfant. Donc, cela peut réellement être changé. Eh bien, vous devrez répondre à la modification dans le fichier contextuel, puis exécuter une autre migration pour savoir que vous voulez connaître les arts de la vente aux enchères ou restreindre. Signification. Et je fais habituellement je restreint parce que s'il y a des enregistrements enfants, je ne veux pas supprimer les parents. Donc, une fois qu'ils sont des hôtels associés à ce pays, vous ne pouvez pas supprimer. Le pays n'a pas restreint le bois. Cependant, écrivez des notes sur Cascade, et comme vous le voyez quand vous faites ce pair dans l'enregistrement, il va en cascade dans tous les hôtels. Donc tu dois être prudent avec ça. Assurez-vous que si cette configuration est obtenue dans votre API, elle est délibérée, c'est ainsi que vous voulez qu'elle fonctionne. Mais c'est quelque chose qui peut causer des pertes de données massives si c'est le cas, si elle est sans lien. 35. Référencer et ajouter des modifications à GitHub: D' accord les gars, donc on est encore une fois, c'est un autre jalon pendant qu'on va faire, c'est secouer nos changements. Nous avons donc ajouté tous les points de terminaison manquants pour le PUT post et supprimer les demandes pour les hôtels et les pays. Et les concepts que vous avez appris en cours de route peuvent être appliqués autant de fois que vous en avez besoin, autant de points de terminaison que vous avez besoin pour faciliter, vous pouvez également les appliquer. Donc, nous allons de l'avant et allons obtenir des changements, ajouter notre message. Et puis ce que je vais faire, c'est tout engager et couler. Et une fois que cela est terminé, vous pouvez rester dans le coin pour la prochaine aventure. 36. Fonctions de valeur ajoutée - Aperçu des sections: Hé les gars. Nous allons donc commencer une nouvelle section de notre développement API. Et en fait, ce n'est qu'une puce à valeur ajoutée fonctionnalités. Nous avons fait un peu de travail. Nous avons déjà une API fonctionnelle avec une belle architecture propre qui peut être facilement étendue. Cependant, il y a certaines choses dont nous voulons profiter quand il s'agit de dominer le noyau. Et ces caractéristiques sont, ces allocations nous permettront de réduire partie du code répété que nous avons tout au long de notre application. Donc, disons par exemple, un, nous continuons à répéter, essayer, attraper. Chaque fois que nous faisons une opération, nous avons encore le trike, donc nous allons envisager de mettre du code pour réduire cela et gérer les flèches de manière globale. Puisque nous faisons vraiment la même chose presque à chaque fois, tout ce qui serait de regarder sera de réduire notre besoin de vérifier certains, faire certains contrôles avant de terminer une opération. Ainsi, mettre en place des filtres d'action sera également mettre en place des mécanismes pour aider à accélérer la récupération sur le traitement des données comme la mise en cache, la pagination. Donc, nous allons regarder toutes ces choses et nous allons commencer avec la mise en œuvre de la pagination. Alors restez à l'écoute. 37. Mettre en œuvre la paging: Bon, alors commençons à regarder la pagination dans cette leçon. Null. Une petite bosse nous a gémissés pour marcher la pagination est, et pourquoi nous en avons besoin. La pagination parle à la fois de segmenter les données renvoyées. Donc, en ce moment, ce que nous faisons est que nous faisons une BigQuery, obtenant toutes les valeurs dans une certaine table en même temps. Et bien que cela puisse paraître bien parce que nous n'avons que trois pays et cinq hôtels. Lorsque vous déployez cette API pour une utilisation internationale. Et vous stockez des hôtels dans 200 pays à travers le monde, vous vous rendrez compte que vos données vont croître de façon exponentielle. Et puis vous avez certainement besoin d'un prédicteur vous-même sur votre système à partir de trop de demandes et le fardeau de servir autant de données tout à la fois à potentiellement de nombreux clients, ainsi que de protéger les clients contre avoir à développer de segmenter les données en interne parce qu'elles en reçoivent trop à la fois. Donc, la pagination est un moyen agréable, efficace et efficace de segmenter les données, permettant au client de voir, je voudrais autant d'enregistrements. Et puis nous revenons juste selon ce qu'ils ont demandé. Cela a commencé avec Boltzmann sur l'écran parce que ce que nous voulons de notre client, c'est que lorsqu'ils font cet appel de service, ils transmettaient des paramètres pour dire quelque chose comme la taille de page qu'ils voudraient. Donc page dit signifierait combien d'enregistrements. Disons qu'ils disent dix. Et puis ils diraient et je voudrais le numéro de page. Donc c'est un numéro de page. Donc, je peux soit taper en faisant semblant que les ordres de lien, le mettre ici dans les paramètres Chanzeaux numéro de page serait égal à quelque chose comme un ou deux. Donc, nous devons savoir implémenter le code pour dire que s'ils demandent une taille de page de dix, cela signifie qu'ils voulaient dix enregistrements. Ce qu'ils demandent pour la page 3 ou quelque chose qui n'est pas la page 1. Cela signifie qu'il aimerait le nécessaire 30 jusqu'à ce que nécessaire 40. droite. Quelque chose comme ça. Pour que nous, s'ils affichent dix hôtels à ce moment-là sur leur doctorat, quand ils vont à la page suivante, à la page suivante, ils vont simplement incrémenter ça et ils ne savent pas que nous obtiendrons 40 à 50, puis 50 à 60, etc. Donc, si nous avons 500 hôtels, à aucun moment personne n'obtiendrait tous les 500, ils n'obtiendraient pas 50 morceaux ou ce qu'ils demandent. Bien sûr, nous pouvons limiter le maximum. Donc, ce que nous devons faire est de commencer par créer un nouveau modèle, quelqu'un pour appeler cette demande de modèle. Params est juste une classe et ce sera juste un modèle ou une doublure. Les contraintes sont les noms de paramètres qu'il y a beaucoup de passion, non ? Donc, avant de faire quoi que ce soit, je voulais initier ou déclarer une pizza maximale est de 50, donc personne ne peut demander plus de 50 enregistrements à l'époque. Bien sûr, c'est le mien ou le tien. Donc, si vous voulez le limiter à dix, vous voulez ouvrir à un 100. C' est tout à vous de décider. Faites ce qui est le mieux pour votre système. Donc, nous mettons ça à 50, écrivez null. Et puis nous avons une autre propriété que nous allons appeler le numéro de page. Et un autre, celui-ci est privé que nous allons appeler ça bat les côtés. D' accord, donc, ce sont juste par défaut. Donc, je vois que le cas de numérotation de page par défaut nano a été spécifié. Le numéro de page par défaut sera un et la taille de page par défaut sera dix, n'est-ce pas ? Mais alors je vais faire la taille de la page de la version publique de la taille de la page, où je vais dire manuellement git. Et ici, je vais retourner la taille de la page de soulignement. Mais alors nous pouvons également définir la valeur de la taille de la page pour être égale à. Et je voulais dire que le volume était supérieur à la taille maximale de l'enchère. C' est donc une question. Je voudrais juste utiliser un opérateur ternaire pour voir si elle est supérieure à la taille maximale de l'enchère, alors nous envoyons la taille de la perle. C' est pour ça que j'en aurais besoin. Donc, s'ils ont demandé plus de dix, plus de 50 enregistrements, donc la valeur par défaut est dix, n'est-ce pas ? Là, demandé plus de 50, alors nous renvoyons juste 50. Sinon, nous envoyons des valeurs. Donc, la valeur ici est un mot-clé comme vous le voyez, mis en évidence en bleu, tout comme c'est pour le retour. Donc la valeur serait quelle que soit la valeur où assis ici. D' accord, donc ici nous avons juste un get par défaut défini notre initialisation à un. Donc, il n'y a pas de contraintes réelles sont à ce sujet parce que nous ne savons pas à quelle page ils sont. Cependant, ou ce que celui-ci où voir toujours retourner la taille de la période. Donc, quand vous obtenez le retour, ce que cela fait est, cependant, quand il est assis, si la taille de page demandée est supérieure à 50 ou quelle que soit la valeur que vous y mettez, alors nous retournons ce maximum. Sinon, alors nous pouvons aller de l'avant et retourner cette valeur. Maintenant, la prochaine chose que je veux faire est de modifier le contrôleur. Donc à ce stade, je vais juste modifier prendre conscience parce que ce gars a dit que je ne veux pas que ça n'importe quel point. Quelqu' un étant capable d'obtenir tous les dossiers en même temps, ce serait problématique pour mon aide. Donc ce que je vais faire est de modifier, d'obtenir des pays. Donc, ce point de terminaison n'est plus obtenir tous les pays. Ce que nous allons maintenant voir de Query. Alors, allez-vous voir dans le corps l'entrée ici ? Je crois que quand on fait le post, tu verrais du corps. Alors que les demandes auraient les données dans le corps, n'est-ce pas ? Donc, nous l'aurions fait. Laisse-moi voir si je peux trouver quelqu'un avec le corps. On y va. Donc c'est le corps du corps qu'il prend de cette requête qui que ce soit de la requête. Nous allons regarder à l'intérieur de la chaîne de requête qui est possible pour les paramètres. C' est pourquoi je l'ai appelé pour demander que les pirates sont des paramètres, non ? Donc, à partir de Params où la recherche de champs qui correspondent aux noms comme indiqué dans notre RequestModel. D' accord, donc c'est le même genre de concept que le dto write demande des armes à feu. Donc, je vais juste appeler ces requêtes armes à feu valeurs paramètres Award, c'est un mot-clé. Donc nulle part à la recherche de notre requête. Chaîne de requête, désolé, que nous aurons dans les champs pour la taille des enchères et le numéro de page. Donc maintenant, le prochain développement consistera à transmettre cette information. Ne reçois pas toutes les commandes. Alors rappelez-vous que dans nos unités sont fourche ou guitare que vous voyez, oh, juste rendre tout de toute façon, n'est-ce pas ? Donc, ce que je vais faire est de mettre en pause les paramètres de requête ne sont pas à l'arrêt et bien sûr, cela va nécessiter un remplacement. D' accord. Je ne veux pas me débarrasser de l'origine. Je vais y arriver peut servir un but autrement. Donc je vais juste en créer un autre, pas vrai ? Revenons donc à nos unités Unit 04 sur une sorte de dépôt générique et nous avons tout comme il est. Donc, ce que je vais faire est de créer une toute nouvelle déclaration. Je remarque que j'ai ce nouveau type de données ici je liste de ph. Vous en verrez plus à ce sujet dans un carburant. J' ai donc la tâche obtient tout et je reçois juste les inclusions ainsi que les paramètres de requête. Donc, je ne vais même pas leur permettre de filtrer et tout ça parce que nous ne sommes pas vraiment intéressés par ce que nous recevons tout, mais nous voulons faciliter la PGA. Permettez-moi donc d'aller de l'avant et d'inclure ce que je peux inclure qui a déclaré ce type de données l'a déjà fait, afin que nous puissions laisser cela tranquille. Et puisque c'est de connaître l'interface, j'ai besoin d'aller mettre à jour le référentiel générique afin qu'il puisse l'implémenter. Bon, maintenant qu'il est là, quel accord dois-je mettre ? Alors lisez Andrew faire tout ce que je fais ici. Eh bien, peut-être pas chaque chose parce que OrderBy anormal, mais je vais juste prendre ce code, le coller, ne pas entendre et le retour. D' accord, donc je vais le faire lentement pour qu'on puisse voir exactement ce qui se passe. Donc il n'y a pas d'expression. Je peux prendre toute l'expression. Nous avons des installations pour l'inclusion, mais nous n'avons pas de commande BY donc je vais prendre cette note. Je sais que ce que j'ai besoin d'ajouter est une installation pour bien filtrer notre pic exactement ce que je veux de la requête parce que cela retourne toujours tout. Donc, à ce stade, je vais juste aller de l'avant et prendre soin de cette erreur, qui est la liste de bord IP. Et si vous regardez les suggestions, la bibliothèque que je veux n'est pas là. Donc je vais aller à New obtient et obtenir son argent ou ceux-là. Donc, gérez les nouveaux paquets AND GET. arrondissements de Gautam. Et puis je vais chercher des listes de points d'œufs. C' est donc une bibliothèque très importante qui aide à la pagination. Donc nous allons juste dire expansionniste, noyau MVC. Allez-y et installez cela et sachez qu'il est installé. On peut y retourner et essayer de s'occuper de ces erreurs. C' est donc un référentiel générique. Non, je peux dire en utilisant des listes de pages x-dot, donc je vais aller de l'avant et faire ça. Donc faire l'entreprise c'est très possible. Mais alors pourquoi faire tout ça quand il y a une bibliothèque, n'est-ce pas ? Alors allez au générique. Inclure toutes les références manquantes. D' accord, et la chose cool cependant est que ne pas entendre, il se plaint parce que nous avons IP est que cela retourne onglet ou faire pour lister ici. Donc, je page liste nous donne la fonction d'extension qui nous permet de dire à la liste de la page est couler. Et puis le nist de deux pages prendra deux paramètres. Il veut un numéro de page et la taille de la page. Où allons-nous obtenir ça de nos paramètres de requête, d'accord, donc en fait je suis allé même prendre la nullité de tout ça, et franchement je vais enlever les intrusions. Laissez-moi juste faire un peu de refactorisation parce que maintenant je pense à ce qu'il arrive toute la nuit à Pij, c'est quand ils font la pagination des données, ils n'ont probablement pas besoin d'inclure quoi que ce soit sur le pays ou autre chose, non ? Parce qu'ils listent simplement les adultes lorsque vous obtenez les détails de quelque chose, alors vous voulez probablement inclure. Donc je veux dire, c'est à toi de décider. Peut-être que je vais laisser les inclusions parce que je pouvais voir la valeur dans son début de la balle inclut et demander des armes à feu. Nous voulons absolument que ce soit obligatoire pour cette version. Laisse-moi mettre ça à l'avant. Je pense que c'est pour ça que cette ligne rouge est là. Parce que chaque fois que vous avez l'appartement, fait cette étude, vous devez avoir les désirs nullables jusqu'à la fin. Alors on y va. Donc, demande des paramètres. Mais à la tâche qui est sur les points de requête comme aucun suivi n° 2 ph nist et ils passaient les paramètres de requête point qu'ils sont assis sur le premier numéro de pH. Il est donc important de toujours regarder toutes les exigences et de s'assurer que vous passez le bon volume, puis ils voulaient la taille de la page et oui, j'ai quelque part que vous pouvez obtenir cela. D' accord. Et puis je pense que ces zones là parce que nous avons besoin d'être un C. Là, nous allons. Donc non, nous pouvons obtenir une liste de pages de tout ce que nous avons dans notre base de données et j'ai besoin d'aller et de corriger mon dépôt où je peux ne pas être nullable. Et bien sûr, je dois le déplacer à l'avant. D' accord ? Donc, vous voyez que vous construisez sur votre EPA, minuscule G et votre design fait le long du chemin, ils sont en fait nécessaires mais, vous savez, une fois que vous savez ce que vous faites, ouais, vous vous approchez de dessus. Alors laissez-moi juste faire une construction et assurez-vous que je n'ai rien raté d'autre que je vois ici. D' accord, donc ils voient que c'est tout. Il n'y en a pas. Ok, donc cette erreur est parce que j'utilise toujours la fonction get Dawes. Donc, sachez que nous devons sortir des fonctions pour distinguer entre les deux d'entre eux. Ce que j'aime faire est de passer exactement les paramètres que le 1e Non, je veux les besoins, non ? Donc, en fait, cela ne fonctionne pas parce que bien qu'on en prenne encore plus d'un, donc c'est toujours confus quant à lequel il s'agit de moi. Donc ce que je vais faire aurait dû le faire dès le début. Je vais juste changer le nom et. Faites-en un nouveau ou un jour, ils ont essayé d'être génériques. Janet Mock tire. Laisse-moi juste appeler ça se faire biper. Au moins. Je pense que c'est assez clair. Donc je ferais un dépôt générique, nous le faisons dans un référentiel générique. On a fait ce changement dès que j'ai trouvé que c'est là qu'on y va, et on y va. Alors prenons ce spin forestier. Donc seulement fait cela les pays. Et le fait est que nous l'avons fait à un seul endroit et qu'il est si facile de passer à n'importe quel autre contrôleur et de faire ce changement parce que le dur travail était déjà fait. D' accord, donc c'est l'un des avantages de pompage Clean Architecture et avoir une erreur ici et ne pas nous a dérangé, mais il en est ainsi. D' accord, alors essayons encore. Et quand nous arrivons à ce point et essayons de ramener le deux-points vrai avec la taille de l'enchère 50 et, et la page numéro cinq, je vais en fait définir un point d'arrêt ici pour que nous puissions voir les paramètres entrant ou peut-être membre et juste éteindre et 39. D' accord, essayons ça. Alors envoie, d'accord, donc ça chauffe les points d'arrêt. Cela signifie donc que la demande a été reconnue. Voir pour obtenir les requêtes params il nous obtenons 515. D' accord. Et ils continueront. Et nous savons que nous allons avoir des insectes dans tous nos pays. La demande est pour un PID dit un abominable, mais cela n'existe pas seulement de deux hôtels. Si bien aux pays, désolé, sorte que l'on est la première indication que cela fonctionne. Essayons à nouveau. Je veux la page numéro un avec P, sa taille deux. Je vais avoir deux pays gérés par supprimé un, n'est-ce pas ? Essayons ça. Donc, quand on envoie, on n'a que l'outil, pas vrai. Si j'ai demandé la première page avec un seul que je n'en récupère qu'un si j'ai demandé un pH de dix, ce qui signifie passer aux dixième enregistrements. Donc, ce que notre liste utile de bibliothèque a fait, c'est qu'elle a automatiquement modifié la requête avec take and skip. Laisse-moi sauter là-bas. Donc, dans lien ou Entity Framework plutôt, vous pouvez réellement dire quelque chose comme requête. Et tu peux faire une tique. Donc, vous prenez ce nombre, à droite, renvoie un nombre spécifié d'éléments contigus, puis vous pouvez voir où, où il dit contourner un nombre. Donc c'est vraiment ce qu'il fait. Donc quand nous envoyons la taille de l'enchère ou disons un numéro de page dix, ça veut dire sauter dix, sauter dix records ou à notre sauter dix fois ce nombre, offrir des cartes et ensuite ramener ces mini, quelque chose comme ça, non ? Donc tout cela, cela semblait déroutant, n'est vraiment pas si difficile à écrire. Je suis probablement moi déteste UN plus difficile que ce n'est vraiment ce que les réalités que nous n'avons même pas eu à faire tout cela à cause de notre bibliothèque faire cela pour nous. Words is 2pi est listé, fait cela automatiquement, et c'est pourquoi il prend peut-être des paramètres de requête. Ok, je vais en quelque sorte dans ce cours derrière ça. Donc, c'est bien. Donc oui, c'est ainsi que nous implémentons la pagination. Donc, évidemment, vous n'en voyez probablement pas toute la puissance parce que je n'ai que très peu de dossiers. Cependant, si nous voyons que peut-être 50 hôtels dans cette base de données et ensuite nous avons dit que nous voulons la page 5 et seulement dix dossiers. Alors ça dirait Donne-moi ça. Je pense que mes calculs sont là, mais j'espère que vous aurez l'essentiel. Donc c'est vrai, et tout ce que nous avons la pagination activée dans notre API. Et encore une fois, c'est à la fois vous-même et l'application qui en fait la demande. Et si ces paramètres n'ont pas été fournis, alors par défaut, nous avons dit à la classe de params de requête que les dévaluations devraient par défaut à la page numéro un et un maximum de 50. 38. Gestion des erreurs mondiales: Salut les gars, bienvenue. Donc, dans cette leçon, nous allons parler de la gestion globale des erreurs. Donc je commence dans le contrôleur pour les pays. Et nous avions mentionné plus tôt que nous voulions réduire le besoin de répéter cet essai. Donc, chaque fois que vous pouvez faire une opération alors qu'elle est très essentielle, elle devient répétitive au fil du temps parce que nous avons quatre fonctions où nous continuons à écrire try catch, try, Dutch try-catch. Et pour tous les autres téléphones sur ce serait important. Dans. Donc, ce que nous voulons faire est d'implémenter un moyen global de gérer exceptions et de réduire le besoin d'instructions try-catch répétitives. Donc, ce que nous voulons faire est de normaliser ce qui se passe lorsque nous détectons une erreur. Parce que quand on s'accroche, on fait la même chose. La seule chose qui est une sorte de dynamique serait la, la partie où nous voyons l'emplacement, qui pour moi est en fait un peu optionnel et probablement pas nécessairement besoin de faire l'étincelle. Mais le fait est que le message est relativement le même et nous donnons toujours ce code de réponse 500. Donc, ce que nous voulons faire est d'avoir un moyen standard de représenter un aérosol et des modèles. Je vais juste créer un nouveau cours et je vais l'appeler. Et puis par erreur, nous allons avoir trois champs. Donc nous allons avoir un code d'état. Nous allons avoir un message I. Ensuite, nous allons en avoir un troisième où nous fournissons le message en tant qu'objets JSON sérialisés. Donc, pour celui-ci, nous aurons Newton JSON, neutron doux, désolé, point JSON. Donc, c'est son ensemble ou la classe d'erreur va s'occuper de cela. Ce que je voulais faire est d'étendre notre pipeline de démarrage, mais je vais utiliser les extensions de service comme ce que nous avons fait depuis quelques temps. Et je vais avoir un nouveau, et nous appelons ce nouveau gestionnaire d'exception de configuration de fonction. Et cette fois, c'est obtenir le pipeline middleware. Donc, à l'origine, il y aurait entrer dans les services cette heure entre dans le générateur d'applications. D' accord. Donc, en cela, nous allons de l'avant et nous disons point, Utiliser le gestionnaire d'exception. Très bien, donc le point fait application de base dans et hors lui-même a sa propre exception là-dessus. Donc on fait un peu comme un override pour voir que c'est vraiment comme ça que nous voulons que vous opériez. Donc, utilisez le gestionnaire d'exception et que nous avons besoin de notre petit Tolkien ou lambda regardant Tolkien. Et puis ici, nous ouvrons et fermons accolades semi-côlon à la fin. Donc, à l'intérieur de ce bloc, et quand dire les doctrines d'erreur avaient ce n'est pas moi d'ajouter le middleware costal appelé null. Et je vais voir async et mes connaissances d'expert Tolkien sur quand appeler le contexte, puis mon lambda R1. Donc encore une fois, pour un autre objet, d'accord, donc ce que je fais c'est chaque fois que je vais faire un de ces bords, moi montre à la fois le point-virgule à la fin des mémoires sont, les parenthèses sont là, donc je ne l'oublie pas plus tard. D' accord. Alors nous allons voir, mettre un peu. Une certaine constante. Je mets le code context dot response.status pour être égal aux codes d'état dot 500. Donc, le même 500 que nous retournons chaque fois qu'il y a une erreur, nous mettons juste cela comme une constante afin que nous n'ayons pas à le taper encore et encore. Alors où étais-je désolée ? Donc, l'état cite l'état du point 500 Erreur interne du serveur. Et puis je définit le type de contenu pour être l'application JSON. Ensuite, je vais dire que la fonctionnalité de contexte var est égale à deux contextes fonctionnalités point obtenir la fonctionnalité de gestionnaire d'exception, vous devrez peut-être importer le type de données manquant pour celui-ci, sorte que vous pouvez aller de l'avant et le faire. Donc, ce que nous allons dire non est si la fonctionnalité de contexte n'est pas égale à null, alors nous voulons dire point de journal et puis erreur de connexion. Alors rappelez-vous que chaque fois que quelque chose échoue, nous le faisons réellement. Nous avons notre enregistreur et puis nous nous connectons erreur où nous passons ce qui ne va pas, non ? Donc je vais dire que si quelque chose s'est mal passé, je vais juste copier ces bases ici, quelque chose a mal tourné. Mais au lieu de nom, souvent obtenir des pays. Cela, je vais dire erreur de point de fonctionnalité de contexte. Cela nous donnera donc une indication sur ce qui s'est mal passé, non ? Donc pas d'erreur, de contexte, d'erreur de point de fonctionnalité. Ensuite, nous continuons à dire, je vais attendre, contextes nous apporte des notes de programmation asynchrones MCT est que cette petite flèche ici est verte sur la scène que nous voyons un symbole jamais attendu quoi que ce soit. Donc, quand je dis que nous, c' est, n'est pas tout satisfait à n égal o a ou désolé, le mot-clé async n'est pas tout satisfait. La terre s'en va. Donc, je vais dire attendre la réponse du point de contexte. Donc, nous allons dire que renvoyer une réponse aux contextes appelant du contexte représente vraiment le contrôleur qui transmet l'information. D' accord ? Lucio, ça marche dans quelques uns. Alors écris asynchrone, d'accord ? Et puis nous voulons dire que nous voulons une nouvelle erreur. Donc nouvelle erreur, et je vais juste aller de l'avant et initialiser ce modèle. On y va. Nous voulons donc une nouvelle erreur où notre code de statut sera égal au statu quo que nous venons de dire ici. Donc je veux dire, on aurait pu facilement dire qu'ici, c'est bon. Mais nous le voulons. Et nous voulons aussi que notre message soit égal à quelque chose de cohérent. Donc je pense que nous venons de dire serveur interne. Ces dragons, je pense que c'est ce qu'on disait à chaque fois. Donc juste le message étant égal à ce message très cohérent. Et puis tout cela, nous voulons convertir en chaîne. Ensuite, nous avons un point-virgule. Bon, alors passons un peu en revue. Nous voyons donc que nous voulons remplacer notre gestionnaire d'exception par défaut. Et la façon dont nous voulons que la gestion des exceptions se produise est telle que quand on se produit, nous écrivons le journal, puis nous générons un modèle d'erreur avec le code d'état et le message. Très bien, donc ça éliminerait notre besoin de le faire manuellement à chaque fois. Maintenant, après avoir écrit ce code de middleware costume, ce qu'il faut faire c'est aller à la startup et je vais mettre celui-là juste en dessous du swagger. Donc, nous allons le dire, dot configure gestionnaire d'exception, et ça devrait être tout. Donc, ce que je vais faire comme une preuve de concept est retiré le plateau parce que essayer signifie vraiment faire cela. Donc, avec toutes les triades prêts à essayer de le faire, le seul but réel sont les aspects de changement de jeu de la capture d'essai est qu'il va voir, essayer cette opération et manipulé les flèches qui se produisent. Donc, si j'ai une gestion globale des erreurs, alors je n'ai pas besoin d'aller de l'avant et de mettre quoi que ce soit pour gérer manuellement quand quelque chose se produit. Donc je vais essayer d'obtenir une pièce d'identité de contrebande. C' est très bien. Donc, nous allons faire quelques tests avec ceci comme preuve de concept. Et ce que je vais faire aussi, c'est , d' accord, on va juste, on va juste regarder comment ça marche. Donc, je vais commencer et je vais exécuter notre demande pour les pays de slash API slash un. Et puis nous avons le pays numéro un, qui est la Jamaïque avec l'hôtel. Donc tout fonctionne bien. C' est ce à quoi on s'attendrait. D' accord ? Non, c'est difficile pour moi d'introduire une erreur autrement. Ce que je vais faire, c'est présenter l'argent. Eh bien ici dans le code ce que je vais faire est de lancer une nouvelle exception parce que le catch est là pour attraper une exception. Donc, si je lance une exception moi-même, alors ce qui arriverait est que le code arrêterait réellement de s'exécuter à ce stade. Je n'y descends jamais. Maintenant, je veux voir quelle réponse j'obtiendrais lorsque cette exception est levée. Donc, nous allons aller de l'avant et exécuter mêmes requêtes Postman qui ont été couronnées de succès et je vais introduire l'exception de lancer. Et quand nous faisons cela, nous voyons que nous recevons un code d'état et un message. Et ces deux champs sont les mêmes deux champs que nous venons de définir dans notre modèle d'erreur. Très bien, donc ce qui se passe ici, c'est que le gestionnaire d'exception surveille globalement chaque fois qu'une exception est interceptée, alors il fait ce que nous lui avons demandé de faire, qui est de consigner l'erreur et de dire que quelque chose s'est mal passé ici. Voyons donc ce qu'il y a dans le journal et le journal en voyant mon exception ici. Donc système sauf SON System.Out Simpson était à travers et j' aurais pu faire exception plus spécifique ce point de données. Mais si vous regardez vers le bas, voyez tout le pipeline pour savoir où il est allé. Donc, ce qui se passe, c'est qu'il est allé au contrôleur. Le contrôleur a lancé une exception, puis ils gèrent le gestionnaire de main que nous avons remplacé, chauffer notre code personnalisé. Et puis il a dit, ok, que dois-je faire ? Eh bien, les statistiques sont cotées est 500, le type de réponse est JSON. Je vais enregistrer l'erreur et ensuite je vais écrire Bach dans notre réponse que cela s'est produit. Donc, de cette façon, nous pouvons réellement en toute sécurité et en toute confiance, après avoir fait cela, supprimer toutes les autres captures d'essai de n'importe où ailleurs dans le code. Parce qu'une fois de plus, ces captures d'essai étaient là pour s'assurer que nous gérons toutes les erreurs avec élégance, sont aussi gracieusement que possible. Donc maintenant que nous avons rendu global, vous voulez, vous pouvez faire juste ce que vous me voyez faire, et juste passer par et prendre toutes les prises de piste sur quantités que vous prévoyez d'exécuter. Allez-y et exécutez ça. Et ce que vous réalisez, c'est qu'à cause de cela, la suppression de cette dépendance sur la capture d'essai est partout dans chaque option. Lorsque vous développez et étendez votre fonctionnalité abs, votre look trimestriel beaucoup plus propre car alors vous et votre équipe pouvez écrire le code sachant parfaitement que votre gestion des exceptions se déroule à une échelle mondiale. Donc j'ai fait ça avec le pays. Vous pouvez aller de l'avant et nettoyer le contrôleur de l'hôtel ainsi que le contrôleur NLL que vous pourriez avoir. 39. Mise en œuvre de version API: Hé les gars, bienvenue. Dans cette leçon, nous allons parler de la version de notre API, bien que la raison pour laquelle nous voudrions la version sont des API qui, au fil du temps, plus de fonctionnalités évolueront là où nous pouvons changer la façon dont nos endpoints se comportent, les gènes , certains verbes sont la façon dont la charge utile est structurée, toutes ces choses. Mais tu ne veux pas juste faire ça. Et puis tous vos clients un jour se réveillent et réalisent que je devrais changer toute votre base de code parce que vous avez implémenté un changement près de l'API. gestion des versions de l'API vous permet de courir en parallèle entre l'ancienne façon de faire les choses et la nouvelle façon de faire les choses. Et puis finalement, vous pouvez éliminer progressivement le point de pelouse que tous les clients ont. Bien sûr, après un avertissement et une éducation adéquats, notre propre norme de facto que vous introduisez. Donc retinal veut parler de gestion des versions et notre voyage va commencer ici, dans le nouveau get, où nous allons obtenir que Microsoft est dans les bibliothèques de gestion des versions MVC. Ils peuvent aller de l'avant et chercher cela et l'installer. Et puis une fois que vous avez fait cela, nous allons aller avec les extensions de service et nous allons ajouter une nouvelle fonction. Et nous appelons celui-ci configure versioning. Bien sûr, tu sais, tu peux appeler ça comme tu es à l'aise. Mais en ce moment, nous l'appelons configure versioning. Et puis à l'intérieur de cette fonction, nous allons avoir une odeur de code à l', donc nous voyons des services, API versioning. Et puis nous allons inclure une option d'initialisation où nous voyons une version de l'API de rapport, vrai rapport SWOT il déviations signifie qu'il y aurait un en-tête dans notre réponse est de voir ceci est la version que vous utilisez. Donc, lorsque nos clients parlent à l'API, nous allons voir dans la réponse, oui, vous devriez juste chauffer cette version API. Nous allons supposer la version par défaut lorsqu'elle n'est pas spécifiée. Donc, si nous avons 123 versions d'API et le champ client pour spécifier qu'ils veulent utiliser la version 13, etcetera. Ensuite, nous allons juste utiliser un par défaut que nous avons allé de l'avant et spécifié ci-dessous. Nous avons dit que la version par défaut de l'API sera la version 1 de l'API. Ainsi, vous pouvez aller de l'avant et en 2D tout manquant ou par exemple, comme d'habitude. Et puis après que vous avez fait tout cela, nous pouvons aller à la startup et nous pouvons enregistrer les services du système d'exploitation. Donc je vais juste mettre celui-là en bas. D' accord. Maintenant, ce que nous allons faire est de créer un nouveau contrôleur. Donc je vais juste aller à Add. Le contrôleur choisira une API et je vais juste la laisser vide. Et puis, par exemple, je vais appeler ce pays des cygnes v2. D'accord ? Donc, le contrôleur V2 pays. Nous avons donc un nouveau contrôleur. Et je vais juste l'initialiser avec certaines choses du contrôleur de pays d'origine. Donc je vais juste copier toutes ces choses. Donc, je suis juste, je veux juste un point de terminaison juste à des fins de test. Donc, le seul point de terminaison que nous traitons sera d'obtenir alors allez-y et incluez toute référence manquante. En fait, je vais changer la façon dont celui-ci accède aux données. Donc, au lieu d'utiliser l'unité de travail, je vais la laisser implémenter le contexte DB directement. Donc, ça l'est. Contexte de base de données Alors, bien sûr, rappelez-vous que c'est, c'est tabou. Vous ne voulez pas vraiment faire cela pendant que cela fonctionnera, n' est pas la meilleure pratique de demander à l'APA de regarder directement les données. Mais pour cet exemple, je vais juste le faire pour que nous ayons un type de retour différent entre les deux contrôleurs. Donc, je vais juste aller de l'avant et initialiser ça aussi vite que possible. Et puis une fois que cela est fait, une fois que cela est injecté, et ceci est votre contrôleur V deux. D' accord ? Donc, nous pouvons spécifier l'itinéraire ici pour être la même chose que l'origine. Je vais évoquer le contrôle parce que rappelez-vous qu'ils iront au contrôleur de Khan, non ? Donc, ce serait le pays de slash api. Cependant, ce serait par défaut le pays de slash api V2. Mais si je disais que je ne veux pas du nom du contrôleur. Je voulais être le même point de terminaison. Maintenant, si c'est le même point de terminaison, par défaut, l'API ne saura pas où aller car elle va voir celui-ci avec la racine et voir celui-ci avec la même route et elle ne saurait pas où aller. Maintenant, ce que je peux faire est de spécifier que celle-ci est une version de l'API, puis de spécifier que celle-ci est 2. Très bien, ça devrait être une chaîne. Donc, la version 2 de l'API, ce qui se passerait cependant, c'est que le client devra spécifier quel point de terminaison il espère chauffer. D' accord, donc je vais juste la faire et nettoyer ça, mettre sur soumettre des paramètres de demande dans cette situation. Et je nettoie le reste. Donc je ne voulais pas t'ennuyer avec mon nettoyage, mais c'est tout ce qu'on fait. On voit juste des pays obtenir. Et il va retourner des contextes points pays, ce qui va juste obtenir la liste des trempes dans la base de données et le retourner. Très bien, donc le type de retour ici sera différent du type de retour dto de notre point de terminaison d'origine. D' accord, alors prenons ça pour un essai routier et voyons comment ça marche. Maintenant, si vous vous souvenez dans notre configuration, nous avions dit que nous devrions assumer la version par défaut lorsqu'elle n'est pas spécifiée. Donc, ce que nous avons fait ici était juste de répéter le même appel que la roue est due à nos points de terminaison. Vous venez de dire API Slash pays. Et nous allons chercher Maco, celui de notre pays. Mais alors non, si vous regardez dans la section d'en-tête, vous verrez que l'API a pris en charge les versions 1 Do Recall que notre configuration aurait défini 1 comme notre valeur par défaut. Très bien, donc cela fonctionne dans, réalise qu'il y a des versions sur elle retourne le jeu de résultats à partir du jeu par défaut. Savoir comment faire en sorte que notre client sache comment spécifier la version qu'il veut ? Il y a plusieurs façons de le faire. Numéro un, nous pouvons demander par une chaîne de requête afin que nous puissions voir si vous voulez que l'autre que vous passez dans une chaîne de requête sont via param. Mettons-le juste dans la version param APA tiret. Et puis on en verrait 2. Et puis ils envoient, vous verrez que nous récupérons un 200 OK, et la version de soutien est 2. Laissez-moi donc mettre ceci dans un contexte un peu plus pour que nous puissions le visualiser. Nous savons donc que nous avons deux contrôleurs. Avoir contrôleur Quadrature v deux, qui a la même racine que les originaux. Je voulais mettre des points d'arrêt à leurs fonctions respectives. Et puis nous allons voir lequel reçoit de la chaleur pour être estan qui demande. Donc, je vais juste répéter la demande pour la version 2. Et puis quand Visual Studio allume le savon, vous voyez qu'il frappe le nouveau contrôleur que nous avons configuré en utilisant le même point de fin, sauf que nous passons dans la chaîne de requête que nous voulons la version deux. D' accord, donc je peux continuer, il frappe la base de données et il retourne les données en conséquence, et c'est bon. Mais alors si je n'inclut pas le param et que je fais les mêmes requêtes, remarquez qu'il frappe nos origines. Alors c'est tout. Nous pouvons donc avoir plus d'un contrôleur avec la même route, sauf qu'il existe différentes versions. C' est donc un moyen rapide pour le client de spécifier que je veux la version deux. S' ils ne précisent pas, alors nous allons les envoyer à la version sur un. Maintenant une autre façon de faire ça, et je vais juste arrêter ça maintenant. Une autre façon que nous pouvons spécifier lequel est quelle version sont faibles. Le client spécifie quelle version ils veulent est de modifier la racine. Donc, je peux vraiment super imposer ici entre le mot API et le nom du point de terminaison. Et voyez que je veux que vous passiez en v deux-points et la version de l'API. D' accord ? Donc, quand nous faisons cela et qu'ils sont allumés, je vais modifier en quelque sorte le point de terminaison ou les quêtes d'origine. Donc, au départ, nous avions une barre oblique API, une barre oblique pays. Nous mettons dans la chaîne de requête pour obtenir la version 2, mais alors non, je modifie la racine, donc je devrais être capable de le voir pointer ou juste ici dans l'URL, n'est-ce pas ? Donc, les API slash 2 slash pays. Et est-ce que j'ai encore le point d'arrêt CSI dual ? Voyons si elle est touchée et qu'elle est touchée. Donc, vous voyez que c'est une autre façon que le client peut spécifier la version de l'API qu'il veut et les points de terminaison. Donc, la version 2.0. Ils spécifient 2 afin qu'il chauffe les points de terminaison appropriés. Non, il pourrait y avoir une situation où vous ne voulez pas nécessairement augmenter l'URL parce que maintenant tout ce que nous avons à augmenter notre, nous forçons les clients à changer leurs URL BS, d'accord, donc ils doivent voir le barre oblique api barre oblique 2 point de terminaison ou s'adapter à Boston en tant que chaîne de requête. Donc une autre façon que nous pouvons faire fonctionner le versioning et laissez-moi juste arrêter le bogue est d'ajouter une extension de service déchiré de configuration pour le versioning, où nous voyons la version de l'API point ou l'une ou l'autre. Et si on regarde un peu ce que ça fait pour le voir. Il est utilisé pour lire le service API lorsqu'il est spécifié par les clients. Très bien, alors nous pouvons voir dans le nouveau lecteur de version de l'API d'en-tête. Alors qu'est-ce que c'est, un bateau, la demande que nous voulons lire, n'est-ce pas ? Donc, nous voulons le lecteur de version de l'API d'en-tête et nous cherchons un en-tête par le nom de la version de l'API. Donc, cela nous permettra d'un, non seulement garder nos racines comme nous l'avions auparavant, mais permettre au client d'ajouter simplement un en-tête au lieu d'avoir à changer leur URL entière. Essayons donc celle-là. Donc, buccskin facteur, je vais juste supprimer le 2.0. de notre URL. Et puis ce que je vais faire est de spécifier dans les sections d'en-tête que vous avez la version de tableau de bord de l'API fait hétérocyclique. Donc c'est un nouvel en-tête que je voulais passer au-dessus de 2.2. Et puis quand je l'envoie, nous avons atteint notre point d'arrêt dans notre version 2.0. contrôleur. Très bien, donc plusieurs façons d'avoir des personnalités de téléphone différentes ou des méthodes différentes de faire les choses au lieu d'introduire trop de changements de rupture dans la base de code à laquelle tout le monde est déjà abonné, vous pouvez mettre en phase un nouveau et simplement l'appeler version, cette version que, et les faire passer dans l'en-tête pour la version appropriée si nécessaire. Aucune autre chose que je vais vous montrer sur ce sujet est comment vous pouvez spécifier que quelque chose est obsolète. Donc, dans le calme maintenant et je vais juste continuer à utiliser celui-ci parce que c'est de l'expérience. Disons qu'un verset sur l'outil à trois points. Donc aucune version 2 n'est obsolète ou ce n'est plus la version préférée. Donc, vous pouvez réellement ajouter à l'annotation ici que la valeur obsolète de cette version de l'API est vraie. Donc, ce qui se passerait, c'est que quand il envoie l'en-tête travers pour notre réponse et nous pouvons tester cela ici. Donc, c'était une requête précédente, donc je vais exécuter d'autres requêtes, appuyer sur le point d'arrêt, continuer, mais ensuite regarder. Il s'agit de la version 2 obsolète de l'API. Donc non, il ne dit plus, oh, vous chauffez la version API est de vous faire savoir que celle-ci n'est plus la préférée. D' accord, c'est probablement la fin de la vie, peu importe ce que c'est. Donc, ce sont des moyens que vous pouvez réellement implémenter le contrôle de versions dans votre API pour aider à contrôler les frais HALL VOUS dans vos modifications au fur et à mesure. 40. Mise en œuvre: Hé les gars, bienvenue. Dans cette leçon, nous explorerons l'implémentation de la mise en cache sur notre API. Maintenant, la mise en cache peut améliorer considérablement les performances de l'API. Il suffit de penser quand nous avons des centaines, peut-être des milliers de clients qui s'abonnent à l'API, ils essaient tous de trouver tout dit dit pays et probablement même les deux en même temps. Et je peux vraiment prendre un péage sur les performances de l'API en fonction de l'ensemble de l'infrastructure et un pied, je dois frapper la base de données à chaque demande. Ainsi, la mise en cache introduira une sorte de couche d'accès rapide au-dessus du magasin de données réel. Et cela réduira considérablement la fréquence à laquelle nous devons tirer la base de données. Donc, ce que nous allons implémenter est une mise en cache. Nous chercherions à mettre en œuvre une expérience d'expert sur le mécanisme pour réduire l'ensemble, souvent nous devons aller à la base de données. Nous envisagerions de mettre en place un mécanisme de validation pour réduire la bande passante du réseau. Et à la fin de cette leçon, nous voulons juste une idée globale de la mise en cache, pourquoi nous l'avons et comment elle peut être implémentée. Maintenant, il y a trois types de mise en cache et je voulais juste vous donner les gars et c'est un craint avant d'entrer dans toute la question du code. Ainsi, le cache client vit sur le navigateur. Donc, c'est un cache privé parce que c'est, vous savez, vous avez besoin d'un seul client ARN particulier. Très bien, nous avons le cache de passerelle qui vit sur le serveur et est un cache partagé. Donc, les déploiements de passerelle, je suppose, et tous les clients qui atteignent la passerelle ou à n'importe quel moment dans le temps chaufferaient cet argent. Et ils, nous avons notre cache proxy, qui est également un cache partagé. Qu' est-ce qu'il ne vit pas sur le serveur, il vit dans le réseau. Pour commencer la mise en cache ou la ressource, c'est assez simple. Ce que nous devons faire est d'ajouter les attributs du cache de réponse et de définir la durée de vie du cache. Quatre, à droite, donc sur n'importe quel contrôle, sur n'importe quel point final. Et je vais commencer par les pays. Tu sais, on ferait juste des expériences entre ces deux-là. Donc, je vais juste ajouter l'attribut qui dit cache de réponse. Et puis la durée est égale à 60. Donc 60 signifie si Barnes. D' accord, donc on met en place le contrôle du cache avec un âge maximum de 60 secondes. Si vous regardez la durée, vous voyez cela définit l'âge maximal dans l'en-tête de contrôle du cache. Donc, quand un client interroge Nieto à partir du point de terminaison, il y aura un en-tête inclus qui dit que c'est la durée de vie de l'argent que vous obtenez sont des données mises en cache que vous n'êtes pas bon. Alors passons en mode débogage et effectuons un test rapide. Dans le modèle post, ce que vous voulez faire est juste de vous assurer que votre option d'en-tête sans cache montée est désactivée. Donc, vous pouvez faire est d'aller dans Paramètres de fichier et sous Général ne regarde avec impatience que assis se rencontre ou il est éteint. Sinon, vous pouvez continuer. Donc, nous savons déjà que nous pouvons regarder tous les en-têtes revenir. Et je vais envoyer. Et quand nous obtenons la réponse, nous voyons que notre en-tête de contrôle de cache remonte et qu'il a l'âge maximum de 60 ans. Bon, maintenant c'est vraiment juste l'en-tête, donc nous ne changeons rien pour l'instant. Cela permet simplement au client de savoir que pendant que les données sont mises en cache, ce qui est bien sûr nous avons réellement besoin de mettre en cache les données. Nous allons donc devoir modifier certaines de nos configurations dans notre startup, c'est là que j'ai commencé. Donc, dans notre point de démarrage cs, nous allons ajouter ce nouvel enregistrement de service dans la fonction configure services. Et que je vais juste mettre du pain ici. Ainsi, les services qui ajoutent la mise en cache des réponses. Et puis après cela, nous devons enregistrer notre middleware, ce que je ferai juste au-dessus du middleware de routage qui dit app.use mise en cache de réponse. Donc, vous pouvez juste aller de l'avant et ajouter ces deux lignes. Et ce qu'on va faire, c'est en faire dix autres. Et quand je lance cette requête, nous voyons un nouvel en-tête. Et celui-ci indique le nombre de secondes pendant lesquelles l'objet a été dans un cache proxy. D' accord, donc on a juste pensé bulle sur les différents types de mise en cache. Donc nulle part implémenter notre cache proxy et voir la valeur ici est neuf. Donc si j'en gagne un autre et que vous voyez que c'est nul 32 secondes avant l'âge maximum de 6 ans. Donc, à peu près dans la vie, si nous continuons à tirer, il, continuera à obtenir une valeur différente pour l'ID. Donc quand je fais ça, vous voyez que l'âge a disparu parce qu'on a dépassé le sol de 60 secondes où je suis allé à la base de données cette fois, suis revenu et il n'y a pas d'âge. Mais si je le tire encore, maintenant ça me dit que c'est bon, il a dix secondes. Il a 14 secondes, et cetera. C' est NORM.DIST va revenir à mon départ très rapidement et nous allons explorer tout le week-end probablement inter implements, désolé, un plus global valide parce que juste savoir, je devrais s'asseoir cela manuellement sur chaque option ou chaque point de terminaison. Et puis si nous changeons de 60 à 120 pour dénoter de passer par chacun. Donc, ce que nous pouvons faire au démarrage est ajouté à la configuration pour ajouter le contrôleur. Donc je vais juste mettre mon expression lambda. Le Tolkien et web R0 et d'autres mettant les accolades provoqueront, vous savez, si nous avons plus d'une ligne à configurer, cela le rend plus facile. Eh bien, ce que je vais ajouter est une configuration pour voir les profils de trésorerie point ajouter. Et nous voulons la durée de 120 secondes. Donc, ici, nous pouvons en quelque sorte définir le profil de trésorerie, que nous pouvons ensuite utiliser et réutiliser tout au long. Alors j'ai besoin, laissez-moi voir ce qu'il me faut ici. J' ai besoin d'un point-virgule à la fin. D' accord, on y va. Donc config dot profils cash dot add. Nous lui donnons n'importe quel nom, vous savez, dans la raison. Et puis la nouvelle durée du profil de trésorerie. Et vous pouvez ajouter d'autres propriétés au verbe d'emplacement de profil un en-tête Ionia, trop compliqué. Mais ce que nous savons est au lieu de spécifier la durée ici dans cet en-tête. Je peux voir le profil, eh bien, mon Dieu, le nom du profil est égal à et ensuite nous mettons ce nom que nous venons de spécifier dans cette fente. Donc, si vous vouliez aller de l'avant et le tester, je ne vais pas le tester à nouveau parce que nous avons déjà le juste hors des en-têtes revenir sur l'âge. Donc non, nous l'avons porté à l'Indien n'importe quel point final où nous voulons avoir cet argent. Et plus que probablement vous voudriez parler de ceux qui lisent. Les profils get seraient ceux qui ont ce profil de mise en cache. Vous n'auriez pas nécessairement besoin de cela sur les opérations de création et d'autres. Bon, alors parlons d'une situation où nos données pourraient devenir périmées. Donc, comme je l'ai dit, avec l'argent, il faut comme une copie rapide de la couche de données et il retourne ces données aussi longtemps que nous lui avons dit de le faire. Donc dans ce cas, c'est deux minutes. Allons ça jusqu'à dix minutes. Et puis la première fois que le client essaie d'obtenir des données, alors il va tricher et dans, obtenir une version mise en cache après. Mais que se passe-t-il si cinq minutes dix minutes ou deux minutes après cette période de dix minutes, une mise à jour s'est réellement produite. Donc un nouveau pays s'est ajouté, non ? Et puis ils reçoivent toujours des données périmées tant que les caches sont en direct. Donc on ne veut pas ça. Nous ne voulons pas cela lorsque, lorsque les données changent en dessous, elles obtiennent toujours de vieilles données. Donc, pour ajouter à cela est une validation. Très bien, donc pour faire une validation ou ajouter des en-têtes pour la validation et l'expérience sur les vérifications, nous allons inclure une nouvelle bibliothèque. Et ce sera cette bibliothèque appelée en-têtes de cache de points Marvin. Très bien, tout comme la vitesse sur un middleware de base qui ajoute des en-têtes de cache HTTP aux réponses. Et vous voyez les différents en-têtes que cache-control expire, etag et Last-Modified. Très bien, donc il implémente le cache, l'expiration et la validation. Donc, vous pouvez aller de l'avant et obtenir ça. Et je vais refactoriser ou quart de bit. Donc, dans les extensions de service sur quand ajouter une nouvelle fonction, où nous voyons statique public, void configure HTTP en-têtes et nous connaissons le patron de forage dans la collection de services. Et puis je prends cette première ligne que nous avons ajouté des services point ajouter une réponse jaillissant ainsi que les services dot ajouter des en-têtes de cache HTTP. Donc on prend ces deux-là. Et puis ce que nous allons faire est juste et je fais référence au démarrage, donc où j'avais l'original Et je vais juste ajouter une référence à cette fonction qui va initialiser ces deux appels de service droit ? Après cette modification, nous allons ajouter le middleware. Donc, après la mise en cache de la réponse américaine sur quand ajouter point, utilisez les en-têtes de cache HTTP. Et avant de faire des modifications, juste pour nous assurer que tout va bien, nous allons juste faire un test rapide et nous allons envoyer une nouvelle demande. Et quand nous regardons la liste des en-têtes qui reviennent de ces demandes, regardez expire Last Modified, nous avons un ETag. Identifie une version de ressource spécifique. Donc, c'est juste comme un petit hachage qui dit que c'est la version du détail obtient très et autres choses. Donc on voit que nous récupérons de nouveaux en-têtes en cours de route, n'est-ce pas ? Vous remarquerez également que l'âge maximum est en quelque sorte remonté à 60 ans. Donc oui, il était 12V set en 12 en, mais il est monté à 60. Nous allons donc explorer comment nous pouvons personnaliser cet âge maximum. Et la façon dont nous allons le faire est de revenir à nos extensions de service et d'ajouter le code suivant sur le point de services, ajouter des en-têtes de cache HTTP. Donc nous allons définir un Tolkien, appeler expérience sur Opsin lambda flèche. Et nous allons dire l'expérience sur l'option max, 65120 ans, peu importe ce que nous voulons, nous pouvons voir l'expérience sur l'emplacement du cache upshot. Nous voulons que ce soit privé ou que ce soit un sermon public, mais j'ai vu public ou privé. Disons qu'on le voulait privé. Et puis l'option de validation, vous voyez la plupart revalidation est vrai, ce qui signifie qu'une fois que les bêtas changent, nous devons passer par ce processus. Je reçois non après avoir fait ces modifications, nous pouvons effectivement supprimer l'en-tête de la ressource. Bon, alors faisons juste un test de plus. Et nous verrons que la modification est en fait globale. Bien, donc même sans mettre la ressource R, désolé, l'attribut juste au-dessus de la ressource, nous voyons que nous obtenons toujours les mêmes en-têtes et je suis juste parti et ils vivent dans toute la vie de la 1-20. D' accord, donc la prochaine chose que je veux te montrer, ce sont les bio. Les choses que je voulais vous montrer seraient les attributs personnalisés que vous pouvez réellement ajouter juste au-dessus du point de terminaison potentiel que vous voulez un paramètre différent pour nous. Donc oui, nous avons dit la séance globale dans le démarrage ou désolé, dans la configuration du service. Mais puis sur le point de terminaison, vous pouvez réellement remplacer cela. Vous pouvez donc simplement ajouter ces références manquantes. Donc cache HTTP, expiration et AUC Yolanda emplacement différent. Vous voulez que ce soit public et celui-ci devrait avoir 60 ans. Vous pouvez réellement remplacer les paramètres globaux ici. Et puis vous pouvez dire à celui-ci qu'il n'a pas besoin de revalider. Donc, revenant juste aux en-têtes à venir mais sachez que nous avons implémenté la mise en cache juste pour les parcourir une fois de plus, ce remorqueur représente en fait l'unique, comme je haché unique pour dire que c'est la version des données que UIC. Si, si dans la durée de vie du cache, quelque chose change, alors cette balise va réellement changer et alors vous obtiendrez une nouvelle balise. Mais aussi longtemps que la banque de données ne change pas, ce que nous faisons est juste de la mettre en cache afin que nous n'ayons pas à frapper la base de données pour obtenir les mêmes données à chaque fois que quelqu'un le veut. C' est au moins deux minutes si on en a une, ce sont des demandes. Nous n'avons pas nécessairement besoin d'aller à la base de données pour la carte SIM ou les données. C' est donc l'avantage d'ajouter la mise en cache à votre API. Bien sûr, au cas par cas, vous pouvez personnaliser la façon dont des points de terminaison particuliers servent les données par rapport à d'autres. Vous pouvez également ne pas avoir besoin de la mise en cache basée sur l'application ou il peut ne pas convenir au type d'opération pour laquelle vous fournissez l'API. Donc c'est juste une autre chose que je pense qu'il est bon pour vous de savoir et vous pouvez l'utiliser, avoir dans votre arsenal pour quand nécessaire. 41. Limites du taux et poussée: Hé les gars, bienvenue. Dans cette leçon, nous allons parler de la limitation des taux. Maintenant, la limitation des taux ou la limitation comme on l'appelle aussi, est une technique par laquelle nous imposons certaines limites à l'ensemble. Souvent, quelqu'un peut atteindre notre point de terminaison et obtenir ma bêta. Donc, bien sûr, si quelqu'un vient et bombarde le point de terminaison autant que nous avons la mise en cache et toutes ces choses. Le fait est que le point de terminaison est en fait prouvé à un déni de service ou à une attaque DDoS. Et ce que nous voulons faire est de mettre un mécanisme dans lequel quand nous détectons trop de requêtes d'une source, nous pouvons en quelque sorte les bloquer et dire, hé, ici, en faire trop. dehors de l'attaque DDoS potentielle, il nous aide en fait à sorte de compteur OMS souvent n'importe quel client accède aux données et à de nombreuses API très populaires ou leur Google. Et je vais juste dire Google, mais tous ces grands joueurs avec des API et des SDK, ils ont tous une certaine forme de limitation. Si vous lisez les exigences et les conditions d'utilisation de leurs API, ils ont quelque chose à voir que vous pouvez demander peut être 100 par Minitaur, 100 par heure de choses échelle. Donc, aujourd'hui, nous allons le configurer dans notre API juste pour avoir une idée de la façon dont cela est fait. Et nous allons utiliser la bibliothèque est Speed.net Core limites de taux. Donc, nous pouvons juste aller de l'avant et installer ça. Et une fois qu'il est installé, la prochaine chose que nous voulons faire est de passer à une startup et alo ou une application pour utiliser le cache de mémoire car il va utiliser le cache de mémoire pour une sorte de magasin et de garder une trace de qui a demandé Watts et combien de fois ils l'ont demandé dans le timing, non ? Donc, encore une fois, ils diront les services qui ajoutent du cache de mémoire juste là dans le fonctionnement des services de configuration. Ensuite, nous avons quelques modifications apportées à l'extension de service. J' ai donc déjà la citation ici. Et cette méthode est appelée limitation de taux de configuration. Et nous savons déjà que la collection de services et ce que nous faisons ici est de mettre en place un ensemble de règles afin que vous puissiez simplement aller de l'avant et copier le code et inclure les références manquantes au fur et à mesure. Donc vari, les règles de limitation sont égales à une nouvelle liste, vraiment limites règles. Ils peuvent avoir plusieurs règles. Nous devons donc initialiser un nouvel objet de règle qui nous permet de spécifier les points de terminaison particuliers. Ou dans ce cas, je vois Star, qui signifie que chaque point de terminaison va adhérer à cette règle. Donc, basé sur cette structure, je peux en fait avoir plusieurs racines. Je peux dire virgule et faire une nouvelle règle. Ok, laisse-moi juste copier et coller. Je peux faire une nouvelle règle, spécifie un point de terminaison particulier, puis changer les limites. Donc celui-ci est que vous êtes limité à un appel par seconde. D' accord ? C' est un peu court. On peut dire dix secondes, un appel toutes les dix secondes. Je peux voir un appel toutes les dix minutes ou 100 parce que c'est à toi de décider. Vous pouvez le configurer une fois de plus, si vous avez des règles différentes par point de terminaison, vous pouvez ajouter ces règles et spécifier les points de terminaison particuliers auxquels elles s'appliquent. ce moment, je vais juste m'asseoir sur une règle globale. Donc je vais juste dire tous les points de fin et je vais le mettre à quelque chose qui est très petit pour qu'on puisse le voir dans les tests, non ? Donc je vais voir dans les cinq secondes que vous n'avez droit qu'à un seul appel sur n'importe quel point final. Ensuite, nous allons de l'avant et nous disons les services dot configure. Je vais mettre dans les options de limite de lecture IP et nous disons simplement des options, pas des règles générales égalent les règles de limite de taux que nous venons de définir. En dehors de cela, nous devons ajouter ces services singleton sous la forme de magasin de limite tarifaire I. Et cela va être associé au magasin de compteur de limite de mémoire cache. Donc, tous ce ne sont que des bits de code dont j'ai besoin pour soutenir la bibliothèque que nous importons ceci. Donc, une bibliothèque différente pourrait l'implémenter différemment. Mais c'est le code requis pour cette bibliothèque particulière, disons Candace, appuyez sur pause, écrivez-les. À ce stade, intellisense, nous allons les remplir parce que vous êtes l'un des paquets. Maintenant après mot ne pas les extensions en service vont juste se retourner pour démarrer et nous allons ajouter ces deux lignes, les services dot le configurer limitant, services dot le configurer limitant, qui est la méthode que nous venons de configurer et les services qui ajoutent HTTP accesseur de contexte. Cela nous donne donc accès au contrôleur réel et à son fonctionnement interne si nécessaire. Et enfin, nous allons ajouter le middleware où le routage de l'éthanol. Donc je vais mettre vos annonces sur n'importe quelle mise en cache. Nous avons app.use IP pressé limite et bien sûr inclure toutes les références manquantes. Maintenant, il y a eu différents codes de réponse utilisés lorsqu'ils répondent pour voir trop de demandes. Dans les temps plus récents, 429 a été utilisé, ce qui signifie littéralement trop de demandes dans le passé, plates-formes témoins utilisant pour 20, lesplates-formes témoins utilisant pour 20, ce qui signifie améliorer ici com et d'autres. Alors testons ça. Jusqu' à présent pays, je vais frapper envoyer. Et si nous observons les en-têtes, nous verrons que nous obtenons environ trois nouveaux en-têtes, X3, il limite les rayons X, il est resté limiteur sens et limite de réinitialisation, non ? Donc ça vous montre que la limite est de cinq secondes. Vous n'avez plus, ce qui signifie pour une fenêtre de 5 secondes et la réinitialisation va être à ce moment timbres. Donc, si je frappe plusieurs fois, d'accord, je vais utiliser un point de terminaison différent parce que je pense que celui-ci est prédit par la mise en cache. Donc, il pourrait ne pas, en fonction de ma configuration de mise en cache, cela ne va pas violer l'accélérateur. Bon, donc je vais utiliser l'hôtel parce que rappelez-vous que nous avons installé toutes ces choses sur le pays et les points. Laisse-moi aller à l'hôtel, que je ne les ai pas lu modifier autant. Donc, envoie déjà une requête et il me montre les mêmes en-têtes, limites, etcetera, etcetera, fs et un autre, ce qui se déroule comme des lignes plus tard. C' est bon si j'en envoie une autre, trop de requêtes, d'accord, donc il dit réessayer après avoir vu envoyer une autre requête après 1 seconde, donc rien n'est revenu, mais le quota d'appels d'API de message dépassé un maximum admis par cinq secondes, non ? Donc ça me fait savoir que je dois essayer un dollar dans ce laps de temps. Et quand je le ferai, on y va. Si je réessaie, réessayez après quatre secondes, réessayez. Et si je continue à le faire à la place, adopter Valley continue de changer par rapport au nombre de secondes que j'ai basées sur la dernière requête. C' est ainsi que nous pouvons ajouter de la limitation. Et il donne automatiquement une fois de plus, mais que pour 29 dire trop de demandes. Très bien, et ce message, donc le client sait que, hé, vous bombardez l'APA. Améliorer entendre le calme. 42. Référencer et ajouter des modifications à GitHub: Tous les bons gars. Alors, où c'est un autre jalon où nous allons juste passer revue les choses que nous avons mises en œuvre dans cette section. Et puis les changements de guitare ont tendance à GitHub. Donc aller par ordre de faute, nous avons fait le premier serait la pagination. Nous avons donc mis en œuvre le pincement où nous avons passé certains paramètres de requête dans nos pays get. Et nous sommes également allés de l'avant et avons défini des valeurs par défaut pour dire que si elles n'en fournissent pas, alors nous allons fournir autant d'informations à l'avance. Sinon, nous donnons au client la possibilité de dire qu'il veut autant d'enregistrements à partir de ce point. Il est présenté par le nombre ainsi que le pH, n'est-ce pas ? C' est donc une chose que nous avons implémentée. Nous avons également implémenté la gestion globale des erreurs, ce qui nous permet de créer ou d'écrire notre code sans avoir besoin de trop de captures d'essai. Et il vient un peu plus propre qu'avant, étaient à chaque fois que nous voyons try-catch, try-catch. D'accord. Une autre chose que nous avons fait était d'implémenter le contrôle de version sur notre API. Nous avons donc créé cette controverse au contrôleur juste à des fins expérimentales, où nous spécifions la version de l'API et nous avons exploré comment nous pouvons permettre au client de spécifier quelle version de l'API il est qu'il veut. Et je pense que le dernier bit de configuration aurait leur positon comme en-tête. Très bien, donc dans nos services étendus, nous avons mis en réserve la gestion des exceptions et la gestion globale des exceptions pour dire, vous savez, quand il y a une flèche enregistrée et revenir avec ce 500 pour le versionnage, nous avons dit que nous voulons mettre en œuvre la gestion des versions. En lisant à partir de l'en-tête transmis avec la requête, nous spécifions la version de l'API par défaut à 1. Donc, si l'argent est spécifié, alors c'est 1. Nous avons également examiné l'implémentation de la mise en cache. Nous pouvons donc simplement fournir les données pendant un certain temps avant de devoir extraire la base de données pour la prochaine demande. Et nous avons également mis en validation pour nous assurer qu'une fois les données sous-jacentes changées, le type de données se rafraîchit au Cachemire. Et enfin, mais en aucun cas, qui a mis dans la limitation à une sorte de contrôle combien de fois un client particulier basé sur l'adresse IP, au moins basé sur la façon dont nous avons configuré, il, peut atteindre un point de terminaison particulier. Donc, sachez que la limite est très petite, la période est petite, mais c'est juste pour notre but expérimental dans une situation réelle, probablement vous pouvez regarder d'autres fournisseurs comme Google et ainsi de suite. Et si votre infrastructure est assez robuste, vous pouvez utiliser leur, leurs valeurs pour vous informer sur la façon dont vous pouvez mettre dans la limitation Qu'est-ce que je laisse ces valeurs d'exemple donc, non. Et ce que nous voulons faire, c'est nous enregistrer pour savoir que nous allons juste chercher des changements. Et puis nous avons mis dans notre message. Et c'est mon message. Donc, quand je fais ce check-in, allez-y et s'engager et couler. Donc tout ce qui est fait ici. Et rappelez-vous que dans les exemples, je l'aurais fait à un endroit et vous encourage à l'essayer à l'autre endroit. Mais alors vous pouvez toujours vérifier le code source et double-vérifier et comparer les notes. Et une fois que tout cela aura été fait, nous sommes prêts à passer à notre prochain sujet. 43. Modifications d'architecture - Aperçu des sections: Hé les gars, bienvenue. Nous avons fait un peu pour développer notre AICPA jusqu'ici. Et oui, nous avons un produit de travail TSV ont un tas de fonctionnalités qui nous aident à apporter des expériences à valeur ajoutée lorsque les gens interagissent avec notre API. Beaucoup dans cette section, nous voulons discuter de certaines décisions architecturales que nous devons probablement prendre. Comme vous pouvez le voir ce que nous avons travaillé et veut ses travaux. C' est un bon logiciel en termes de vous annoncé ces ensembles de fonctionnalités et il fournit ces ensembles de fonctionnalités. Cependant, il devient un peu plus compliqué à long terme où vous devez maintenir en nouveau voulu garder certaines choses séparées. Lorsque ce projet filles rétinol roue et ils ont ce que les tables d' outils et quelques dépôts sur les unités hors travail et c'est très bien. Mais alors que le projet pourrait se développer, parce que c'est la seule phase, que cela se développe, nous avons besoin de plus de données à stocker. Nous devons faire plus de choses. Le projet va être gonflé. Donc, en ce moment, ce que nous pratiquons, c'est ce qu'on appelle tout en une architecture. Où lorsque nous lançons un projet dans Visual Studio, comme vous le voyez, nous obtenons tout ce dont nous avons besoin sur l'application de travail tout dans un projet. Mais alors beaucoup de gens seraient probablement regarder ce dégelé et dire, eh bien, vous savez, tout est 1 Proteus et donc pas manquer la pratique. Et c'est vrai. Il y a des raisons philosophiques, ou du moins des raisons tangibles et pratiques que vous voudriez garder certaines choses séparées. Et puis cela apporte la meilleure pratique qui va par la séparation des noms des préoccupations. Donc oui, nous avons des dossiers dans la séparation des préoccupations dans une certaine mesure, mais je pense qu'il peut être affiné un peu plus. Donc, ce que nous allons faire dans cette section est d'extraire certains des éléments clés de l'API principale, un projet, et de créer des projets où ils vont analyser en direct par eux-mêmes. Donc, l'API ne sera que des choses liées à l'API, et elle fera simplement référence à d'autres projets qui ont comme choses liées aux données sont des choses liées à la logique métier. Bon, donc c'est ce qu'on va faire pour cette section. Alors traîne autour et on s'amuse tout en continuant. 44. Projet de données: Très bien, Donc notre premier changement de projet sera que les modèles de données ne le sont pas, donc nous allons créer un nouveau projet. Dans cette solution. On ne veut pas faire ça. Nous sommes en fait la solution aller à Ajouter. Et nous voulons un nouveau projet. Et ce projet va simplement être une bibliothèque de classe si vous l'avez sur le côté, c'est très bien. Si ce n'est pas le cas, vous pouvez toujours rechercher notre bibliothèque de cours. Et une fois que vous l'avez trouvé, nous voulons une bibliothèque de classe C-Sharp. Donc, nous sélectionnons ça et je vais appeler cette liste d'hôtel données points. Très bien, donc nous faisions comprendre que c'est le projet de données, CMV dans, dans, dans, dans la construction de tous ces grands projets ont plusieurs projets. Vous voudriez probablement que la couche d'application ait des points, MVC ou UI ou API. Mais ce n'est pas absolument nécessaire et nous avons déjà emprunté la voie de la motiver. Donc, c'est bien. Vous vouliez simplement vous assurer que nous représentons que ce nouveau projet est des données ponctuelles représentant qu'il s'agit de nos éléments de données et actifs. Donc avec ça fait, on peut frapper Next et on veut le garder à dotnet 5. D' accord, donc on aurait pu utiliser son standard, on aurait pu utiliser n'importe lequel de ces, mais alors tout est dotnet 5. Donc nous voulons nous assurer de rester dans dotnet 5. Alternativement, nous aurions pu utiliser standard là comme un pont entre les différentes versions dotnet Core. Dotnet cadre aussi, ce que dotnet cinq fonctionne parfaitement dans cette situation. Donc, nous avons juste appuyé sur Créer. Et une fois que nous avons cette bibliothèque de classes, nous obtenons ça avec le fichier de classe là-dedans. Maintenant, cette activité va nécessiter un peu de refactoring, ce qui est l'une des raisons pour lesquelles les gens ont tendance à le faire dès le premier jour pour éviter le processus de refactoring et tout ce qui doit arriver à ce sujet. Donc, vous verrez maintenant que nous avons un nouvel espace de noms, qui signifie que, eh bien, tout ce qui est dans le dossier de données est sûr car il va déjà avoir ces données point d'espace de noms seulement parce que c'est l'hôtel qui écoute et le dossier de données. Maintenant, avez un nouveau projet qui va avoir le même espace de noms, c'est bon. Donc, en fait, je peux juste prendre tous ces fichiers. Et je vais attraper, pas copier, mais attrapé et cliquer sur mon nouveau projet et je vais coller. Donc, dans ce morceau de cotinine est fini et je vais juste supprimer ce nazis de classe 1, je n'en ai pas besoin, non ? Lorsque cela est fait, vous verrez que toutes les références sont toujours là, mais nous obtenons des lignes rouges car avec l'utilisateur API, il n'y a pas de référence de bibliothèque qui indique ce qu'est l'utilisateur d'identité. Donc c'est une autre chose. Lorsque nous découvrons en plusieurs projets, nous devons nous assurer que nous représentons les différents éléments sont bibliothèques ou d'autres dont chaque composant peut dépendre. Donc, franchement, ce nouveau projet est inconscient de tout ce qui existait dans l'ancien et c'est très bien. Donc, si je saute aux contextes de base de données et que je lui donne quelques secondes, vous voyez qu'il commence à s'allumer avec toutes les erreurs des bibliothèques manquantes. Maintenant, moyen facile de contourner ces points de contrôle. Et puis je peux juste aller de l'avant et installer le paquet manquant. Donc, j'aurais besoin à la fois besoin de charge réelle. J' ai besoin d'une entité pour Entity Framework Core. Sachez que j'ai la version locale, qui dans mon cas est 5.02. Vous pourriez avoir une version différente. Je peux également trouver et installer, mais je vais juste m'en tenir à la version locale. Et on y va. Toutes ces erreurs ne sont pas résolues. Mais alors j'ai toujours ce problème ici avec le trou à écouter, configurations de points, pas les entités. Maintenant, ces configurations existent ici dans ce dossier, et ce sont vraiment des configurations d'entité. Et j'avais inclus l'initialiseur de mappeur dans cette configuration. Donc, ce que je vais faire est de couper le dossier des entités du dossier configurations, puis de descendre au projet de données. Cliquez sur Ajouter. Je vais ajouter un nouveau dossier de configurations. Et le fait est que nous utilisons ces fichiers de configuration uniquement pour l'ensemencement. La réalité est que ces configurations peuvent être utilisées pour tout ce que vous voulez être unique au sujet de cette entité lors de sa création. Eh bien, si j'y vais en profondeur, dans mon cours Entity Framework, mais je vais le garder assez léger pour celui-ci. Et dans ce dossier de configurations, je vais juste coller le dossier des entités que nous venons d'attraper. Donc maintenant, toutes nos configurations d'entité sont assis là où se trouvent les entités ou les modèles. Nous avons juste besoin de leur faire connaître leur nouvel espace de noms, qui est la liste d'hôtels, données de points, les configurations de points, les entités américaines. Donc nous n'en avons que quelques-uns. Je vais juste faire cette mise à jour manuellement. Dans un cas où vous en avez plus, vous voulez probablement faire comme notre contrôle, trouver et mettre à jour plus rapidement. Mais comme vous pouvez le voir, cela se passe tout à fait parfaitement à ce moment-là. Et puis dans la note de contexte de base de données pour résoudre cette instruction d'utilisation, je lui ai juste fait savoir que j'utilise l'hôtel est dans entités de configurations de données point et là nous allons, ces erreurs sont maintenant disparues. Donc, à ce stade, j'ai quelques autres domaines sur lesquels je vais juste cliquer pour voir ce qui se plaint d'autre au fur et à mesure que nous avançons. Donc les utilisateurs de l'EPA ne le font pas. Et un joli raccourci clavier lorsque vous voulez nettoyer ces fichiers, vous avez tous ces instructions inutiles à l'aide. Vous pouvez simplement faire la clé de contrôle et E comme un oeuf. Et vous voyez qu'il nettoie en quelque sorte les fichiers et supprime inutiles en utilisant des instructions. D' accord, alors laissez-moi juste cliquer à travers et voir ce qui est completable références manquantes. Très bien, donc non, Dans mon projet API, il se plaint qu'il ne trouve pas noms de données point et qu'il ne trouve pas le contexte de base de données, bien sûr. Donc, je peux supprimer ce dossier de données. Il n'est plus, plus comme une non-pertinence. Très bien. Que savez-vous l'ensemble du projet pour ces fichiers de données ? Donc, je peux laisser l'AICPA ennoblir le nouveau projet en allant aux dépendances, en ajoutant le projet pour référence, puis en cliquant sur les données de points de liste d'hôtel. Lorsque je clique sur OK, puis fais une construction. Vous verrez que j'ai une construction réussie avec les deux projets réussissant dans la construction, je n'ai plus d'erreurs. Et vous voyez que c'était une procédure agréable, assez simple. C' est toujours bon de faire ça, comme je l'ai dit, genre d'activités de refactorisation quand le projet est jeune. Mais je dirai que ce n'est pas que tu devrais toujours faire ça. Parfois, votre contexte détermine ce que vous devez faire. Donc, pour un très petit projet API, il n'aurait probablement pas besoin de diviser en 34 projets différents simplement parce que vous voulez que vos modèles soient séparés. Mais quand vous voyez que ce budget pourrait grandir et s'épanouir en quelque chose de plus que vous vouliez cette considération tôt. 45. Projet de base d'application: Très bien, nous avons donc réussi à séparer nos actifs liés aux données des projets d'application, et c'est bien jusqu'à présent. Bon, Maintenant, nous allons passer à la phase suivante de notre petite opération et ne pas vouloir faire est un peu mettre en place notre noyau d'application. Ce tuyau pourrait être comme une logique métier et toutes les configurations spécifiques à l'application. Il, il peut aller par beaucoup de noms différents. Donc le nom que je te donne ressemble plus à un Nim suggéré. Ce genre de suggère ce que la couche est un bateau ou le projet est un bateau. Mais je ne dis pas nécessairement que c'est ce qu'il faut appeler tout le temps. Donc, vous pouvez voir d'autres personnes avec des projets nommés de même nom avec divers actifs et fichiers de configuration y sont stockés, ainsi que peut-être la logique métier et les détails et toutes ces choses. Alors commençons par celle-là. Donc, je vais juste faire un clic droit sur la solution une fois de plus. Et nous allons ajouter un autre projet qui va être de nature similaire, une bibliothèque de classes. Et ça va s'appeler Hôtel liste des points. On peut l'appeler application. Le noyau appellerait ça le noyau. Je vais juste travailler avec core où je viens de l'appeler Total listing dot core. Cliquez sur Suivant. Et celui-ci va aussi être un projet dotnet cinq. Et cela crée, maintenant comme d'habitude, nous commençons avec le fichier de classe par défaut, que nous pouvons simplement aller de l'avant et supprimer. Maintenant en configuration pour core, je vais commencer par prendre tous les détails. Donc, tous les détails qui sont actuellement dans le projet de liste d'hôtels, je vais les mettre à l'intérieur du projet de base. Donc, je vais créer un dossier où mes détails vivront à partir de non. D' accord ? Et je vais couper toute cette avoine et les placer à l'intérieur. Donc, en fait, je ne les coupe pas tous. Et je vais te montrer pourquoi. Ce sont des détails et ce sont littéralement des modèles. Donc, tout ce qui est un détail signifiant qu'il ressemble la classe de données et nous en avions un certain nombre pour différentes raisons. Je vais vraiment les garder désolés, je vais les prendre spécifiquement. Donc, je ne prends pas d'erreur, je ne prends pas de requêtes param parce que celles-ci étaient un peu spécifiques au niveau de l'API, pas le pas que le niveau de BTo, n'est-ce pas ? Donc, je vais les couper et ensuite les coller dans le dossier de détails. Bien sûr, je suis allé réparer quelques références ici, donc non, mon espace de noms ici est la liste des hôtels. Des points. Il n'y a pas de points, noyau, désolé, points. Détails. Plus de modèles. C' est donc notre nouvel espace de noms pour plus de détails. Donc, il allait utiliser ce nouvel espace de noms sur tous. Donc ils savent tous où ils vivent. D'accord ? Et tout le monde devrait pouvoir voir tout le monde sait qu'ils sont tous dans le même espace de noms. Toutes ces zones devraient disparaître entre les fichiers. Et vous remarquerez que lorsque je copierai et collez, certaines choses s'ajoutent assez rapidement. J' ai donc activé une fonctionnalité dans Visual Studio. Si vous allez à Outils, Options, puis éditeur de texte, C-Sharp avancé, vous verrez une option ici qui dit Ajouter manquant en utilisant les directives sur p. Donc, lorsque vous coupez et BCR copier-coller le code lui-même sera en fait juste essayez et mettez toutes les instructions using qui pourraient être manquantes, n'est-ce pas ? Cela pourrait accélérer le processus de déplacement du code dans le futur. Donc maintenant que nous avons déplacé tous nos détails, si je fais une construction, je sais que je vais être dans un tas d'erreurs parce que tout ce qui s'est appuyé sur les détails ne sera plus nulle part les détails et c'est bien. Ça fait partie de l'autre facteur. Je veux également passer sur mon dossier de services, donc je vais juste copier ceci et le coller dans le noyau de l'application, n'est-ce pas ? Et puis une fois de plus, nous devons mettre à jour cet espace de noms. Donc celui-ci n'est pas une liste d'hôtel dot core, dot services. Ce serait la même chose pour son interface. Donc, nous pouvons simplement répondre à cette mise à jour rapidement. Maintenant, vous voyez toutes ces herbes parce qu'il ne sait pas où clôturer toutes ces options liées à l'identité sur ces configurations d'extension. Et certaines de ces bibliothèques ne sont tout simplement pas dans ce projet. Ce moment. Eh bien, avant de commencer à ajouter, ajouter, ajouter les références de projet, je veux juste passer sur tous les fichiers clés d'abord. Donc les prochains sont ceux qui seraient les trucs du dépôt. Donc je dépôt et dépôt. On peut les couper. Et basé ici. Et vous savez, à ce stade, certaines personnes seraient en fait simplement fusionner ces dossiers sont probablement juste avoir un dossier qui dit dépôt et puis là ont les deux interfaces et les contrats et les implémentations. Vous n'avez pas forcément à faire ça, c'est à vous de choisir. Mais je suis allé garder la structure des dossiers. Et cela va maintenant vivre point core I dépôt. Et ce que je vais faire, c'est copier cet hôtel, le core 100, s'il vous plaît. Toutes ces références à travers et à travers nos projets avec le nouvel espace de noms. Donc, à la fin de ce processus, tout le monde sait qu'ils ont une nouvelle maison. Mais encore une fois, certaines des références Predict sont toujours en attente pour une promenade. C' est très bien. On finira par y arriver. D' accord. Donc une autre chose que je vais vouloir déplacer est ce fichier CSS d'extensions de service point. Donc, dans le fichier de démarrage, nous avions toutes ces extensions de service sur, ainsi de suite. Comme à ce stade, ils vivent tous à l'intérieur du projet AICPA. Mais je ne les veux pas nécessairement dans les produits API. Donc, je vais prendre ces extensions de service 0 et je vais le placer à l'intérieur du noyau. Et une fois de plus, je vais lui faire savoir qu'il est dit de lister point. D' accord ? Maintenant, ce que vous allez voir avec ce genre de mouvement est que toutes ces références à toutes ces bibliothèques ne seront plus spécifiquement dans le projet API. Ils sauront vivre à l'intérieur du projet de base. Et puis l'API Bridget fera juste une référence au projet de base. Donc, quand nous ajoutons une bibliothèque tierce, peut-être plus tard, je veux ajouter un système de diffusion. Toutes ces choses, nous continuerions simplement à ajouter au noyau parce que le noyau va être dirigé immédiatement entre l'API et la fonctionnalité réelle qui interagit avec des applications tierces, n'est-ce pas ? C' est pourquoi ils sont des référentiels ici parce qu'il interagit avec la base de données ou les services, est ici directement avec l'API ou le service d'identité. Plutôt, le détail est là parce qu'il interagit avec les personnes tierces sont. Donc, tout ce qui est un peu lié à un tiers irait en quelque sorte à l'intérieur de la zone centrale. Et si dans la base de données liée va à l'intérieur du projet de données. Et puis tout ce qui est l'application elle-même était dans notre projet API. Maintenant, remarquez juste que nous avons encore cette manette cool et le modèle. Donc, en fait, je vais juste supprimer ces deux-là parce qu'on n'en a vraiment pas besoin. Mais il y avait bon à des fins d'information au départ, au moins, non ? Donc, je pense que nos projets sont bien en dehors des flèches évidemment, mais c'est à cela que notre solution commence à ressembler. Et si vous regardez ici, il semble beaucoup plus compact. Il est beaucoup plus facile de voir exactement ce dont vous avez besoin quand vous en avez besoin. Si vous ne faites rien là-bas, vous pouvez toujours aller au cœur et aller de l'avant et appliquer des modifications à l'un de ces éléments. Et puis vous pouvez toujours simplement étendre la liste des projets en conséquence, désolé, entités selon lire. Donc, ajoutons quelques-unes des dépendances qui sont manquantes dans le projet API. Je vais ajouter la référence du projet au projet de base. Et dans le projet de base et quand ajouter la référence manquante au projet de données. Maintenant, avec cette référence de projet est faite, si nous revenons à l'un de nos contrôleurs ou quoi que ce soit, je ne veux pas que quelqu'un commence par un nettoyage. Je vais juste faire la clé de contrôle, désolé, se débarrasser de tous les inutilisés manquants en utilisant des instructions. Et puis je peux utiliser mon point de contrôle pour inclure les nouvelles références, non ? Donc, pour toutes ces lignes étroites, je peux juste faire le contrôle point-point des instructions using. Et pour garder cela simple pour cette activité particulière, ce que je veux faire est juste de m'assurer que je tout ce qui peut être résolu avec un contrôle. C' est ce que je veux me concentrer sur elle. Donc, si je vais à la clé de contrôle, débarrassez-vous des instructions américaines sur, puis des points de contrôle pour ajouter les points manquants. Et puis une fois que je vois que je n'ai plus d'erreurs, passez à autre chose. Si j'aime toujours l'icône Arizona, résolvez-la en utilisant les suggestions de Visual Studio, alors je le laisserai tranquille. D' accord, donc je vais laisser celui-là tranquille, non ? Non. Ce qui se passe, c'est que vous allez voir flèches parce que certaines bibliothèques sont manquantes. On va s'occuper des bibliothèques manquantes dans la prochaine. Donc, je voulais juste garder cette sorte de serré et concentré sur l'intégration de ces projets. La référence du projet est en cours d'exécution. Bon, alors allez-y et incluez ceux qui manquent en utilisant des déclarations. Et une fois que tout cela est fait, je pense que la plupart de nos erreurs qui seraient levées seront à l'intérieur de nos projets de base et une valeur plus spécifique au lieu des extensions de service à l'intérieur du dépôt également. D' accord, donc quand on reviendra, on fera un nettoyage final et on fera un test pour s'assurer que tout va bien comme prévu. 46. Nettoyer et Test: Bon, les gars, alors maintenant nous devons nettoyer toutes les erreurs qu'on a laissées de notre activité précédente. Ce que j'ai ouvert en ce moment est l'application de liste d'hôtels. Désolé, les fichiers de projet de liste d'hôtel. Tout ce que vous avez à faire est de cliquer sur le fichier du projet. Juste un clic et il vous montrera tous les paquets qui sont référencés à l'intérieur de ce fichier. Aucun moyen assez simple d'obtenir ces projets au projet principal n'est de copier le groupe d'éléments. En fait, je vais faire une coupure parce que ce sont plus comme des bibliothèques tierces. Les seuls qui auraient probablement besoin de garder ici seraient comme le mappeur automatique parce que nous avons encore la configuration automatique ici. Et même alors. Je pense qu'on pourrait bouger ça. Venez y penser, alors je vais bouger que je sais que j'ai dit que c'était un nettoyage. Non, en fait, je fais un autre mouvement. Je vais couper les configurations et être à nouveau au tribunal. Des choses liées à des tiers que vous voulez mettre dans ce dossier là. Et je ne dis pas nécessairement que cela doit être juste trois projets différents, trois couches différentes, pour ainsi dire. Certaines personnes auraient en fait le noyau différent de la logique opérationnelle. Mais ce n'est pas vraiment notre modèle d'affaires parce que tout est générique, et c'est donc vous devez travailler à l'intérieur. Si vous aviez des dépôts spécifiques qui faisaient comme des opérations spécifiques tout le temps, alors vous voudriez probablement avoir un autre projet qui stocke ce genre de choses, n'est-ce pas ? Ce n'est donc pas nécessairement que ce soit trois projets. Si vous faites mon cours sur l'architecture propre, vous voyez que vous pouvez vous retrouver avec cinq ou six projets différents. Et ce que nous appelons seulement sur l'architecture, mais nous n'entrons pas dans tout cela dans cette activité particulière. Donc non, que j'ai déplacé ce laser initial supérieur. Nous devons, bien sûr, mettre en place notre nouvel espace de noms. Je contrôle juste la clé pour nettoyer ce fichier. Et bien sûr, nous avons un tas de domaines, c'est pourquoi nous sommes ici. Donc, dans ce projet pour l'API, je vais prendre toute cette section de groupe d'éléments et c'est un moyen beaucoup plus rapide d'obtenir toutes ces références dans d'autres projets que d'aller dans de nouveaux get and get les un par un comme nous l'avons fait au départ, n'est-ce pas ? Donc je vais juste les mettre. Et puis descendez au cœur et je vais les percer, donc je vais juste les mettre juste au-dessus du groupe d'objets qui est là, et puis je vais sauver ceci et juste construire. Et après la construction, j'ai encore un tas d'erreurs, mais ce qui se passe, c'est qu'il restaure et enregistre toutes ces références. Donc, c'est bien. Nous pouvons passer en revue et résoudre tous ces problèmes. Donc, si je retourne et saute dans le projet API, vous voyez, oui, nous avons un tas d'erreurs dans ce est le début de nous. Nous sommes donc au début de ce dossier de notre clé de contrôle de première action du projet API. Et si vous n'aimez pas le raccourci clavier, vous pouvez simplement appuyer sur le fait que c'est un pinceau là-dessus. Je venais d'exécuter ce nettoyage pour, vous savez, tous ce sont des titres se réfèrent aux extensions de service qui sont maintenant manquantes dans le projet API. Donc, si je contrôle cela et puis introduit une suggestion, il ajoute l'instruction using pour le projet de base. Et regarde ça. La plupart d'entre eux s'en vont. Maintenant celui-ci dit qu'il veut ajouter du papier d'automne, et il ne peut pas trouver le laser initialiser le mappeur. avant que je m'attaque à celui-là Maisavant que je m'attaque à celui-là, parce qu'ils vont faire quelque chose de spécial. Avec cela, permettez-moi juste d'aller de l'avant et d'ajouter l'autre manquant en utilisant des références pour les unités de travail et notre gestionnaire d'oeil off. Et avec tout cela fait, nous avons corrigé la plupart, sinon la totalité, des erreurs. D' accord ? OK. Cela est dû au fait qu'il y a toujours des erreurs dans la cible pour le correctif. Donc, c'est bien. Concentrez-vous sur le mappeur automatique. Non, ce que je peux faire est en fait de créer une méthode d'extension qui s'enregistre automatiquement car le laser d'initialisation n'est plus dans nos projets d'API, donc nous n'avons pas à nous inquiéter à ce sujet. Ce que nous allons faire est de réécrire ce morceau de code et vous verrez pourquoi dans quelques-uns. Pour non, continuons et ajoutons les instructions d'utilisation manquantes pour les deux autres lignes. Et cette erreur est là, probablement parce qu'il y a encore des mystères non résolus avec les fichiers référencés. Donc, c'est bien. Alors concentrons-nous sur la tige d'automne. Donc, ce que je vais faire est d'ajouter une méthode d'extension de service qui configurera l'automne en haut à droite. Donc, nous avons déjà un peu écrit. Je vais juste en prendre un et en quelque sorte le dupliquer, et celui-ci va voir configurer le mappeur automatique. Et à l'intérieur de cela, nous allons juste voir quelque chose comme des services qui ajoutent tige d'automne et l'assemblage qui obtiennent l'assemblage. Il y a donc des situations où vous pouvez avoir plusieurs configurations de mappage. Et ne vous méprenez pas, nous aurions pu utiliser le même type de carte ou initialiser notre code provenant de notre fichier Start-up, j'aurais pu réutiliser cette syntaxe exacte. droite. Ça marcherait. C' est bien, parce que tant qu'il sait où se trouve le laser d'initialisation supérieur, ce serait OK avec cela, comme vous pouvez le voir. Mais comme je l'expliquais, il y a des moments où vous pourriez avoir plusieurs risers initiaux supérieurs, peut-être avoir des points de terminaison différents ou vous avez tellement de détails et d'entités que vous pourriez finir par avoir différents colonnes montantes initiales avec différentes configurations pour différentes situations, peu importe ce que cela pourrait être si le système augmente à cette taille, vous pouvez utiliser cette expression générale où les réflexions vont en fait sortir et trouver n'importe quel fichier qui correspond à ce qu'Autumn Upper recherche, ce qui serait mon initialisation supérieure ou héritant de l'automne supérieur droit. Donc l'une ou l'autre de ces lignes fonctionnerait parfaitement ici. Mais mon point est que nous devons le déplacer et le mettre ici, parce que c' est là que la partie supérieure s'initialise dans nos vies. Donc, au début de ce fichier CSV, je peux maintenant voir configure. Automne Supérieur. Et ce serait une affaire classée. D'accord. Donc, je pense que je vais aller de l'avant avec l'approche plus générique où nous disons juste obtenir l'assemblage d'exécution et l'automne publicitaire en conséquence. D' accord. Donc, j'ai juste fait défiler un peu et je vois le gestionnaire d'exception et ce modèle d'erreur, nous ne l'avons pas bougé. Donc oui, j'ai pris la décision de ne pas bouger parce que je pensais que cela aurait été mieux dans l'API. De toute évidence, c'est nécessaire dans le cours, donc ce n'est pas un problème. Je vais juste prendre cet objet d'erreur et nous le pouvons. Je ne veux pas le mettre dans les détails. Eh bien, ce n'est pas un peu. Donc, je vais créer un nouveau dossier appelé Model CSC que je suis un peu spécifique ou au moins aussi bien que possible avec où je mets quoi. Parce qu'à la fin de la journée, la séparation des préoccupations fait grandir votre projet. Mais cela vous aide à être plus ciblé avec endroit où vous mettez ce qui est et ce que vous nommez vos fichiers et dossiers, n'est-ce pas ? Donc, ici, j'ai l'affaire AirDots, et je viens de lui dire qu'il vit maintenant à l'intérieur du dossier Dot Core Dot Models, et cela devrait prendre soin de l'erreur que nous voyons dans ce fichier. D' accord. Encore une fois, j'ai juste besoin de faire mon nettoyage. Clé de contrôle. Débarrassez-vous de tout ce qui n'est pas utilisé et ne sont pas nécessaires et sautez au plus tôt. Nous voyons que nous sommes en baisse de 50+ flèches à No. 40 plus. C'est très bien. Donc, nous allons passer au mappeur et nous voyons ici qu'il se plaint de la. Profils, si je contrôle que j'utilise Autumn Upper, cela prend soin d'une chose, si je contrôle cela et ajoute les instructions using ou les détails qui prennent soin d'une autre chose. Et comme ça, toutes les flèches ont disparu. Et puis cette liste est réduite d'environ 15. Donc maintenant, si on passe au prochain fichier gênant, j'unité un travail difficile. Il ne sait pas où il est. Donc nous pouvons juste aller de l'avant et ajouter que l'utilisation de la déclaration et tout ce que nous ne pouvons pas trouver, nous contrôlons juste ça juste ? Donc, il ne peut pas trouver le contexte de la base de données. C'est tout. OK, c'est là. Utilisation des données de liste d'hôtels. Pas de problème. Et cela devrait prendre soin de tous les autres fichiers qu'il ne peut pas trouver. D' accord. Et puis nous avons quelques flèches, mais le contrôle qui ne les résoudra pas. Donc ça veut dire que je dois résoudre ce qu'il y a dans ces fichiers. Donc, vous voyez certains d'entre eux, même s'il y a beaucoup d'erreurs, beaucoup d'entre eux sont contenus dans un seul fichier. Donc, en corrigeant IE en utilisant des instructions ou quelque chose où se débarrasser des erreurs très rapidement. Alors passons aux autres fichiers. C' est le gestionnaire de l'auteur a juste besoin d'utiliser l' instruction pour cela et juste une clé de contrôle pour nettoyer. Quelque chose d'autre ? Si je saute sur ISPManager, donc vous remarquerez que ce sont les marqueurs bleus ici sur les marges. Donc, ceux-ci me permettent de sauter sur les fichiers qui sont hérités ou que je fichier hérite de droite. Donc, je peux toujours juste dire, OK, quels fichiers héritent d'ISPManager ? Et ça ne m'amènerait jamais. Donc pour activer celui-là ? Et j'ai montré aux gens celle-là, et ça n'a pas marché pour certains. Ça a marché pour certains. Mais vous pouvez simplement revenir à l'éditeur de texte d'options C-sharp Advance, et à la toute fin, vous verrez la marge d'héritage, qui est expérimentale. Donc si ça ne marche pas, ne me poursuit pas, s'il te plaît. Mais en général, cela devrait fonctionner comme comment vous voyez qu'il est utilisé pour moi ici, donc je peux juste sauter sur ispmanager et corriger cela en utilisant déclaration et le contrôle Katie pour se débarrasser des erreurs et des erreurs inutiles. D' accord. Et si je retourne à la liste, ça prend soin d'un bon nombre si je saute ici. Clé de contrôle ici. Donc demander des armes à feu est effectivement nécessaire par le dépôt aussi. Donc, cela signifie à ce stade, je n'ai aucune utilisation pour le dossier models. Donc, je vais prendre des requêtes params placés à l'intérieur des modèles dans notre projet de base le laisser, ni sa nouvelle maison, qui est Dot Core Dot modèles. D' accord. Et je vais juste supprimer ce dossier inutile de notre projet. D'accord. Alors, où était cette erreur ? Donc, nous corrigeons cette erreur. Laissez-moi revenir en arrière et je pense que nous sommes dans le dépôt générique. Mais pendant que je suis là, laisse-moi juste le contrôler. Vous vous débarrassez de certaines erreurs et je peux utiliser ce que je peux utiliser marge d' héritage car il y a une erreur dans le référentiel générique. Donc, quand je saute vers un dépôt générique, je peux corriger cela en utilisant la déclaration pour les armes à feu de quête. Et une fois que cela est corrigé, alors je devrais pouvoir revenir au dépôt générique et voir un fichier sans erreur. Sinon, laissez-moi juste contrôler cela à l'instruction using. Et c'est très bien. Et puis de la déclaration d'utilisation des armes à feu West. C' est bon, donc je veux dire, vous pourriez ne pas subir les mêmes erreurs dans le même ordre que je suis juste parce que je viens juste de me lever avec moi-même, je réalise que je vais peut-être bouger un peu vite, mais j'espère que vous êtes appréciant le processus de réflexion sous-tend la réflexion sur ce qui doit être corrigé en cours de route. D' accord. Ainsi, vous pouvez toujours continuer à cocher au plus tôt. Et comme vous l'êtes, vous utilisez des instructions comme espaces de noms correctifs, vous remarquerez que cela tôt réduit simplement nos réductions et réductions. Donc ici, je suis en baisse à six erreurs. On a commencé à 50 ans et plus, je suis à six ans. Donc, il suffit d'ajouter l'instruction using pour ce modèle d'erreur qui nous réduit à cinq, puis de le contrôler pour nettoyer ce fichier , puis d'ajouter les armes à feu using for quest. Et nous sommes presque là, presque libres à la maison. On y va. Et juste la clé de contrôle. Voyant celui-là et nous y allons, sans erreur, laissez-moi faire une construction. Et voilà ! Donc maintenant, nous avons construit avec succès des projets construits. D'accord. Alors prenons ça pour un tour parce que oui, ça a l'air sympa. Notre projet API est maintenant beaucoup plus mince qu'il ne l'était quand nous avons commencé. Mais est-ce que ça marche encore ? Alors prenons ça pour un tour. D'accord. Donc ça démarre, et c'est un bon signe. D'accord. Alors essayons quelque chose d'assez simple. Je vais essayer de faire notre inscription. Alors essayez-le et je vais m'inscrire en tant qu'utilisateur il1r2 exemple devenir mon mot de passe est un mot de passe assez compliqué comme nous le savons et nous avons testé, et je veux l'utilisateur de règle. Tout le reste, je pars juste et puis je clique sur exécuter, puis j'obtiens une réponse totale, ce qui suggère que cela a réussi. Donc, cela signifie que tout ce que nous avons configuré fonctionne toujours correctement. Tout ce que nous avons fait était de déplacer les fichiers, rendre notre projet un peu plus propre et un peu plus facile à entretenir et même à tester. Donc, je ne vais pas parler beaucoup sur les tests unitaires, mais l'une des principales raisons pour lesquelles les gens ont tendance à séparer leurs fichiers c'est d'augmenter la stabilité du code et de le rendre un peu plus modulaire. Il est donc plus facile de tester et de voir ce qui est testé si vous voulez en savoir plus sur les tests unitaires. J' ai une vitesse de développement pilotée par des tests de cours sur son cœur que vous pouvez faire pour voir les tests unitaires entiers fonctionnent dans une situation similaire à celle-ci. Donc, avec tout cela fait dans la prochaine leçon, nous allons juste passer en revue tous les changements que nous avons apportés, le processus de réflexion derrière ces changements. Et si c'est vraiment nécessaire ou pas. 47. Évaluer les modifications et les avantages: Très bien les gars, bienvenue. Dans cette leçon, nous allons juste passer en revue tous les changements que nous avons apportés à notre projet API. Donc, une fois de plus, ce que nous avons commencé avec est généralement appelé une architecture tout-en-un parce que dans un projet, nous avions la connectivité de base de données, nous avions une logique métier, nous avions tout, d'accord, appelé les configurations, les références tierces, etc. Maintenant, comme nous l'avons vu, testé et prouvé, tout fonctionne comme prévu. Donc, ce que nous avons fait ici n'est pas nécessairement d'améliorer la fonctionnalité. Parce que nous avions des fonctionnalités. Ce que nous avons fait est d'améliorer peut-être la lisibilité, la maintenabilité, et juste la mise en page globale du projet. Pour qu'à long terme, nous sachions où nous devons aller pour trouver pourquoi. Il y a de nombreux aspects que vous pouvez ajouter à un projet API en termes de juste l'architecture du projet. Et je passe par beaucoup de ceux dans mon cours sur l' architecture solide avec entité et architecture sodded dans ASP.Net Core. Donc, vous pouvez vérifier ce cours si vous voulez voir combien vous pensez processus obtenir vraiment aller dans la construction. Et l'architecture des API. J' ai mentionné les tests. Le test est un peu plus possible lorsque vous adoptez cette approche et que vous séparez tout. Donc, vous pouvez consulter mon cours sur les tests unitaires aussi. Mais mon point est qu'à ce stade, nous avons changé la mise en page des fichiers, mais nous n'avons pas enlevé sont ajoutés à la fonctionnalité générale. Ainsi, la fonctionnalité peut être accomplie à travers une architecture unique, comme nous le voyons dans la puce. Nous l'avons fait pour augmenter la maintenabilité et la lisibilité de nos fichiers. Alors passons en revue tout ce que nous avons fait du début à la fin. La première chose que nous avons fait était de créer ce projet de données. Et dans ces projets de données, nous mettons dans toutes nos configurations pour différentes entités ainsi que pour toutes les entités ainsi que pour le contexte. Nous aurions pu séparer ces non faits un dossier juste pour les entités. La façon dont vous l'étalez est basée sur les contextes de l'air. J' espère que vous le trouverez le plus lisible pour vous. Ou projet d'une année entière. coéquipiers sont en tête, nous le trouverons plus illisible. Tout le monde a des normes différentes. Je n'essaie pas d'être prescriptif avec mes suggestions, n'est-ce pas ? Donc, en séparant les objets de données de l'API elle-même, nous avons retiré toutes les préoccupations des deux actifs liés à la base de données de l'API, de l'application elle-même, non ? Et puis pour qu'il sache toujours où aller et chercher les objets liés aux données. Nous avons simplement mis dans une référence de projet au projet de données. D' accord, avec cela est venu toute autre référence tierce comme le noyau identitaire de l'un et ainsi de suite. Donc, chaque fois que vous mettez quelque chose qui était, chaque fois que vous mettez quelque chose qui a une référence tierce, bien sûr, le projet lui-même doit savoir ce que sont ces références tierces. La deuxième chose que nous avons fait était de créer l'obligation sur le noyau et toute la pensée générale derrière le noyau est qu'il a besoin d'interagir avec tout ce qui est son tiers. Donc, une fois que vous avez quelque chose de tierce partie ou que vous avez besoin de médier avec une bibliothèque tierce, notre système, vous pouvez penser à le mettre dans le noyau. Donc, dans les contextes, nous avons l'initialiseur de mappeur, qui est pour l'opéra d'automne. C' est une bibliothèque tierce. C' est l'accord, la troisième partie est que nous allons l'utiliser pour transférer des données. Nous avons les dépôts, ceux-ci interagissent avec le soleus de la couche de données. Ils interagissent avec la base de données, qui est tierce partie. On l'a mis là. Cela pourrait aussi servir de logique métier, non ? Si nous utilisons des référentiels personnalisés en cours de route, nous avons des modèles ici car certaines opérations nécessitent ces modèles. Et puis nous avons les services qui interagissent avec l'identité dans cette situation. Ensuite, j'ai également mis ces extensions de service dans le projet principal parce que voici où nous enregistrons toutes les bibliothèques tierces auxquelles nous ne voulons pas répondre directement dans notre API. Alors laissez-moi directeur informatique par exemple, à eux dans le projet de base. Et puis nous configurons nos méthodes pour que nous puissions faire l'enregistrement. C' est très bien. Et puis nous mettons tout cela dans le noyau null pour l'API basé sur la façon dont nous l'avons construite. Donc, basé sur la façon dont il a été construit, certaines personnes auraient en fait que l'API et ne voit jamais la couche de données elle-même, n'est-ce pas ? Mais à cause de tout ce que nous avons construit nos contrôleurs et nous utilisons l'unité de travail, c'est un peu difficile de le faire parce que nous devons faire d'elle une amie, Derek, ou par exemple, certaines des entités. Donc, quand vous parlez de manettes minces, que Louis a aussi lancé dans mon cours d'architecture propre, je n'essaie pas de marquer que c'est là quelque chose comme je vous fais savoir, que vous pouvez y aller et le voir. Mais nous parlons de contrôleurs légers où nous faisons beaucoup moins. Mais c'est mieux compris quand on a une fondation qui ressemble plus à ça. Vous comprenez pourquoi vous prendriez certaines décisions. Il est donc bon de faire ce cours et de le faire ensuite. Ainsi, vous pouvez obtenir ce genre de trajectoire ascendante en termes de réflexion et de compréhension de la façon dont les API sont développées. Mais mon point est que nous devons faire référence au projet de données et au projet de base de l'API afin de faciliter les références qui sont nécessaires à notre unité d'où à nos entités. Et dans notre startup dot cs, tous nos services d'enregistrement personnalisés qui ont disparu figuré. Très bien, donc toutes ces petites choses jouent un rôle énorme dans tout ce rassemblement. Et c'est à peu près tout ce que nous allons faire pour refactoriser cette API de liste d'hôtels. Encore une fois, nous avons pris un projet, avons divisé en trois, avons plus de fichiers, probablement plus de dossiers, mais devinez quoi ? À long terme, il sera beaucoup plus lisible et plus facile à entretenir. Maintenant, avant de procéder à la vérification, il y a encore un ajustement à faire. Et en te donnant ce monologue, Justin, je l'ai remarqué. Nous avons donc ce dossier Migrations qui m'a inclus. Je ne sais pas pourquoi je l'ai tellement négligé, mais ce dossier Migrations ne devrait pas être ici. Il devrait être dans notre projet de données car il représente toutes les migrations de bases de données, n'est-ce pas ? Donc, je vais le citer et je vais le coller à l'intérieur des données. Et juste pour des raisons de cohérence, je vais m'assurer que chacun d'entre eux a le point dedans. Espace de noms, non ? Donc on peut, il y a un peu à travers chacun d'eux et lui donner des données de points. En plus de l'instantané, vous voulez lui donner des données. Et pendant que nous sommes encore dans des clichés, je verrais que nous avons cette possibilité d'utiliser des colonnes d'identité. Donc, je pense que c'est notre référence ou avec nos orteils de projet, nous n'incluons que l'ASP NET Core Entity Framework Core. Mais si je ne me trompe pas, nous avons également besoin de SQL Server. Rappelez-vous donc que nous avons pris tout ce groupe d'éléments de notre projet API. J' ai donc vraiment besoin de cette bibliothèque. Je vais juste copier c'est parce que je ne suis pas sûr, Selon cela, mais je vais le copier et le coller dans le projet de données. Et quand je reviendrai ici après avoir fait ses petits freins et contrepoids, ou si je force une construction, cette erreur devrait disparaître. Et je devrais savoir que des projets sans erreur, accord, j'ai encore quelques erreurs. Et ces erreurs apparaissent dans les fichiers générés automatiquement qui correspondent à la avec les migrations. Alors laissez-moi voir si donner à ceux-ci l'espace de noms résoudrait l'erreur et il le fait de là. Donc, à ce stade cependant, parce que nous sommes juste en train de récapituler sur le déballage ouvert ici donnant une autre activité. Mais je vais juste souligner vos options à ce stade. Vous pouvez aimer, oh, nous n'avons peut-être que quatre ou cinq fichiers de migration que vous pouvez parcourir et faire tout cela et mettre à jour les espaces de noms. Vous pouvez également simplement supprimer les migrations car les migrations ne sont vraiment que l'historique des modifications de la base de données. Mais si la base de données est là où vous voulez qu'elle soit, la prochaine migration sur laquelle vous êtes. Si tout est dépourvu de migrations, aurait la dernière version de la base de données. Maintenant, tout est dans dev. Je ne dis pas nécessairement que c'est la raison pour laquelle vous devriez le faire, mais une fois de plus, le contexte est tout où développer quelque chose ici, nous avons livré Séoul, nous faisons une expérience et je vais tout faire ici ni celui de Fuller. Non, je ne cache rien. Je veux qu'on voit exactement comment ça fonctionnerait à partir de zéro, non ? Donc, une fois que je viens de faire était de passer sur le dossier Migrations parce que la migration ne devrait pas être dans l'APA, c'est bon. Mais si je fais des migrations et que je clique sur Supprimer, supprimer, supprimer ce dossier Migrations, puis je vais à ma console Package Manager. Non, je ne peux pas faire de migration ici parce que j'ai besoin des outils. Laisse-moi y aller. Donc je vous montre tout ce dont nous avons besoin. Nous avons besoin d'outils que nous avons besoin de la conception. Y a-t-il une autre bibliothèque dont j'ai besoin ? Je ne pense pas, non ? Non. Et je pourrais juste avoir besoin de l'Entity Framework Core si je ne l'ai pas déjà. Laisse-moi juste creuser ces deux bibliothèques. Mais dans le projet de données. Et je vais juste sauter en arrière. Et je vais aussi prendre Entity Framework Core et mettre dans ce projet. Donc, quand j'exécute les migrations null dans le paquet gérer les inconvénients, la console Package Manager. Je dois m'assurer que mon projet par défaut est défini sur le projet de données parce que c'est là que vit le contexte, n'est-ce pas ? Donc, si je dis ajouter la migration de trait d'union à ce stade, désolé, nom, ce serait frais. Mon coup d'accord. D' accord. Et je reçois une erreur parce que je manque toujours le paquet de conception. C' est ce que je voulais vraiment. Très bien, alors ajoutons juste ces paquets de conception. Donc, je ne veux pas utiliser NuGet et rechercher Microsoft dot Entity Framework Core Design. Et on y va. Donc, allez-y et installez-le. Maintenant, vous voyez que la version ici est beaucoup plus élevée que la version que j'utilise. C' est très bien. Je vais le déposer à la version sur parce que je veux garder mon projet cohérent. Ce que vous vous assurez que vous utilisez la version que vous avez de l'art. Alors installez. Et une fois que cela est fait, je vais sauver dire c savoir que le design est ajouté, non ? Donc, je voulais revenir en arrière et tout est bon parce que j'ai foiré les commandes de migration d'annonces. Donc migration fraîche, appuyez sur Entrée. Très bien, donc l'erreur se répète. Oh, je suis vraiment désolée. Donc, ce paquet devrait également être au démarrage. Le projet de démarrage est les projets API. Je vais juste sauter là-haut. Et je fais ça rapidement. Donc, je vais juste créer un mode groupe d'éléments, groupe TIM. Et dans ce groupe d'objets, je mets juste le design que je viens de prendre du projet. D' accord, alors essayons encore. Donc vous voyez, j'ai dit que je vais le faire à partir de zéro pour que vous puissiez voir le processus, voir les flèches, et savoir à quoi vous attendre. Maintenant, vous voyez, j'ai une migration réussie. Et si nous regardons celui-ci dans, si nous regardons une photo, nous voyons que nous n'avons qu'un seul fichier de migration. Très bien, et il va à l'espace de noms de leurs cartes, et le désir généré automatiquement va à l'espace de noms actuel, c'est bon. Mais si nous faisons défiler, nous serions en mesure de voir tout ce qui a été fait jusqu'ici. Le R, Une fois que je devrais voir est que disons que vous aviez beaucoup de colonne ADA, supprimer une colonne, changer notre colonne, Faites cela, faites cela aux tables le long du chemin, qui est une partie standard du développement. Mais vous avez fini avec 20 fichiers de migration. Donc, nous ajoutons pour la migration floue aurait pu finir avec 20 parce que les essais et les erreurs changent ici et là. Donc, le fait est que si vous supprimez réellement tous les PFAS de migration et faites une nouvelle migration, il va jeter un oeil à ce à quoi ressemblent les données, savoir quelle est la structure de la base de données. Non. Et le fichier de migration que vous obtenez avec a toutes les modifications comme à ce moment-là. Ainsi, vous pouvez facilement condenser 50, 60 fichiers de migration dans un seul fichier de migration qui vous donne juste la dernière version de la base de données dans un seul objectif. Donc, c'est probablement quelque chose que vous voudriez envisager aussi d'aller de l'avant. Bien sûr, avoir la migration par incréments vous aide également à revenir en arrière si nécessaire. Vous pouvez donc jauger ce que vous devez faire. D' accord. Mais je voulais juste montrer pourquoi nous déplacerions le fichier de migration tout cela hors du projet web et quelles sont les ramifications potentielles. Donc, avec tout cela fait, je pense que j'en ai fini avec cette leçon à ce stade. Nous avons refactorisé notre projet et savons que tout est là où il, notre Tout sait comme une nouvelle maison selon le rôle qu'il joue dans notre application. 48. Configurer l'environnement d'hébergement - IIS et SQL Server: Hé les gars, bienvenue. Dans cette leçon, nous allons commencer à configurer notre environnement pour le déploiement local de notre API. Et notez, quand nous disons déploiement local, cela pourrait facilement être vos machines personnelles. Donc, dans ma situation, je vais le déployer sur ma machine personnelle. Mais il pourrait aussi être sur une entreprise pâteuse dans notre serveur quelque part que cette API doit servir à travers le réseau. Et ça pourrait même l'être. Donc, l'Internet est quelle que soit la situation, l'enseignement, vous, vous montre les étapes critiques pour préparer cette machine afin qu'elle puisse héberger votre API. Donc notre voyage commence ici où nous devons télécharger la faveur .net untemmed Lord of the SDK, que nous avons utilisé pour le développement. Mais nous voulons nous assurer que nous avons le moteur d'exécution et nous pouvons juste obtenir ce bundle d'hébergement pour Windows. Donc, lorsque vous faites cela, vous lancez votre programme d'installation. Et puis vous passez par les points de contrôle de sécurité. Et ceux qui sont faits, vous pouvez fermer ça. Et puis nous savons que nous allons passer à la mise en place, je suppose, ou des services d'information sur Internet. Donc, ce que nous voulons faire, je dirais encore une fois, va dans votre menu de démarrage et voir la fonctionnalité. Et puis vous voulez cliquer sur activer les fonctionnalités Windows sur notre désactivation. Donc, ceux qu'ils ont sélectionnés, cette petite boîte apparaîtra et vous voulez vous assurer que vous sélectionnez services d'information Internet. Une fois que tu auras fait ça, tu auras ce carré. Ce carré signifie que ce n'est pas tout ce qui est coché, ce qui est très bien. Vous n'avez pas besoin de toutes les fonctionnalités. Je vais juste vous montrer ceux que j'ai actuellement installés et puis il peut juste passer par et s'assurer que ceux-ci sont également cochés de votre côté. J' ai donc la console de gestion et ensuite j'ai ces bibliothèques pour les fonctionnalités de développement d'applications. Donc, vous pouvez vous assurer que vous les cochez. Peut-être que vous n'avez pas besoin de tous, mais cela fonctionne pour moi avec ceux-ci, je vous recommande de vous assurer que vous avez ceux-ci. Et puis pour les fonctionnalités HTTP, vous pouvez aller de l'avant et prendre ces diagnostics une fois que je, eh bien, cette section est en fait facultative, mais je vous recommande d'obtenir la section de journalisation HTTP. Ensuite, les fonctionnalités de performance, l'authentification de base et les autres. Donc, une fois que vous avez ceux-ci, vous pouvez cliquer sur OK, puis l'installation peut prendre un certain temps. Je les ai déjà aidés, donc je n'ai pas besoin d'attendre leur installation, mais une fois qu'ils ont terminé l'installation, vous pouvez reprendre cette vidéo. Donc, une fois que vous êtes sûr d'avoir, fur et à mesure que ce processus est terminé, pour vous assurer que vous avez S, vous pouvez simplement aller dans votre menu Démarrer et taper S, puis vous verrez apparaître. Ensuite, lorsque vous lancez, vous obtiendrez cette console qui vous montre votre serveur et tous les sites que vous y trouverez actuellement. Pour vous assurer que cela fonctionne, vous pouvez simplement cliquer sur les sites Web par défaut et aller à Burroughs. Et puis il vous montrera cette page qui vous montre que vous voyez maintenant votre serveur. Maintenant, une autre partie essentielle de la configuration de votre environnement local sera vous assurer que votre serveur de base de données est installé et en cours d'exécution. Donc, quand nous parlons du serveur de base de données, nous avons quelques options dans un environnement d'entreprise, vous l'avez probablement déjà ou vous devriez l'avoir. Vous pouvez vérifier auprès de votre administrateur système tout ce que vous devez faire. Mais vous allez juste de l'avant et assurez-vous que vous avez SQL Server à un niveau personnel. Si vous ne l'avez pas déjà, vous avez des options. Vous avez soit développeur ou express. Exprime donc très libre. Aucune licence n'est requise du tout. Et ce qu'il a alors quelques limitations sur un niveau personnel exprime bien. Développeur vous donne beaucoup plus de fonctionnalités et il est en fait entièrement alimenté. C' est donc un téléchargement beaucoup plus important et une tâche beaucoup plus grande que de l'avoir installé donne accès à beaucoup plus de fonctionnalités. Pour ce déploiement, vous pouvez probablement vous en sortir avec Express, mais peut-être que si vous pensez à la longévité, vous voulez probablement juste obtenir des développeurs afin que vous ayez tout ce dont vous avez besoin pour aller de l'avant et télécharger cela. L' installation est assez simple et à la fin, vous serez invité à installer le studio de gestion. Et juste au cas où vous avez manqué cette étape, vous pouvez toujours juste Google SMS, qui est abrégé pour SQL Server Management Studio. Et une fois que vous passez par cela, vous pouvez toujours ne pas charger le studio de gestion à travers ce support également, qui est également une installation simple. Donc, pour lancer le studio de gestion, fois qu'il est installé et connecté à votre serveur de base de données, vous pouvez aller de l'avant et cliquer sur l'icône et vous verrez cet écran de démarrage. Et pour vous connecter au serveur, vous n'avez pas besoin de mettre un nom de serveur. J' ai donc deux serveurs fonctionnant sur, quelques serveurs fonctionnant sur ma machine ou je sais que j'ai SQL Express, donc j'ai une instance de SQL Express, mais j'ai aussi une instance du développeur. Donc, pour arriver à l'expression SQL contre la barre oblique inverse de point SQL Express, cela ne signifie pas vraiment hôte local aussi. D' accord, et si vous êtes allé avec le développeur, alors vous avez juste besoin de localhost. Donc tu n'aurais pas besoin d'autre barre oblique. Donc, je vais utiliser le développeur, disons si je dis localhost et il se connectera, et je pense que j'ai quelques bases de données, pas trop. Donc, nous pouvons passer maintenant avant de passer à l'étape suivante, je veux juste vous encourager à vous assurer que vous avez accès administrateur ou même si vous n'avez pas d'accès administratif, si vous êtes dans un environnement d'entreprise où vous êtes pas en mesure d'être l'administrateur, que vous avez au moins suffisamment d'accès ou que vous travaillez avec quelqu'un qui a l'accès pour effectuer certaines des actions ici. Donc, beaucoup de problèmes que les gens et Colin sont quand ils font ce genre de déploiements en dehors de probablement manquer une bibliothèque oughta et ne pas installer quelque chose. Le problème le plus important suivant est généralement les autorisations et les autorisations d'auteur, n'est-ce pas ? Donc, il s'assure que vous travaillez avec quelqu'un qui est le cas qui a suffisamment d'autorisations pour faire le tour et les obstacles potentiels. Et si vous êtes sur l'air machine personnelle sont juste une machine qui est à vous de gérer. Assurez-vous simplement que vous avez des droits administratifs. 49. Publier des applications dans IIS et SQL Server: D' accord les gars, donc après avoir mis en place votre environnement et sûr que vous avez visité que tout fonctionne. Maintenant, ce que nous voulons faire est en fait publié le site à notre, je sais avant de le faire, nous avons quelques étapes que nous devons accomplir. Et un changement de code en particulier que je veux faire concerne l'interface utilisateur swagger. Donc, dans la page de démarrage où nous avons app.use swagger UI, je voulais une sorte de changement tenir ce point de terminaison est généré. Et la raison en est que j'ai vu que veut qu'il est de publier les règles de chemin genre de chaînes. Donc, ce que je veux faire est de le faire ressembler quelque chose de plus comme ça ont été utilisés serveur UA ou graine, lambda Tolkien. Qu' est-ce alors nous avons les accolades qui en font un objet. Et nous allons juste qualifier le chemin de base du MIT pour voir point de chaîne est un espace molaire c point, racine, préfixe. D' accord, et ensuite on va dire point, point, point. Donc, ce qui se passe est que lorsque le préfixe racine change par rapport à s'il est en développement comme il l'est maintenant, r. S'il est publié, le, le chemin doit être un peu différent. Donc, nous faisons est juste de voir soit mettre un point, deux points, et puis nous allons juste ajouter cela à notre chemin existant, qui était là avant, qui était là avant, et l'API de liste d'hôtel. D' accord, donc tu peux aller de l'avant et faire ce changement rapide. Et juste pour vérifier que cela fonctionne encore à nouveau autour. Et nous voyons toujours notre documentation API Sagar. Et vous remarqueriez également que l'URL a point. Lorsque nous cliquons dessus, nous obtenons ceci. Donc, quand nous allons à ce lien pourrait avoir l'air légèrement différent, c' est-à-dire que je suis passé en revue tout ce que nous venons de faire. D' accord ? Donc non seulement confirmer qu'il travaille sur autre chose très importante que nous voulons faire est de créer la base de données. Donc, dans notre serveur de base de données, que vous utilisiez SQL Express ou que vous utilisiez un développeur, vous pouvez simplement aller à cette instance particulière sur laquelle vous espérez héberger la base de données de l'API, désolé, sur. Et puis vous voulez juste créer une nouvelle base de données. Donc vous voulez que cela soit présent quand nous faisons nos migrations, n'est-ce pas ? Donc, parce que je ne veux aucun type était que je vais juste double-cliquer sur le nom de la basede données à double-cliquer sur le nom de la base partir des hôtes, à partir du paramètre de l'application, désolé, puis aller de l'avant et utiliser ce nom pour créer la base de données. Et puis vous pouvez aller de l'avant et confirmer que la base de données est là. C' est vide, non ? Nodal ou trop à ce sujet. Mais c'est le déploiement initial, non ? Donc, ce que nous allons vouloir faire, c'est publier. Nous pouvons donc aller de l'avant et cliquer avec le bouton droit sur nos projets. Nous voyons Publier, cliquez dessus, puis nous pouvons choisir notre cible. Nous avons donc un certain nombre d'options ici. Vous pouvez publier sur un 0, que nous pouvons regarder plus tard dans le dossier Docker, FTP. Cela serait utile si vous hébergez comme sur un GoDaddy ou l'un d'entre eux ou vous hafta FTP au serveur sur lequel il sera hébergé. Ou vous pouvez aller directement sur iOS ou si vous avez d'autres profils, vous pouvez simplement importer un profil. Donc, je vais faire dossier et je vais expliquer pourquoi je fais photo parce que je fais un déploiement local. Je peux le faire localement sur la machine, puis déplacer les fichiers vers l'endroit où je veux qu'ils visent. Cela s'applique également lorsque vous partez et c'est ma base sur mon expérience. Donc, dans mon expérience, j'ai fait des déploiements de dossiers où je choisis le dossier directement sur le serveur qu'il allait à cause d'une faute de frappe que j'ai mise dans le mauvais chemin et je l'ai essayé et essayé et l'ai essayé et rien n'a été mise à jour. Il s'avère que je le faisais sur le mauvais chemin. Je n'ai pas remarqué jusqu'à ce que j'ai choisi l'option qui dit supprimer tout dans la photo. Et puis j'ai fini par enlever un autre pourrait cocher juste pour avoir mon petit site Web. Donc, ma nature prudente, non, c'est que j'ai appris grâce à l'expérience, m' incite à toujours faire notre déploiement ma machine, puis les fichiers et à les déplacer vers la machine cible. Et c'est comme ça que je fais. C' est pourquoi c'est, je vais vous montrer,sur la base de l'expérience,vous sur la base de l'expérience, pouvez choisir si oui ou non vous allez le faire à ma façon ou vous juste les rues de l'école sont la machine cible que quand il n'y a pas de bonne ou de mauvaise façon, c' est juste une question déréglée. Expérimenté m'apprendre la sagesse. D' accord, donc je vais choisir un dossier local déploiements. Donc, il va aller dans le dossier bin publié .net cinq publié. D' accord, on peut cliquer sur Terminer et ensuite on peut éditer. Donc il y a certaines choses que nous voulons faire. Donc, nous pouvons ajouter ce point change l'emplacement cible si vous le souhaitez. Mais quand nous allons à Paramètres, nous pouvons choisir d'autres petites configurations. Je veux que les options de publication du fichier. C' est donc le stockage optionnel sur les bateaux. Supprimez tous les 5p existants. Donc, ce qui a fait ça est blanc avant d'apprendre les nouveaux fichiers. Et si vous ne choisissez pas cela, ce qu'il fera est probablement juste de remplacer ce qui est là ou ce qui est en commun de toute façon. Donc, cela peut être risqué parce que si c'est le mauvais dossier, comme je l'ai dit, il supprimera les fichiers critiques. Nous pouvons choisir les bases de données. Bases de données, utilisez cette chaîne de connexion au moment de l'exécution. Et je vais prendre ceci et je vais changer ses connexions avec lui parce que je ne veux pas qu'il utilise loca, SGBD, SQL base de données locale. Je voulais utiliser mon hôte local ou localhost barre oblique SQL Express, quel que soit le nom du serveur. Tu l'as mis là. Je conserverai le même nom de base de données et toute autre option. Et puis le bateau à vapeur, les migrations. Donc, je vais dire appliquer cette migration. Et ce que cela va faire est de générer un script basé sur la situation actuelle de la base de données et les migrations et tout, n'est-ce pas ? Donc on peut aller de l'avant et faire ça. Cliquez sur Enregistrer, puis sur Publier. Donc ici vous avez l'emplacement cible et c'est là qu'il va aller sur ma machine, Publier. Et une fois que la publication sera terminée, ils vous montreront, si vous voulez. Sol ou non, ce qui était dans mon cas, et la dégénérescence du script a été terminée avec succès. Donc, en passant d'être le déploiement initial, cette étape de génération de fléau est très importante car lorsque vous allez déployer notre mise à jour comme une mise à jour, elle est déjà en production votre mise à jour quelque chose que la base de données Amy change, de nouvelles migrations, etc. Vous voudrez fournir ce script aux administrateurs de base de données sont le développeur senior. Je veux dire, si tu es un développeur senior, alors très bien. Eh bien, vous voulez ce script afin de plus, avoir plus de contrôle sur les changements de base de données. Vous ne voulez pas que quelqu'un dise juste, oh, je migre le nombre de données de spins ou est-ce que je migre sur les actes obèses ? Parce que dans le développement, nous avons moins de préoccupations au sujet des données réelles et de l'intégrité que dans la production. Donc tu veux faire attention à ça. Et allons de l'avant. Donc, je peux contrôler clic et aller directement au système de fichiers où cela a été publié. Et je peux prendre ces fichiers et une fois que je vais faire est en S, Alors laissez-moi juste parler ailleurs sur le site par défaut, nous le savons. Nous allons cliquer avec le bouton droit de la souris. Et puis je vais juste aller explorer. Donc, cela l'amène maintenant dans le dossier ionique où je suis dossier racine WW où toutes les applications Web doivent quitter. Non. Disons simplement qu'il s'agit d'un serveur qui a plusieurs applications en cours d'exécution. Donc, tous sont en cours d'exécution à partir du nom du serveur barre oblique de l'application Web. Mmm. Donc, ce que nous allons faire est de créer l'API a un web up, donc nous allons obtenir le nom du serveur ou le nom de la machine barre oblique les API et les points. D' accord, donc je vais créer un dossier. Je vais juste l'appeler une API de soulignement totale. Et puis à l'intérieur de ce dossier, je vais placer tous les fichiers. Donc, si vous êtes une copie et sur un réseau, je vous recommande de les archiver afin qu'il soit plus facile de les copier. Mais puisque c'est juste pour déplie le pli sur la même machine ici. C' était une opération mal à l'aise. Ensuite, je veux exécuter les scripts SQL. Donc, je vais juste aller dans E f, désolé, je voudrais un peu rapidement EFS Gills scripts, ouvrir ce fichier de script. Et puis ici, vous verrez que tout ce qui était dans les migrations est juste ici dans un bon SQL compréhensible. D' accord, donc même les migrations que nous avons faites, la base de données a créé toutes ces choses, en semant la bêta. Donc, les données par défaut que nous mettons dans toutes ces migrations Anzac ici dans les scripts SQL. C' est pourquoi je dis que lorsque nous allons changer la base de données à chaque fois que ce script est généré, nous pouvons en fait extraire les nouvelles choses et avoir plus de contrôle sur ce que nous faisons à la visualisation des données. D'accord, donc ici et bien, de toute façon, le script le protège parce qu'ils disent si le, donc c'est pourquoi j'ai la table d'historique de migration parce qu'il supprime les instantanés de chaque migration. Donc il est dit, si cette migration n'existe pas, alors Karel cet oxygène. Donc c'est un peu, on verra si c'est déjà fait. Je n'ai pas besoin de le refaire. D' accord. Donc on peut juste exécuter ça et me laisser revenir au sommet. Donc, avec SQL, si vous êtes, si vous n'êtes pas si familier avec SQL, afin de vous assurer que le script de la Terre est capable de s'exécuter sur la base de données. Vous pouvez soit en haut dire Utiliser, et vous mettez dans les noms de base de données. Dans ce cas, ce sera la liste OTA ou vous vous assurez juste que la base de données est sélectionnée en haut ici dans la liste des bases de données disponibles, n'est-ce pas ? C' est ainsi que vous pouvez vous assurer que votre capacité à le lire est sur ses besoins actuels obèses lorsque je clique sur exécuter, le script s'exécute avec succès. Donc, sachez que j'ai les tables si je me rafraîchis, elles sont toutes celles pour les utilisateurs, les hôtels et les pays, toutes celles que nous avons créées manuellement, elles sont toutes là. Donc, je sais que la base de données est amorcée et prête. Ce que je vais faire est de continuer à s'asseoir de l'application web API elle-même. Donc Buck dans IIS, je vais juste actualiser cette liste parce que ce qu'il va faire est de lister tous les dossiers qui sont dans www root voir automatiquement cela. Et puis ce que je vais faire est de cliquer dessus avec le bouton droit de la souris et de convertir l'outil et l'application. Avant de faire ça, je suis désolé, je suis désolé. Avant de convertir cela en une application et passons au pool d'applications. Ainsi, un pool d'applications est comme un conteneur dans lequel une application Web ou des applications Web peuvent s'exécuter. Un principe de responsabilité unique suggère que vous faites un pool par propagation AP. Parce que si appall continue avec plusieurs OPS que tous ces ups cessent de fonctionner. Donc vous savez, pour l'isolement, vous pouvez avoir plusieurs pools. Quelqu' un est dans l'API d'image. Piscine à rien de trop fantaisie ou compliqué. La version CLR dominante sur quand dire pas de code managé parce que nous utilisons .NET Core. C' est donc très, très important. Et puis on peut cliquer d'accord, donc c'est bon. Maintenant, la pertinence de cela est que lorsque je reviens à l'étape précédente et tout quand je clique avec le bouton droit et dire convertir, l'application va me demander quel pool d'applications je veux sélectionner. Donc, je peux aller ici et sélectionner dans cette liste déroulante API hôtel, une piscine. C' est celui que je souhaite pour cette application à Iranien. Et puis je peux aller de l'avant et cliquer sur OK. Et puis vous remarquerez qu'il ne ressemble plus à un dossier. Non, on dirait un petit globe web avec le puits, non, on dirait qu'il est sur le haut. D' accord. Alors prenons ce tour de fil. Je vais juste à Bros au port 80. Et nous atterrissons sur cette enchère qui voit l'adresse 404, pas le téléphone, d'accord, mais ce que nous aurions attendu est plus ou moins que la documentation swagger. Alors laissez-moi voir si peut-être quand je l'ai demandé, et nous y allons. Donc non, au moins nous savons que nous le regardons depuis un hôte local. Et notez que ce n'est pas l'hôte local deux-points les ports localhost les ports, le numéro de port. Permettez-moi de vous montrer juste pour que partout où il est clair, localhost deux-points, le numéro de port représente l'environnement de développement. Dans la situation maya, hôte local par lui-même. Il représente IIS. Si vous avez plusieurs serveurs Web, Web, peut-être que vous avez, wow ME, Poisson ou Apache, ou d'autres serveurs Web en cours d'exécution, alors vous devrez peut-être changer les ports parce que maintenant j'ai apache. Qu' est-ce qu'il fonctionne sur le port localhost 8080. Très bien, ce que c'est la valeur par défaut sur iOS est ma valeur par défaut. Donc, hôte local est ce que vous voyez lorsque le nom de l'application Web, puis la première page. Donc, au moins, nous savons que nous servons de l'activité de l'IIS. Très bien, alors utilisons-nous le facteur et faisons une nouvelle demande. Donc, je vais juste demander tous les hôtels de l'API. Aucun avis sur le lien. J' espère que ce n'est pas trop petit en ce moment, je dois voir localhost hôtel slash, souligner l'API slash api slash hôtel. D' accord, donc sa barre oblique locale la barre oblique du nom du web, le chemin que nous aurions réglé dans notre contrôleur. Donc, il doit sauter en arrière. Et je fais juste ce sol une compréhension complète de toutes ces petites variables et tenir si elles sont séparées, non ? Donc, la règle que nous avons dit était le contrôleur de barre oblique API, je n'ai pas dit que nous pouvions le changer. Ça saura probablement que nous sommes en train de déployer, non ? Quel point est que parce que c'est API Slashdot signifie ce qui précède, cela ira toujours de cette façon. Donc, si c'est que nous n'avons pas utilisé notre web sur appel total. Il aurait pu être localhost slash api spécial. Si c'était la moyenne, s'il s'agissait d'un emplacement racine hors du serveur d'applications. Donc dans ce cas, ce n'est pas le cas, je ne suis pas prêt à aller dans un changement de nom Juste parce que votre institution pourrait être différente de la mienne et je suis juste en train d'expliquer toute la dynamique derrière pourquoi ma fin de ce van le vôtre peut-être pas parce qu'il est allé sur un chemin différent. Donc, si vous déployez directement, et une fois de plus, je n'ai aucun problème à montrer si vous avez déployé votre, votre API directement à la racine de cette ionique tirée à droite de la racine www, désolé, vous ne nous avez pas tous arrachés et mis ici à la racine, puis l'hôte local slash swagger vous servirait réellement. J' espère que ce pij que nous étions juste en train de regarder en venant de l'hôte local, non ? Mais à cause de ce web up, nous devons aller dans l'application web pour obtenir les choses réelles. D' accord, alors laissez-nous tester cette requête. Et quand je clique sur Envoyer, je reçois une erreur 500. Et tout ce qu'on a fait, c'est qu'on ait envoyé tous les blogs, non ? Donc, je peux toujours aller dans mon dossier de journaux et jeter un oeil à la raison pour laquelle je reçois ces erreurs. D' accord ? Donc, ce fichier journal me montre que quelque chose s'est mal passé dans l'échec de connexion du client de données pour l'utilisateur. Et puis il me montre le nom de l'utilisateur. Donc, dans la vidéo précédente, j'ai vu les permissions joueront un rôle très important dans ce que vous faites, non ? Alors. Pour notre pool up que nous venons de créer. Pour que l'utilisateur sous le pool up puisse interagir avec la base de données, nous devons nous assurer que nous lui donnons l'autorisation. Donc, ce que je vais faire est de passer à SQL Server ou de revenir à la base de données. Et puis on va faire deux choses. Vont créer un login pour cet utilisateur mis en pool. Et puis nous allons ajouter cette connexion à la sécurité de la base de données. Donc, tout d'abord, nouveau login ou bien , laissez-moi juste voir si je peux le faire directement en tant qu'utilisateur. Donc, sous la base de données, il est notre objectif à la sécurité des utilisateurs puis les utilisateurs que le nouvel utilisateur, puis choisissez l'utilisateur Windows. D' accord, et puis de mettre ce nom d'utilisateur en tant que pool, c'est son domaine. Et le, fondamentalement le nom du pool est le nom d'utilisateur. Ou nous pouvons cliquer sur OK. Et si nous regardons dans la liste, alors nous verrons que les utilisateurs de pool non, ajouté, non. Permettez-moi d'essayer à nouveau cette demande. Toujours en train de se lever 500. Laisse-moi traiter ça un peu. Donc, ce que je vais devoir faire est de lui donner plus de permissions. D' accord ? Nous l'avons ajouté aux livres de la base de données. On ne lui a pas donné d'adhésion, alors je vais juste m'asseoir. Est-ce que le propriétaire DB ? Non, vous voudrez probablement être un peu plus granulaire que je n'ai raison de savoir, lorsque vous définissez des autorisations parce que l'utilisateur qui peut accéder à la base de données pourrait ne pas, vous pourriez ne pas vouloir leur donner la propriété parce que la propriété de la musique et de laisser tomber le visa, Visa, Andrew Oldham, des choses potentiellement malveillantes autant que ça aide l'utilisateur. Vous voulez être très soucieux de la sécurité quand vous donnez des autorisations, n'est-ce pas ? Donc, vous pouvez simplement leur donner des données, lire, données à ou quelle musique et lire et écrire dans la base de données. Mais ils ne peuvent pas effectuer d'autres opérations critiques qui pourraient compromettre les données. D' accord ? Dans ma situation est ma machine là, mes utilisateurs. Je vais définir le propriétaire de la base de données. Donc, je vais dire appartenance DB Owner et propres schémas. Propriétaire de la DB. Et généralement, vous remarquez que le schéma par défaut, l'affaire que vous n'avez pas à vous soucier que c'est plus de choses au niveau de la base de données qui veulent juste mettre notre application en marche. Donc, nous pouvons cliquer sur OK et ensuite nous pouvons essayer à nouveau. Et puis nous voyons ici que nous recevons des données. Nous obtenons donc des données de notre base de données API. Maintenant, juste pour vous faire savoir que certaines des caractéristiques de sécurité ou je suis un Nazi fonctionnalités, une configuration qui est, Je pourrais avoir juste Poutine pourrait pas nécessairement fonctionner comme ça pour vous il ya d'autres facteurs sont vous que les rues font ces choses. Le fait d'avoir la permission de donner aux utilisateurs des autorisations et toutes ces choses jouent un rôle dans la question de savoir si vous pouvez ou non terminer avec succès toutes les activités comme vous venez de me voir le faire. En fin de compte, cependant, ce sont les étapes très élémentaires pour mettre place et exécuter votre application sur les configurations requises sur la base de données. Et maintenant, il y a peu de choses que nous voulons nous assurer de mettre en place. Si vous vous souvenez, lors de la configuration de notre JWT, nous avons ajouté une clé secrète que nous avons ajoutée en tant que variable d'environnement. Non. Si vous l'avez ajouté au style bouleversant, vous n'avez pas à passer par cette étape. Si cependant vous avez fait ce que j'ai fait et l'avez ajouté en tant que variable système, alors nous avons besoin de notre API pour stocker cette clé, à droite, afin qu'elle puisse gérer cette opération bouchées de partout où elle se trouve sur la machine automatique. Nous allons donc passer à l'éditeur de configuration. Et à partir de la liste déroulante vers la gauche, nous voulons nous assurer que nous avons serveur Web point système et ensuite nous allons choisir ASP net core. D' accord, alors allez-y, section conique, nous allons à System.Out. Le serveur Web est B.NET Core. Et puis de la liste déroulante vers la droite, nous allons vers les hôtes d'application, pas les conflits. Sachez, quand nous faisons ces deux changements, nous pouvons voir les variables d'environnement cône égal à 0. Donc, on va juste cliquer dessus. Et puis nous allons ajouter notre variable d'environnement. Non, la même chose que vous aviez ajoutée en tant que clé d'environnement. Donc, je voulais juste non récupéré le mien et mon nom était le mot clé et ma valeur était aussi bonne. Maintenant, même si compliqué, qui que ce soit simplement, le fait est que nous voulons qu'il soit dans un endroit sûr et c'est ce que ce mécanisme nous offre. D' accord ? Ainsi, vous pouvez simplement aller de l'avant et mettre votre nom et la clé que vous avez sélectionnée. Et ensuite, on peut aller de l'avant et fermer ça. Maintenant qu'il est ajouté. Le commentaire n'est personne. Nous pouvons cliquer sur Appliquer pour appliquer les modifications, puis redémarrer ou pools. Donc, je me souviens, j'ai mentionné que lorsque plusieurs applications sont dans la piscine, si vous arrivez quelque chose à la piscine et tous ceux qui sont scolarisés sur. Donc je voulais juste redémarrer ou billard. On peut juste recycler. Et puis ce que nous voulons faire est de tester notre login et Tolkien récupère l'île et l'accès sécurisé. Donc, laissez-moi juste vérifier que cela toujours, accord, donc notre API fonctionne toujours. C'est bien. Laissez-moi tenter de me connecter, donc je vais juste revenir à l'une de mes anciennes demandes. droite. Et bien, en fait, je ne peux pas encore utiliser cette ancienne requête parce que si j'ai essayé, je vais juste dupliquer ceci. Et je suis allé enlever le numéro de port. Et je n'utilise pas HTTPS non plus. Https. C'est un tout autre niveau de configuration où je ne veux pas trop m'intéresser à cela, dans cette leçon, nous voulons juste faire fonctionner notre déploiement de bande. Donc hôte local slash hôtel, soulignement API, puis slash api slash slash slash sortant connexion slash Lothian. droite. Alors et j'envoie chercher un quatre oh, un, non ? Je ne suis pas autorisé car cet utilisateur n'existe pas. Donc parce que nous n'avons pas vu l'utilisateur. Donc, si vous, si vous voyez que l'utilisateur, vous êtes probablement n'avez pas ce problème. Donc, je vais juste fermer certaines de ces anciennes demandes sont à. Essayons donc d'enregistrer le même utilisateur ou le même utilisateur. Alors changez juste le chemin. Et quand nous envoyons la demande, nous voyons que nous obtenons l'outil à accepter. Donc, cet utilisateur est créé. Allons à la base de données et verve. Et nous pouvons voir cet utilisateur ici, traumatisme à example.com sur le mot de passe. Très bien, alors maintenant que nous avons l'utilisateur créé, essayons notre opération de connexion à nouveau pour essayer d'obtenir le Tolkien. Donc, les demandes de couture que nous essayons juste de me laisser envoyer, et voici notre Tolkien. D' accord ? Donc si on va en prison avec TDA et regarde notre Tolkien, où voir des choses qu'on a l'habitude de voir, non ? Cela va dire signature non valide parce qu'une fois de plus, il ne sait pas que la clé a été signée avec, qui est ce que nous venons de dire, Ouvrez la variable d'environnement. Mais nous voyons que les Tolkien ont l'inflammation que nous attendons. Donc c'est maintenant que je vais essayer une sur l'âme de l'opération de suppression. Laisse-moi essayer avec l'hôtel pour qu'on sache que nous avons trois hôtels que nous voyons ça, non ? Je vais supprimer l'hôtel avec ID3 de la base de données afin que nous sachions que nous avons besoin de notre Tolkien et nous aurons le lien. Laisse-moi changer ça en hôtel. Donc, nous supprimons l'hôtel. Donc je veux juste vérifier que notre Tolkien fonctionne. Et quand nous faisons cela, nous récupérons un outil pour. Donc, ça veut dire que si je vais dans la base de données et que je regarde dans la table des hôtels, ça a commencé par trois, on ne voit que l'outil. Donc, vous voyez notre Tolkien a travaillé nos, tous nos points de terminaison, au moins ce que nous avons testé, donc feux d'artifice et jusqu'à présent, nous avons déployé avec succès notre API à ou local. Déploiement local des SI avec notre base de données locale des ports. Ainsi, en suivant ces directives, vous pouvez déployer avec succès l'API au sein de votre entreprise ou pour votre usage personnel, ou quelle que soit la situation. 50. Créer un compte Microsoft Azure: Hé les gars, dans cette vidéo, nous allons créer nos cônes Microsoft a 0. Comme je l'ai dit tout à l'heure, on peut commencer gratuitement. Pour accéder à ces sites, nous allons à absorber point Microsoft.com et puis je suppose que les routes vous selon votre région ou votre langue. Mais c'est à quoi ressemble le site Web devrait ressembler. Et vous pouvez le lire pour voir exactement ce que 0 est tout à fait. Il s'agit d'être futuriste, de permettre plus de collaboration et d'opérer de manière plus transparente dans un espace fermé, non ? Ils sont partout dans le monde et vous choisiriez habituellement la région la plus proche de vous. Donc je suis dans la région des Caraïbes. Alors mon Joel dit, la région est à l'est de nous ou de l'Est des États-Unis deux. Mais pas pour cette vidéo. Cette vidéo, nous sommes juste de créer les colonnes n'ont pas mis en place quoi que ce soit sur les raisons pour l'instant. Et donc pour commencer, nous pouvons ceux bien, si vous avez déjà un compte en direct, alors vous pouvez juste aller de l'avant et vous connecter avec ce live up cônes. Mais vous pouvez simplement cliquer sur Démarrer gratuitement. Et ici, ils vous disent que vous pouvez créer un libre ont disparu aujourd'hui et vous pouvez commencer avec 12 mois de services gratuits. Donc c'est une bonne affaire pour moi. Et si vous faites défiler vers le bas, vous voyez 12 mois de services gratuits, populaires et gratuits plus 200$ de crédit qui expirera dans 30 jours. Donc, ils vous donnent $200 une peut créer des machines virtuelles V, encore une fois, créer des ressources dans le cloud et expérimenter jusqu'à ce que l'argent est o. et c'est vraiment juste pour un mois. Mais alors il y a certains services que vous obtenez gratuitement pour le reste de l'année, et puis vous aurez quelques autres services qui sont toujours gratuits. Bon, donc ce que nous allons faire est juste d'aller de l'avant et de cliquer sur Démarrer gratuitement. Ensuite, ils nous demanderont de nous connecter avec notre live de cônes. Si vous avez encore un compte en direct, il peut aller de l'avant et l'utiliser. Si vous n'avez pas un autre cône, alors vous pouvez aller de l'avant et en créer un. Et c'est une option très récente pour se connecter avec GitHub. Donc j'ai un live un cône que j'utilise, mais je vais juste vous accompagner à travers la création 1 d'abord. Sachez que l'icône en direct n'a pas nécessairement besoin d'être en direct ou sur all.com. Il ne doit pas nécessairement être un compte Hotmail traditionnel, il peut s'agir d'un compte Gmail. Donc, je peux réellement utiliser la même adresse e-mail que j'ai utilisée pour GitHub ou par les adresses e-mail que j'utilise lorsque je m' abonne pour des choses que je peux utiliser que, que ce soit Yahoo, Gmail, Hotmail, quoi que ce soit. Et cliquez simplement sur suivant. Et là, c'est déjà, ça me dit que j'ai déjà un point Microsoft disparu. Donc cela conduit mon point de vue cependant, qu'une fois que vous avez une adresse e-mail, il ne doit pas être Hotmail ou un bateau AECOM traditionnel vivant là-bas, créant ainsi un Microsoft ou Collins pour vous avec cette adresse e-mail. Donc, vous pouvez aller de l'avant et vous inscrire. C' est un processus assez simple. Maintenant, ils sont Conda a décidé déjà existé. C' est un compte que j'utilisais pour m'inscrire au deux-points gratuit. Alors. En fait, je suis juste allé de l'avant et je me suis connecté et parce que je ne me suis vraiment pas réglé beaucoup plus, je pense que votre processus d'inscription va vraiment ressembler à cela indépendamment, ainsi de suite pour surmonter l'obstacle de mettre dans votre adresse e-mail et en procédant, alors vous allez probablement finir sur un écran comme celui-ci où vous allez être demandé pour vos informations démographiques juste pour leur enregistrement garder mon pays et sont énormes sur sa Jamaïque. Et je lui cite mon numéro de téléphone que je pense faire. Et puis ils disent, voulez-vous vérifier votre identité par téléphone ou le besoin par carte ? Donc, je vais choisir me prend par téléphone et je viens juste d'avoir le texto. Ça n'a pas pris longtemps du tout. Donc, je vais juste mettre ce code et ensuite vérifier. Maintenant, voici la partie qui pourrait vous dissuader si vous n'êtes pas prêt pour cela, ils voudront vérifier votre identité par carte afin que vous ne soyez pas facturé à moins que vous ne soyez mis à niveau, ce qui signifie qu'ils ont un plan d'abonnement à la clause YOU différent, donc exact. Non, vous vous inscrivez à l'abonnement gratuit. Une fois que les abonnements gratuits sur le plan est fait, alors vous ne serez pas en mesure de faire grand-chose sur la plate-forme tant que vous n'avez pas envoyé nos nouveaux abonnements sur la marque, ce qui coïncide avec ces mises à niveau. Donc, comme je l'ai dit plus tôt, il y a p Comme vous allez Et puis il y a un test de slash de développement payer-as-you-go, qui est celui sur lequel je suis, ce qui est comme la moitié du prix sur le cool PICU régulier. J' ai donc fourni l'inflammation de ma carte quand je me suis inscrit. Et après avoir fait cela, vous pouvez cliquer sur leur fait cliquer accord si vous ne parlez pas de carte ou si vous n'êtes pas à l'aise avec fournir les détails de notre carte alors. Miam, et tu peux t'arrêter ici, c'est bon. Plus tard, lorsque nous déployons réellement sur Azure, vous pouvez toujours voir à quoi cela ressemblera et voir à quel point cela vous est bénéfique. Quoi, si vous le souhaitez, alors vous pouvez aller de l'avant et fournir vos informations, puis cliquez sur l'accord et accepter les termes de l'accord et ensuite vous seriez dans la plate-forme. Donc je vais juste me connecter à mes cônes Rayleigh, pourrait citer le cône de Rayleigh, mais celui que j'utilise et vous montrer à quoi ressemble un 0. Eh bien, en fait, j'ai juste tapé dans Puerto dot 0.com en espérant qu'ils me demanderaient de me connecter, mais je l'ai fait et il a juste réécrit ce mus en semblant un cône que je mettais juste en place George Williams sur gmail.com. Donc ce tableau de bord, donc c'est le tableau de bord au niveau très basique, ils ont un panneau sur le côté ici listant ODE. Un certain nombre de services que vous pouvez obtenir. Mais alors, parce que nous n'avons pas terminé la série de quatre parce que je n'ai pas terminé le règlement, au moins quand je vais aux abonnements, je vais voir que je n'ai pas d'abonnement, non ? Donc, comme je vais vous voir dans l'abonnement est comment le taux que vous en tant que client, ce soit votre bloc d'alimentation, objectif, entreprise ou autre. Donc, si j'ai décidé plus tard que je voulais fournir mes informations, je peux juste revenir et cliquer sur ajouter. Et puis cela m'amènerait à compléter le signe de procédure où j'ajoute réellement l'abonnement. Et c'est donc un procès gratuit sur cette guerre. Sachez juste que vous avez le soutien des développeurs d'objectifs PSU car vous en avez quelques-uns, d'accord ? Donc, j'irais probablement avec la paye quand tu pars. Mais que oui, tout cela est dans les étapes de l'inscription à Azure, et c'est si vous souhaitez continuer avec cela. Mais pour ce tutoriel vraiment et vraiment, je voulais juste que vous alliez jusqu'au tableau de bord afin que vous puissiez voir que c'est à quoi ressemble un Xero. C' est ce que le portail de gestion de la charge de travail vous pouvez configurer vos machines virtuelles. Mais pour ce cours, nous allons chercher des services. 51. Deploy l'application et la base de données dans Microsoft Azure: Parce que nous reviendrons. Donc, nous avons déjà mis en place ou un zérocoins et tout ce que nous voulons réellement déployer. Donc avant de le faire, je voulais modifier la configuration de la motoneige à l'endroit où vont nos fichiers journaux parce que dans un Xero il y a un lecteur LC, il n'y a pas de sec. Donc, ce que je vais faire est de laisser Cyril Log créer un dossier dans toute la structure de dossier pour le projet. Et c'est là que seront les journaux. Ainsi, lorsque nous allons sur Azure, nous n'avons pas à nous soucier de n'importe quel chemin ou à devenir trop fantaisie. Alors passons et publions. Maintenant que cela étant dit, je fais juste cela localement pour la simplicité, il y en a des tonnes d'autres. Qu' est-ce que je dis robuste vante mécanismes de journalisation que nous pouvons profiter de comprendre cela parce que je voulais trouver le moyen le plus rentable parce que les autres coûtent de l'argent que vous ajoutez sur. Très bien, alors nous allons juste cliquer avec le bouton droit. Allez à publier. On va mettre en place un nouvel éditeur. fluorophores ont déjà un profil pour le déploiement local, qui est un profil complet, non ? Donc, je peux juste renommer celui-là pour que je sache exactement à quoi il sert. Profil I S. Sûr. D' accord. Eh bien, j'en veux un nouveau. Et celui-ci va être le profil d'Azara. Donc, ce que je veux faire est déployé sur un service Azure up. Non, si tu ne le sais pas beaucoup, je vais citer Azara dévêtue. Ce qui se passe, c'est que vous pouvez déployer une application sur une obligation en tant que contrainte de service, ce qui signifie que vous n'avez pas à vous soucier de ce serveur ou quoi que ce soit. Ils vont juste préparer la nuit, avoir un joli conteneur pour toi et mettre ton code là. Et puis ils tiendront des trucs faits comme ça pour que tu deviennes comme un cis, pas vrai ? Ou plutôt ce serait la plate-forme de services en tant que service. Donc, ils fournissent la plate-forme comme un service pour vous de juste la mettre en place dessus et il va juste fonctionner. Donc, c'est ce qu'ils veulent dire par l'observation est, et puis ce qu'ils voulaient acheter un Windows ou Linux, nous allons utiliser Windows. Sinon, il peut le faire conteneur ou à un registre de conteneurs ou à une machine virtuelle. Donc, fondamentalement, le même genre de considérations qui auraient été faites avec le déploiement IIS sur votre machine ou votre machine réseau, vous devriez faire ce genre de considérations contre une machine virtuelle dans Azure car c'est la même chose que juste un serveur CM de machine virtuelle. Et il Hall, nous allons choisir la plate-forme comme un service. Le service, puis cliquez sur Suivant. Et puis celui-ci, non, il peut vous inviter à vous connecter. Donc, vous devez dire dans, en bien honoré descendre à l'intérieur de ce petit Swami, il vous montre le groupe de ressources d'abonnement. Et je n'en ai pas beaucoup. Donc, je vais juste aller de l'avant et appuyer ce scientifique plus commencer à construire sur le service aux États-Unis pour le nom. Je ne vais pas changer de nom. Et puis j'ai quelques groupes de ressources, SIR, des projets de foss. Mais je vais en créer un tout nouveau. Je vais appeler ça une liste totale. Api. C' est donc le nom de ce groupe de ressources. Et puis le plan d'hébergement ici, je peux le laisser sur la valeur par défaut, mais alors ils ont un plan d'hébergement gratuit. Et en fonction de l'endroit où je suis dans le monde, l'Est des États-Unis est mon meilleur pari. Et choisissez gratuitement. Donc vous pourriez être ailleurs dans le monde, vous choisissez la raison la plus proche de vous, mais en fonction de l'endroit où je suis, États-Unis de l'Est sont mon choix raisonnable. Choisissez maintenant les déploiements gratuits. Cliquez sur OK, puis crée. Et puis une fois ce processus terminé, nous pouvons aller de l'avant et cliquer sur suivant, puis nous pouvons actualiser. Il n'y a pas d'apologistes, donc je ne veux pas de gestion. Je vais juste sauter cette étape et ensuite nous cliquerons. Donc, l'écran suivant nous montre quelle sera l'URL de notre site. Donc, quel que soit le nom de l'AP est que nous nous asseyons là point, point 0, websites.net parce que c'est gratuit. Ils nous donnent un sous-domaine. Et nous pouvons toujours aller de l'avant et l'acheteur sur le domaine si nous le voulons, mais nous n'aurons pas si loin, mais nous allons causer que nous avons une dépendance de service sur une base de données. Ils voient si vous devez configurer votre base de données à des fins de connectivité, n'est-ce pas ? J' ai donc besoin d'aller dire configurer. Et puis les derniers, voulez-vous une base de données SQL Server locale ou est-ce Azara SQL ? Donc, une fois de plus, nous irons avec l'option PAS où ils ne font que nous fournir un service dans le cloud. Et on a juste besoin de se connecter. Donc, nous devons aller de l'avant et créer une toute nouvelle instance d'un nom d'hébergement de service Nitobi, service hôtelier, DVD, AC sorte de remplissage charger certaines choses. Je vais le mettre dans le même groupe de ressources dans son ensemble à l'API de listage. On y va. Et puis serveur de base de données, je dois en créer un nouveau. Donc ça va remplir certaines choses, mais je vais devoir entrer mes coordonnées administratives. Donc, et le mot de passe Bartov, qui est assez terriblement stricte. Assurez-vous donc juste que vous avez un carton spécial, lettre majuscule et un chiffre et vous devriez aller bien une fois que vous avez dépassé sept caractères. Donc, une fois que vous avez mis tous ces détails, vous pouvez aller de l'avant et cliquer sur OK. Il remplira automatiquement ce qu'il doit remplir. Il n'a pas besoin d'un, créer le serveur de base de données et ensuite vous auriez accès à celui-ci. Droit ? Et c'est terminé. Alors, allons cliquer sur Suivant. Et puis ce qu'il fera est de dire, ok, c' est le nom de la chaîne de connexion à la base de données. Quel est le nom d'utilisateur ? Nous devons donc remettre le nom d'utilisateur que nous utilisons pour créer la base de données et le mot de passe. Et puis il le gardera dans la section bouleversante d'Oziah. Nous pouvons choisir le coffre-fort de clé, mais je vais juste laisser cela comme paramètres par défaut là. Et puis si nous voulons à nouveau afficher réellement la valeur de la chaîne de connexion. Donc, je peux vous montrer que la source de données, c'est la connexion à la base de données réelle dans Azure, non ? Donc, si je le copie juste pour mes propres fins. Cela montre le catalogue initial, c'est le nom de base de données pour lequel l'ID utilisateur sera vrai à ce point quel que soit le domaine et le mot de passe, j'ai utilisé un mot de passe simple, bien sûr, dans un contexte réel, vous utiliseriez un plus mot de passe sécurisé. Pour que nous puissions faire est d'aller de l'avant et de cliquer sur Suivant. Et nous n'avons pas à toucher à quoi que ce soit ici et à dire « Finis ». Très bien, et maintenant nous pouvons cliquer sur Publier. Et cela peut prendre un certain temps parce qu'il doit créer quelques ressources. Et cela signifie que vous publiez l'application sans grouper l'exécution, en prenant la compatibilité d'exécution. Pour que nous puissions donner ça. Le résultat final de cette vérification, cependant, est qu'il lance le navigateur et m'envoie cette erreur 500. D' accord, au moins, on sait qu'il répond. Donc, l'API est là, mais nous avons encore quelques choses que nous devons faire. Alors commençons par aller sur notre portail. Donc seulement cliquez sur gérer dans un portail 0, nous sommes navigués à la vitesse nous montrant l'application en cours d'exécution dans un 0. Bon, donc on sait que ce n'est pas adoré, c'est là. Nous cliquons sur les bros. Il est bon de nous montrer l'URL, désolé, prédite par HTTPS. Et on s'en remet à 500. Donc nous ne sommes pas, nous ne sommes pas mieux qu'avant, mais au moins nous pouvons confirmer quelques choses. Maintenant, si nous passons à la configuration, cela nous montrera certaines choses comme notre chaîne de connexion. Très bien, alors rappelez-vous cette chaîne de connexion et cette valeur cachée, au moins à partir de cette chaîne de connexion, je peux voir le serveur de la base de données. Donc je vais juste copier ça. Souviens-toi que je t'ai montré tout à l'heure, donc je vais juste copier ça. Et puis dans le studio de gestion, je vais essayer de me connecter à, il va juste cliquer dessus. S' il l'avait déjà ouverte, c'est bon. Si ce n'est pas le cas, vous êtes lancé dans Management Studio, puis vous nom du serveur et toutes les informations d'identification disponibles et cliquez sur Se connecter. Et cela vous invitera simplement à vous connecter. Donc, ce qui se passe est que le pare-feu voit que je n'autorise pas accès à la base de données à partir d'une autre source qui est en dehors de 0. Donc, pour l'instant, ce que je veux faire est juste de me connecter et ensuite il ajoutera une exception pour l'adresse IP que j'utilise. C' est donc une caractéristique de sécurité importante. Je serai donc derrière cette adresse IP. Quelqu' un de chez lui avec une adresse IP différente ne pourra pas accéder à la base de données à moins qu'il ne se connecte et vérifie comme je le fais maintenant. Donc, je vais juste y aller et cliquer sur OK. Bien sûr, il y a des moyens d'autoriser l'accès de partout, mais nous n'avons pas besoin de le faire dès maintenant. Et puis quand je regarde dans la liste des bases de données, nous voyons notre base de données. Donc je confirme juste que notre base de données l'est. Mais regardez ça, il n'y a pas de tables. Et ce que je vais faire est de modifier le profil et d'aller dans les paramètres. Et on a sauté cette étape. Je suppose qu'on est trop impatients, non ? Donc, nous n'avons pas fait les étapes de migration, appliquer cette migration sur publication. Et bien, nous avons déjà utilisé leur propre chaîne de connexion avec la nouvelle base de données hébergée au moment de l'exécution. Donc ce n'est pas vraiment nécessaire de cocher à nouveau, mais c'est bon. Et je vais enregistrer et puis je vais juste cliquer sur publier à nouveau. Et si nous regardons simplement le journal, vous voyez ajouter la base de données. Et puis vous voyez ici, cela nous donne quelques indications sur des scripts qui se produisent. Alors vérifions deux fois. Et ce qui se passe cette fois, c'est que parce que nous avons dit appliquer les migrations, il est effectivement allé de l'avant et le rempli toutes les tables pour nous. Très bien, donc c'est la partie vraiment importante de tout ça. Donc, nous n'avons pas eu à distribuer manuellement. Encore une fois, il serait prudent de votre part dans notre scénario réel de production contrôler ce processus un peu plus que nous ne pouvons le faire sur nos projets personnels et dans notre temps personnel. Bon, donc vous pouvez vérifier mon autre cours sur le déploiement et le contrôle de la production dans les environnements. Mais pour cela, nous sommes juste, nous voulons juste mettre notre API en marche et comprendre, oh, tous les systèmes ont fonctionné ensemble. C' est donc notre base de données qui fonctionne actuellement sur votre serveur. Revenons donc à notre console de débogage au lieu de kudos, allez à la racine du site www. Et puis rappelez-vous que nous avons dit « Mettez l'amour la même racine que le système de fichiers ». C' est pourquoi nous avons accès à notre dossier de journaux ici, qui nous montrera notre journal depuis que nous avons effectué ces déploiements. Donc, si je vais de l'avant et le télécharger, nous l'ouvrirons dans une nouvelle session de navigateur. Et je voulais juste voir pourquoi à travers l'erreur la plus récente. Donc, il dit que quelque chose s'est mal passé avec un argument pas comme sip fils, erreur de référence de stringer, et un encodage qui est censé se produire dans les extensions de service ligne 46. Donc, si nous allons juste regarder le code et voir ce qui se passe exactement sur cette ligne. C' est là que nous configurons notre JWT. Et vous voyez qu'on fait tout ça. Et c'est là qu'il dit que l'encodage a échoué. Et ça a échoué parce que nous cherchons C0. Et C0 est vraiment une variable d'environnement appelée clé. Souviens-toi qu'on devait juste s'asseoir, c'est ouvert. Je suppose que nous devons faire la même chose que votre, d'accord, donc ce que je vais faire est de retourner à notre tableau de bord de gestion, passer à la configuration. Et puis à partir d'ici, je peux dire de nouveaux paramètres d'application. Je vais dire que le nouveau paramètre d'application est clé avec la valeur. Donc je veux dire, je peux continuer cette même valeur. Je vais probablement utiliser une valeur plus simple, mais pour la cohérence entre l'environnement, vous vouliez probablement sembler des choses. Donc c'est, vous savez, l'un ou l'autre soit utiliser un simple dans corps de développement d'un complexe en production, soit vous utilisez un par environnements. Pour la sécurité et la séparation des rôles, des situations, développeur pourrait ne pas être en mesure d'entrer dans la production et de manipuler quoi que ce soit parce qu'il ne sait probablement pas. Mais pour plus de simplicité, je vais juste garder la clé Cmd à travers. Et je vais cliquer sur OK. Allez-y et sauvegardez cela, continuez. Et il utilisera dire que nous allons redémarrer l'application, c'est très bien. Allez-y et redémarrez. Et une fois que cela est redémarré, je vais aller à la vue d'ensemble, aller à terriers sont à pour que nous ne puissions pas bros nulle part. On a ça, chez Sally, on a un 500. C' est la même erreur que nous avons eu si vous avez traversé le déploiement iOS. C' est tout ce qu'on a, les victoires et la route. Donc, si je dis slash swagger, alors cela me conduira au document swagger hébergé sur nos sites Web Azure. Alors je vais aller de l'avant et faire un test rapide. Donc je vais essayer de faire exécuter le pays. Et puis j'ai récupéré avec succès tous les pays actuellement dans la base de données. Donc, si j'ai essayé d'utiliser le facteur, je vais juste copier cette URL à Postman. Et je vais juste créer un nouvel espace de travail parce que parfois vous pouvez surpeupler ceux. Je vais donc créer un nouvel espace de travail, encombré Azur. Et ce que je vais faire ici, ce sont juste des demandes liées au magazine Dwell, non ? Donc le pays que je voulais obtenir, il n'y a pas d'auteurs est au sommet. Mais comme vous pouvez le voir, vous pouvez obtenir tous les pays tout de suite. Essayons une de ces tentatives d'enregistrement et ensuite de faire quelque chose qui est sécurisé. Donc, je vais juste basculer entre l'espace de travail d'origine où j' avais déjà les demandes et ce nouveau. Donc je vais juste aller au poste. Je viens de copier ça. Et au lieu de vous ennuyer avec la création, c'est juste que je l'ai fait. Donc, le nouveau point final serait quel que soit le nom du site Web est barre oblique, puis les API. C' est pourquoi je ne l'ai pas supprimé depuis le déploiement IS que j'ai levé parce que c'est plus logique ici. Droit ? Cachez une connexion slash de cône et ensuite nous pouvons envoyer. Et j'ai une cause arabe, j'ai eu la charge utile de connexion au lieu des apologistes de registre. Donc, nous faisons notre registre et nous avons la charge utile des chariots avec le mot de passe e-mail. Et c'est le même que nous avons testé à partir d'un que nous sommes sur notre local. Donc, je veux juste vérifier que tout fonctionne toujours comme il fonctionne localement et que nous obtenons notre outil pour être accepté. Donc c'est bien. On est sous un camion. Donc, ce que je peux faire est de répéter la demande de connexion. Donc il suffit de cliquer dessus, apporter la demande de connexion et ensuite nous pouvons envoyer plus grand Tolkien. Excellent. Et puis ce que nous allons faire est d'essayer de supprimer notre création sont quelque chose que nous savons que nous avions dit que l'un de ces drapeau autorisé. Et bien sûr, je ne vous ennuie pas de former le lien où vous savez qu'ils doivent former le lien correctement. Le point de terminaison est api slash hotel avec l'ID. C' est la méthode de suppression. Et puis nous ajoutons notre jeton de porteur d'autorisation et le jeton que nous venons de revenir de la connexion. Et puis lorsque nous cliquons, nous récupérons notre outil sans réponse de contenu. Donc, si je vais dans la base de données juste pour vérifier, une fois de plus, notre base de données Azur, nous pouvons vérifier que nous n'avons plus d'hôtel avec l'ID3. Donc, nous savons que nous pouvons enregistrer un utilisateur à notre connaissance publiquement l'API diploïde. Donc, si je rendais ce lien plus facile à retenir, alors vous pourriez vraiment y accéder. Certes, au moment où vous faites cela, écoutez, cela n'existe probablement plus, mais le fait est que c'est ainsi que vous pouvez publier votre API dans le monde entier. Et en utilisant swagger, vous avez rendu facile pour tout le monde de pouvoir passer et dire, Oh, c'est comme ça que fonctionne ce point de terminaison. Et ce sont tous ceux-là. Et vous voyez que nous avons conservé notre pays V2 pour parler de version amble de nos API. Nous conservons l'API par défaut des prévisions météorologiques, mais bien sûr, non, nous pouvons nettoyer toutes ces choses. Et certains nettoyages que je suggère seraient comme avec le pays et l'hôtel vraiment et vraiment, j'aurais dû appeler ça les points de terminaison. Les pays et les hôtels sorte de contrôleurs vraiment dû être contrôleur des pays et contrôleur des hôtels. Mais c'est de la sémantique. C' est juste une question de présentation sur à ce stade, nous pouvons confirmer que la fonctionnalité est opérationnelle.