Transcription
1. Introduction: Bonjour et bienvenue dans mon cours, développement d'
API minimale
ASP.Net Core. Je suis votre instructeur pour War Williams et je suis ingénieur
logiciel et conférencier, ce
que je fais depuis 12 ans. Dans ce cours, nous allons comprendre comment nous
développons des API minimales à comprendre comment nous
développons des l'aide de dotnet six, nous allons comprendre verbes d'API
entiers
fonctionnent ensemble, light et Entity Framework
Le cœur s'est combiné pour nous
donner un endroit où stocker
et récupérer des données. Nous examinerons également l'
injection de dépendances et des
documents Swagger entiers nous aident à
interagir avec notre API. Lancer ce cours va
utiliser Visual Studio 2022 et séquelles For dotnet. Visual Studio 2022 est
nécessaire pour utiliser dotnet six. Il s'agit d'un IDE entièrement équipé
et extensible, et il est très puissant
et nous permet d'en
faire beaucoup plus pour le développement. Donc, sans plus tarder,
commençons.
2. Aperçu de l'API: Bonjour les gars, bienvenue
au début de cette nouvelle section
où nous
travaillerons sur une API RESTful pour
compléter notre application mobile. Nous avons donc déjà examiné toutes les
bases de Maui. Mais maintenant, nous voulons créer
une vraie application. De manière générale, les applications
mobiles communiquent avec APA, c'est pourquoi beaucoup
d'entre elles ont besoin d'un accès à
Internet. Maintenant, si vous n'êtes pas si familier
avec ce qu'est une API, je vais
vous expliquer quelques-uns des principes de base dès maintenant. Et si vous voulez vraiment approfondir plus de
détails vous pouvez consulter mes autres
cours où je vous amène travers la sonnerie
avec la conception de l'API. Mais pour ce cours, nous
allons rester assez
simple pour que
nous puissions mettre en place
une API et voir
comment nous pouvons consommer et interagir avec cette API
via notre application mobile. Nous sommes maintenant en train de créer
une API RESTful. Et poignet est l'acronyme de Representational
State Transfer. Il s'agit essentiellement d'une norme
ouverte qui permet à tout type de
client d' interagir avec point de terminaison et d'accéder à certains, ce que nous appellerons des ressources informatiques. Par exemple, prenons une
application comme Facebook. Nous sommes Facebook sur
notre téléphone mobile, ou si c'est sur notre Internet, nos navigateurs Internet,
nous l'avons sur divers appareils et nous
avons des applications
pour Android, iOS, etc. Le fait est que chacune de ces applications n'est pas réalisable,
construite à partir de zéro. Il s'agit en fait d'
interagir avec une API développée par Facebook
et continue de développer. Et c'est pourquoi lorsque
vous recevez des mises à jour, ce qu'ils
font peut être rester dans quelque chose, l'API et ils doivent mettre
à jour la façon dont elle interagit avec cette API. Mais essentiellement, l'
intelligence repose sur l'APA. Et puis, comme il s'agit
d'une norme ouverte, peu importe
qu'il s'agisse d'un appareil Android ou d'un appareil Windows, votre téléphone portable, votre montre mobile ou de
votre montre connectée. Tous peuvent interagir avec ces API standard ouvertes ou
ce service
Web qui
est généralement conforme au style
architectural du reste. Lorsque nous parlons d'
API et d'API
reposantes, nous voulons nous
assurer que nous sommes à l'
aise avec certains
concepts . L'une est uniforme, ce qui signifie
qu'il existe un moyen standard de formuler vos URL
et de répondre à ces appels. C'est encore moins. Vous ne
trouvez donc généralement pas que les cookies et autres fichiers sont générés sur l'appareil pour prendre
en charge l'API. L'appel est fait une fois que j'
appelle
ça fini, ça l'oublie. n'y a rien de vraiment
retenu, n'est-ce pas ? Il peut être mis en cache, ce
qui signifie que parfois vous
souffrez d'une inflammation qui est
toujours demandée. Donc, au lieu d'aller à la base de données ou au
magasin de données,
nous y mettons chaque fois un argent pour que l'API puisse réagir
plus rapidement en cas d' inflammation plus fréquemment consultée
et
ne change généralement pas tant que ça. Il est superposé. Vous disposez donc de différentes
parties et couches de l'API pour limiter ce qui peut être fait à différents niveaux. ressource
représente généralement des bits de données ou un objet entre
la base de données et l'application
cliente. De manière
générale, lorsque vous nommez vos points de terminaison d'
API RESTful, vous voulez être autodescriptif. Donc, si c'est un point final pour faire face à
l'inflammation personnelle, alors vous voulez
vous assurer de dire inflammation de la personne. Ce ne sont donc que des principes. Ensuite, nous avons
les méthodes HTTP. Maintenant, nous avons différentes méthodes sous la forme de get,
put, post, delete. Ce sont les plus populaires que vous verrez être utilisés. Il y en a d'autres. Mais de manière générale, lorsque nous avons affaire
à une banque de données, nous voulons
effectuer des opérations. Nous appelons généralement cela des opérations de
foule. Nous voulons créer
des données dans la base de données, voulions récupérer les
données de la base de données. Nous voulons y
apporter des modifications ou le mettre à jour, et nous voulons le
supprimer ou le supprimer. Voyez donc le stérilet. Par conséquent, obtenez gère la
récupération lorsque vous souhaitez afficher l'enregistrement
ou un tas d'enregistrements. Mettre la demande I GET, put est le u, qui est mise à jour. Vous avez également un correctif, mais c'est un sujet
pour une autre fois. Pour mettre en œuvre le plus facile, nous allons travailler avec cela à nos
fins ici. Mais nous envoyons
des demandes PUT chaque fois que
nous voulons mettre à
jour les données. Nous avons la demande de publication
chaque fois que nous voulons créer des données. Et puis nous avons les demandes de
suppression,
qui, à mon avis, sont
explicites, sinon les plus
explicatives, l'
une d'entre elles, puis nous
avons la réponse HTTP. Voilà donc les demandes
que nous venons d'examiner. La réponse est celle que
le serveur renvoie. Nous avons donc généralement un XX
et XX signifie simplement un nombre, nombres comme 100,
entre
cent, cent et quatre-vingt-dix-neuf. L'axe des X représente
tout ce qui se situe entre 00 et 99100. Les codes d'état parlent généralement de la communication sur les
protocoles de transfert à 100. En général, le succès de
l'opération est le plus élevé. années 300, c'est qu'il y
a eu une redirection. 400 montre qu'il y avait
peut-être un mauvais centre de données
ou du client. Ainsi, le milieu utilisateur
reçoit des données que le
serveur n'a pas pu traiter. Nous dirions donc que c'était mauvais, une mauvaise demande ou que vous avez
demandé quelque chose qui n'a pas pu être trouvé
comme une erreur 404. Je suis sûr que tout le monde peut s'identifier
à une erreur de fluorophore. Ensuite, nous avons l'erreur 500, ce qui signifie que le serveur
est là où se trouvait le problème. Les données sont arrivées, mais
peut-être
que vous n'avez pas appelé ce
problème de connectivité de la base de données ou que le serveur était terminé
, l'API répondrait
avec une réponse 500. s'agit donc de
citations de réponses générales et il est très important d'obtenir ces
droits dans une bonne conception d'API. Tout cela pour voir que
notre API servira de point
d'interaction entre notre application mobile et
une base de données centrale. Tout ce que nous faisons
sur l'application mobile, nous voulons qu'elle circule à
travers l'API car c'est là que
sera la
vraie intelligence et c'est sur cela que
nous allons commencer
ce voyage. Dans cette section,
nous commençons la conception de l'API et nous
examinerons les bases, faisant suffisamment pour la mettre en œuvre et comprendre une fois de plus, si vous voulez plus de détails, vous peut consulter ce guide
ultime de développement de l'API ASP.Net
Core. Vous pouvez vérifier
tout ce que vous devez
savoir sur la conception correcte de l'API à partir de zéro. Dans ce cours, nous
gardons les choses simples. Dans la prochaine leçon,
nous allons mettre en place notre projet d'API et
faire tourner la balle.
3. Projet de configuration: Très bien, les gars,
bienvenue. Nous allons donc y sauter directement. Nous allons ouvrir
notre Visual Studio 2022 et nous allons
créer un nouveau projet, mais je veux une solution vide. Je préfère donc commencer
par une solution vide. C'est donc plutôt
une solution vide, sorte que je puisse donner
un nom à la solution , puis ajouter les
projets par la suite. Nous allons donc travailler sur
une application
mobile pour panier d'achat, n'est-ce pas ? Donc, liste de panier, donc je vais juste
dire liste de panier d'achat. C'est le nom
de la solution. Nous pouvons donc y aller de l'avant
et créer cela. Maintenant que nous aurons la solution, je vais créer
un nouveau projet. Je vais donc
directement la solution, Add New Project. Ensuite, nous pouvons ajouter
un projet API. Je vais juste
chercher une nouvelle fois l'API. Et puis je vais
utiliser une API Web
ASP.Net Core C-sharp . Et puis je vais appeler
l'API
point de liste de panier . Ensuite, nous avons frappé Next. Et voici maintenant quelques options
intéressantes pour nous. Et comme je l'ai dit,
je veux que cela reste relativement simple,
simple pour nous. Premièrement, nous allons
maintenant
utiliser dotnet Core six avec l'aperçu de Visual
Studio 2022, vous pouvez revenir à cinq, ce
qui, au moment de
cet enregistrement, a presque
atteint la fin de vie donc vous Je ne
veux probablement pas y aller. Dotnet Core à trois points a
toujours un support à long terme, que dotnet six et
dotnet sept sont en préversion. Pour des raisons de stabilité, je vais
aller de l'avant avec dotnet six. Et nous pouvons mettre en place un type
d'authentification. Mais pour l'instant, n'en choisissons rien, car nous le
ferons manuellement plus tard. Nous pouvons configurer pour HTTPS, nous n'avons pas besoin de plus sombre. Maintenant, c'est là que ça
devient intéressant. Nous pouvons choisir d'utiliser des
contrôleurs ou de les décocher, sorte que nous puissions utiliser des API minimales. Traditionnellement, nous utilisions
toujours des contrôleurs, mais je pense que ce
serait le moment idéal pour essayer de voir à quoi ressemble l'API
minimale. autant plus qu'il s'agit
vraiment d'une application légère, mais elle pourrait
grandir sur nous de toute façon. Je vais donc décocher
cette case utiliser le contrôleur
afin que nous puissions utiliser des API minimales, laisser le support des API ouvertes. Et ensuite, la prochaine option qui est plutôt intéressante est de savoir si nous voulons ou non
utiliser des instructions de niveau supérieur. Ainsi, avec dotnet six, les instructions de niveau supérieur
auraient été comme la fonction
principale et l'espace de noms principal, etc. Certaines personnes
auraient donc dit qu'elles préféraient le voir
fait en six, introduisant des classes de
style minimales où vous n'avez pas nécessairement besoin
d'être aussi explicite au sommet. Vous pouvez donc choisir celui
que vous voulez. Je ne vais pas utiliser les instructions de premier niveau
parce que je les aime comme ça. Et je vais juste cliquer sur Créer. Très bien, nous avons maintenant créé notre projet
API. Donc, si je vais dans program.cs, remarquez que si vous avez l'habitude de voir le dossier Controllers
dans votre développement d'API, vous ne le verrez pas ici
car nous décochons
les contrôleurs américains. Si vous choisissez d'utiliser des contrôles, pas de problème, vous devriez être
en mesure de suivre correctement. Mais parce que nous
faisons des API minimales, ou j'ai choisi les modèles d'
API minimaux. Ce qui se passe, c'est
que nous allons
voir tout ce qui se passe
ici même dans ce program.cs. Ainsi, une fois qu'un programme est exécuté, il crée toutes les
dépendances dont il a besoin. Ensuite, il passe
directement à l'exécution du code ou à savoir quel codage est
exécuté, puis il s'exécute. Donc, l'API va rester là
et attendre les demandes et tout fonctionne à peu près à partir de notre program.cs. Je vais juste faire
ça pour m'assurer que ça fonctionne et que ça marche. Et il lancera ce navigateur qui
nous montre notre document Swagger. Par conséquent, parce que nous avons choisi la prise en charge des API
ouvertes, nous avons automatiquement intégré
Swagger à notre API. Une fois que nous aurons exécuté cette opération, nous
verrons la documentation. Ainsi, plus il y a de
capacités de points de terminaison ce document se développe
automatiquement. C'est donc tout pour nous de créer. Lorsque nous reviendrons, nous mettrons en
place la politique du cours.
4. Configuration de la politique CORS: Très bien les gars, donc
dans cette leçon, nous mettons place notre politique de cours. Et j'ai tendance à faire cela comme
une des premières choses. Chaque fois que je crée une API, pourquoi ? Eh bien, l'API par conception est censée être consommée
par d'autres clients. autres sont des clients qui ne se trouvent pas
nécessairement sur le
même serveur que l'APA. Aucune voiture n'est un terme général
de sécurité pour n'importe quelle application
hébergée sur Internet. Et d'une manière générale,
cette politique dicterait que les ressources
différentes sont des demandes différentes plutôt, peuvent être facilitées par
l'application demandée. Tout ça à voir. La politique de cours
nous permet de rejeter les demandes provenant de certaines
sources si toutes les sources sont faibles. Ainsi, lorsque nous avons le
mobile ailleurs, ou 60 millions d'
applications mobiles dans le monde entier et nos API
sur un serveur quelque part. Nous aurions besoin d'une politique de
cours pour dire, je ne sais pas, je ne peux pas suivre
60 millions de demandes et
60 millions de téléphones portables. Je vais juste permettre à
n'importe qui de me parler. Bien sûr, nous pouvons ajouter d'autres
mesures de sécurité à un autre niveau. Mais pour l'instant, nous utiliserons simplement la politique de cours pour nous
assurer que nous puissions faciliter demandes provenant d'
applications mobiles après coup, n'est-ce pas ? Nous allons y aller jusqu'à ce que les lignes sept dans le program.cs. Et comme je l'ai dit lors de
la dernière leçon, je n'ai pas choisi d'utiliser
les instructions de premier niveau. Donc, c'est tout droit
au but, non ? Il démarre simplement le
code parce qu'il sait
déjà que c'est
le program.cs, donc il n'a pas besoin de
déclarer int, void,
classe de programme, etc. Donc pas de classe void, vous
savez ce que j'ai vu ? Allons-y. Nous disons donc les
services de constructeur, points, ajoutent des voitures. C'est juste là. Et ce que nous allons
faire ici, c'est de mettre en place des options qui
guideront la configuration. Très bien, nous avons dit Options,
puis utilisez des accolades bouclées. Et laissez-moi agrandir
ça. Assurez-vous que nous puissions voir
me donner un peu plus de réalisme. Cela permet de s'assurer que nous pouvons tous voir clairement ce qui se passe. Très bien, créez donc les
services de points qui ajoutent CORS
sur le Web ou des options. Et puis à l'intérieur de nos
options vont avoir des options, point, ajouter, politique. C'est donc notre politique de cours. Nous devons lui donner un nom. Donc je vais juste dire un peu parce
que je ne suis pas prêt
à imposer des restrictions. Donc oui, ça
va littéralement être Bonjour à tous. Et puis je vais
lancer une autre expression lambda. Il suffit de voir une Lambda. Et puis c'est comme
une fonction de constructeur, donc je vais juste dire un point et ensuite je peux dire
autoriser n'importe quel en-tête. Cela signifie donc tout type
de demande qui arrive , est tirée, etc. Bien que cela ait commencé,
voyez n'importe quelle origine. Où qu'il soit, d'
origine,
c'est que les
demandes sont faibles, et puis je peux voir un faible, n'importe quelle méthode
autorise réellement n'importe quelle méthode est la méthode HTTP qui entre dans l'
en-tête est différent. Je m'excuse, l'en-tête fait
partie du corps de la demande. Et parfois, certains
frappeurs peuvent être des milices. Nous allons donc suivre n'importe quel en-tête, autoriser, n'importe quelle méthode, etc. Et voilà. C'est donc la politique
que nous avons mise en place. Non, nous devons laisser
le middleware, c'est
donc ici que nous
développons nos services. Mais le
middleware commence à la déclaration « up » ici. Et il a remarqué que la
variable ici change, non ? C'est, ou le
nom de l'objet change, il est en place des
points Builder, des services ou autre. Et donc, ce que
nous devons faire est
de faire savoir à l'AppBuilder
qu'il doit utiliser des cœurs. J'ai donc tendance à mettre ça
en dessous. Donc je vais juste
dire utiliser les noyaux. Utilisez donc le
middleware cors et
appliquez la stratégie
créée appelée faible. Très bien, alors surveillez les frappe à ce
moment-là, car c'est une corde magique. Vous risquez donc de
ne rien déboguer si vous avez
l'impression de renverser ces deux
chariots à droite. C'est donc vraiment cela pour
mettre en place notre politique de cours. Je peux m'arrêter ici parce qu'
il n'y a
pas vraiment de moyen tangible de valider
cela à ce stade. En dehors de l'
exécution de l'API, essayez de l'héberger
quelque part, puis d' y accéder
à partir d'
une autre machine. C'est donc vraiment
notre politique de cours. J'ai déjà expliqué pourquoi
nous en avons besoin pour cela. Ainsi, lorsque nous reviendrons, nous
continuerons à construire notre API.
5. Configurer la base de données SQLite: Bonjour les gars, bienvenue. Dans cet épisode, nous allons
construire notre base de données. En général, bien sûr,
pour une application qui va être mise à l'échelle
pour une utilisation importante, vous souhaitez utiliser une base de données de niveau
entreprise telle qu'Oracle ou
Microsoft SQL Server. Ensuite, l'outil phare de mappage
relationnel d'objet, ou la bibliothèque que dotnet Core nous donne l'
interaction avec la base de données. Le phare est
Entity Framework Core. Sachez qu'il a des connecteurs
pour de nombreuses autres bases de données, donc je ne
vous dis pas que vous
devez utiliser la base de données que
je suis sur le point d'utiliser, mais je reste
assez simple, mais je vais expliquer le concept général
pour vous afin que vous puissiez comprendre pourquoi je prends ces
décisions. Donc, pour ce cours, je vais simplement utiliser une base de données de
suite qui
restera à l'intérieur du
dossier avec l'APA. Mais encore une fois, dans une application de
niveau entreprise, vous souhaitez vous connecter à
un serveur distant pour une base de données de niveau entreprise
telle que Microsoft SQL Server. Donc, pour intégrer Entity
Framework dans notre projet, je vais cliquer avec le bouton droit sur le projet, puis
accéder aux packages NuGet. Et ensuite, nous
allons simplement aller dans Browse et je vais
chercher Microsoft dot Entity
Framework Core, suite légère. Encore une fois, si vous souhaitez
utiliser une autre base de données, vous
savez peut-être déjà
comment la connecter à SQL Server. Ensuite, vous cherchez simplement Microsoft mais Entity
Framework Core, et vous verriez
les différents mourir
pour SQL Server , pour mon SQL
,
etc. , pour mon SQL
,
etc. vous
dites simplement Entity Framework, Core, duct et l'
ingénieur de base de données, que vous préférez. Ensuite, vous trouverez
les bibliothèques. Quelqu'un à télécharger. Entity Framework Core
fait suite à la lumière, et cela viendra avec
quelques bibliothèques supplémentaires. Laissez-moi donc
télécharger et installer cela et accepter
tout ce qui se présente. Pour cela, j'aurai également
besoin d'une autre bibliothèque, qui est la suite de
points de données Microsoft dot light dot core. Je peux donc aller de l'avant
et attraper celui-là. Cela me permet d'effectuer
d'autres opérations importantes. Je vais aller de l'avant et installer ça. Revenons maintenant à notre program.cs et
commençons à le câbler. Je vais donc juste mettre quelques configurations et ensuite vous guider à travers elles. Ce que nous faisons ici, c'est que
nous configurons un dossier. Très bien les gars, alors
revenons à notre program.cs. Et je vais juste mettre
quelques
lignes de configuration et ensuite vous
expliquer ce
qui se passe lorsque je
configure le chemin de la base de données. Ainsi, le chemin de la base de données
va simplement aller dans le dossier racine et créer un fichier appelé
panier dot db. Ensuite, la chaîne de connexion que je viens
d'appeler une escroquerie est égale à une nouvelle connexion
SQL Lite. Bien sûr, au fur et à mesure, vous devrez inclure certaines références
manquantes. Il suffit donc de les inclure
comme vous les voyez. Et la source de données sera égale
au chemin de la base de données. Ensuite, nous disons construire des
services dans le contexte de la base de données. Et nous avons le contexte DB du
panier d'achat, qui a une ligne rouge parce qu'
il n'existe pas encore, mais allez-y et
mettez-le indépendamment. Ensuite, nous avons mis en place
l'option que nous utilisons la suite ITE, et c'est notre connexion. Très bien, nous pouvons donc
créer ce fichier. Je vais juste contrôler les points et je le générerai
dans un nouveau fichier. Nous avons donc le contexte DB du
panier d'achat. Maintenant, je vais d'abord
rencontrer ce public ,
puis je vais le rendre
hérité du contexte DB. Donc, une fois que vous faites cela, bien
sûr en mettant tout manquant,
manquant en utilisant la
référence en conséquence. Maintenant que j'ai
ces contextes DVI, je veux notre constructeur. Ensuite, ce
constructeur va initialiser notre coche dans le contexte DB, les options de
contexte DB. Et ces options se
prendraient comme son type. Nous allons juste appeler cela Options et ensuite nous le
transmettrons à la base, non ? Donc, essentiellement, ce que
nous faisons, c'est d'injecter les options
provenant de notre program.cs. Et ce seraient les
options ici, vous voyez la lumière. Et ils ne faisaient
que le transmettre à la base, qui est le contexte DB
que nous utilisons. Appelez ITE. Très bien ? Non, nous avons vraiment
besoin d'une table. Je vais juste dire « accessoire ». Ensuite, je vais
créer un nouveau type de données. Je vais juste appeler ça
un panier d'achat. Et appelons ça des
paniers. Très bien, donc si nous construisons une
application mobile, réfléchissez-y. Vous créez une application
mobile pour aider
les utilisateurs à compiler ce qu'ils
veulent lorsqu'ils font leurs achats. C'est essentiellement ce que
nous faisons ici, non ? Plus tard, au fur et à mesure que l'application évolue, nous voudrions peut-être mettre
en place un moyen identifier à quel enregistrement de
panier appartient, à quel utilisateur ou quel utilisateur a ces
intérêts en deux. Mais comme je l'ai dit, je
reste très simple. À ce stade, au fur et à mesure que nous
évoluons, nous pouvons mettre des choses plus sophistiquées. Et je l'ai mis
au mauvais endroit, cela ne devrait pas être
dans le constructeur. Je m'excuse, ça devrait
être après le constructeur. On y va. Il s'agit donc de la propriété
dans le contexte EB. Dans le Framework Core, je devrai le faire
dans les propriétés. Et en fait, il devrait s'agir d'un ensemble de
base de données de type panier d'achat. Je me demandais pourquoi
ça a l'air si bizarre. Donc, l'ensemble DB de type panier obtient que ce n'est pas le panier d'achat
est un type de données dont nous avons besoin. Je vais donc simplement créer ça. Et je vais simplement générer
cette classe dans un nouveau fichier. Maintenant, nous avons ce fichier de
panier d'achat. Je peux simplement appuyer sur F 12 avec son choix et il
sautera jusqu'à sa définition. Non, que possède un
panier d'achat ? Non, la plupart des entités,
et je dirais que chaque entité de votre base de données devrait toujours
commencer par NAD. Très bien ? Nous pourrions avoir le
nom de l'article, le nom de l'article. Très bien, comme je suis bien
là-dessus, je suis ici en train d'essayer de
prendre des raccourcis, mais c'est comme
mon, mes
sens de la programmation picotent. Premièrement, lorsque vous ajoutez
quelque chose à un panier d'achat, vous devez probablement saisir
le nom de l'article. Vous
saisirez probablement la quantité que vous comptez récupérer. Et peut-être voudriez-vous définir un indicateur pour voir s'il
est sélectionné ou non. Vous l'avez ramassé ou non ? Voici donc une chaîne
pour le nom de l'élément. Et ensuite, nous avons int
pour la quantité. Ou cela peut être le double pour la quantité, car on
peut dire 1,5 ou quelque chose comme ça. Oh non, vous pouvez choisir le type de données
approprié, donc la quantité et un
booléen qui dit l'est. Ce sont donc nos
types de données, n'est-ce pas ? Sachez que nous avons ce
bol que je courais. Maintenant que j'ai le modèle de
base pour
ce à quoi ressemblera
l'entrée de mon panier d'achat. Il est dit, revenez au contexte DB du
panier d'achat. Et ce que je vais
faire, c'est remplacer la méthode de création de
modèle. Donc, lorsque vous écrivez
le mot override, il vous demandera ce que
vous aimeriez remplacer ? Et nous remplacons
une création non modèle, et ensuite cela
générera tout cela pour nous,
donc nous avons besoin de cette première ligne. Ensuite, je suis allé voir une entité de points
ModelBuilder, ce panier d'achat. Ensuite, je veux
dire qu'il y a des données. Donc, dans ce cas, ce que
je fais, c'est que je
vais semencer la base avec des données afin que lorsque
nous lançons notre API pour vérifier, nous verrons des données là-dedans, n'est-ce pas ? Les données prennent donc
une collection d'objets de n'importe quel type que
vous spécifiez ici. Donc je dirais simplement un nouveau
panier d'achat et ensuite lui donner une pièce d'identité d'un qui est
récupéré serait égal à des chutes. Et le nom de l'article serait, voyons voir, savon et
c'est une chaîne. Et puis le dernier
serait la quantité. Et nous avons besoin de trois barres de
savon, par exemple, non ? Ensuite, il va juste prendre
une collection à peu près. Nous pouvons donc simplement une virgule, séparer ces objets autant d'
objets que vous le souhaitez. Bien sûr, chacun doit
avoir un ID différent, car id sera automatiquement considéré comme une clé primaire
dans la base de données. Alors, mélangeons un peu ça. Retrouvons ça vrai. Et cela serait élevé et nous devrions ramasser deux
miches de pain. Et celui-ci peut rester tombé, et celui-ci devrait être un shampooing. J'ai juste
inventé ça au fur et à mesure que n'
est pas la liste de courses de Mariel. On y va. Nous avons donc trois éléments
que nous voulons
insérer dans notre table de base de données
lorsque notre application est exécutée. Et nous avons presque
tout branché pour avoir une base de données à ,
au moment de l'exécution, n'est-ce pas ? Donc ce que je vais faire, c'est aller dans les paquets
NuGet et installer un paquet de plus,
au moins pour null. Et celui-ci serait outils de dock
Entity Framework
Core qui nous
donneront accès à certaines
commandes que nous pouvons exécuter car nous devons créer
la table dans la base de données. Nous allons aller de l'avant et obtenir
les outils, installer cela. Et si vous regardez simplement,
vous pouvez consulter mon cours Entity Framework Core si familier ou si vous n'êtes pas si à l'aise avec
Entity Framework Core. Mais en un mot, cela nous permet d'exécuter ces
commandes où nous pouvons ajouter une migration et la
mettre à jour pour qu'elle soit des commutateurs, ce sur quoi nous allons nous
concentrer en ce moment. Allons donc dans Outils et optons pour le gestionnaire de paquets
NuGet et lançons cette console. Et puis je vais dire
ajouter la migration des traits d'union. Et puis je vais juste dire
créer une base de données. Ensuite, nous appuyons sur Entrée, laissez-le y réfléchir un peu. Ensuite, une fois cela fait, nous obtenons notre fichier de migration, que je ne vais pas entrer dans les détails, mais en un mot, on voit créer une table et
insérer les données. Et nous avions mis trois
disques en tête de série, non ? Par conséquent, la commande suivante
serait mettre à jour la base de données de tirets. Si la base de données n'existe pas, elle va la
créer, puis elle
va ensuite insérer
tous les enregistrements. À ce stade, notre
base de données devrait donc exister. Vous pouvez aller de l'avant, construire
et exécuter et simplement le tester. Mais bien sûr, nous n'avons pas encore
construit le point final. Ainsi, lorsque nous
reviendrons, nous construirons le point de terminaison de l'API
qui nous permettra d' interroger ou de récupérer ces enregistrements que nous savons qu'ils sont
dans la base de données.
6. Explorer les méthodes GET: Bonjour les gars, bienvenue.
Nous venons donc de configurer notre base de données maintenant,
nous voulons configurer nos premiers points de terminaison afin de
voir ce qu'il y a dans la base de données. Parce que lorsque la base de données a été créée lors de l'exécution
lors de la création modale, nous voulions voir
ces enregistrements dans, donc au moins ces enregistrements devraient se trouver dans la
base de données et tout ce que nous
voulons au moins récupérer.
et voyez comment fonctionne l'API. Ce que nous allons donc
faire, c'est suivre le modèle qui nous a
été donné. Oui, ce sont des
prévisions météorologiques et oui, les données sont statiques
pour ce qui
est de ce tableau. Mais le principe qui sous-tend façon dont nous allons lire
notre code est le même. En dessous ou les prévisions météorologiques juste au-dessus de la course de points de l'application. Ce que je vais faire, c'est
écrire des points, serpiller, récupérer. Très bien, ce qui
se passe, c'est que pour toutes les méthodes que
vous souhaitez utiliser, vous pouvez voir une carte
puis le type de méthode. Donc, nous voulons obtenir,
obtenir plus de mon
PUT, poster ou supprimer, etc., n'est-ce pas ? Alors, au fur et à mesure que nous les traversons, vous verrez ce
genre de modèles. Nous verrons donc la vadrouille prendre, puis nous devons
lui donner l'adresse. Ainsi, pour obtenir les prévisions météorologiques, vous devez voir l'URL ou les prévisions du logo
oblique d'URL du serveur. Nous voulons obtenir les articles du
panier d'achat. On dirait une barre oblique dans notre
chaîne, des cartes de courses obliques. Très bien ? Et puis, ce que nous voulons
faire, c'est faire une opération asynchrone. Ensuite, nous sommes à peu près asynchrones et nous avons besoin de notre représentation
de notre base de données. Je vais donc
effondrer tout ce qui n'
est pas absolument nécessaire. Nous pouvons donc voir la plupart de ce que nous devons voir d'
un seul coup, n'est-ce pas ? Nous avons besoin d'une représentation
de notre base de données. Je vais donc devoir voir une base de données
asynchrone créer un objet. Je vais juste appeler ça dB. Ensuite, nous créons
une flèche Lambda. Ensuite, nous pouvons écrire à peu près
notre code. Très bien. Je vais juste
baisser ça et finir par un point-virgule. Et alors notre
code de fonction sera dans cette section de
la méthode, n'est-ce pas ? Je vais donc dire une base de données bizarre. Chariot à pois, paniers d'achat d'
université. C'est très bien. Liste. Donc, je dis à peu près
une étoile de cette table. Très bien ? Et c'est à peu près
ce qu'il va faire. Alors passons en revue ça, regardons ça beau et propre. Donc, si vous n'étiez pas
habitué aux API minimales et que vous êtes habitué aux
contrôleurs, vous savez quoi, car vous auriez un
gros fichier pour vraiment cette ligne de code avec une ancienne méthode
et tout. C'est donc une belle façon
succincte de voir. Lorsque vous atteignez ce point de terminaison, obtenez une copie de la base de données
à partir de notre générateur de services, interrogez et retournez, peu importe. C'est vraiment
tout ce que nous devons faire. Très bien, alors
essayons les orteils. Je vais juste
aller de l'avant et courir. Très bien, maintenant,
essayons ça. Je vais juste aller de l'avant
et exécuter le projet API. Et immédiatement, vous
remarquerez que nous avons nos nouveaux
points de terminaison, n'est-ce pas ? Nous avons donc notre point de terminaison GET. Nous pouvons étendre cela
, nous pouvons le voir, l'
essayer, puis
nous pourrons l'exécuter. Donc, à ce stade, il devrait
utiliser la méthode qui va à la base de données et
récupère nos enregistrements. Excellent, d'accord, donc maintenant nous
savons qu'une ou une API, oui, elle est exécutée dans notre base de données a été créée et les
enregistrements sont là en trois, nous sommes en mesure de les récupérer et interagir avec notre
base de données via notre API. Donc, avant de partir, je vais juste implémenter
l'autre type de GetMethod. J'arrive donc à récupérer des
données, n'est-ce pas ? En règle générale, vous voulez que
toutes les données
soient toutes les données, soit toutes les données
soient toutes les données, certaines données. Et la façon dont j'ai déterminé
la somme en serait quelques-unes. Donc, MOI SUM. Mais la façon dont vous déterminez le sous-ensemble de données
que
vous souhaitez
passer par un paramètre que
vous fournissez
, puis vous exécutez une requête
basée sur le paramètre. Tout cela pour voir des
difficultés dans un APA, vous avez deux types de portes. Avant tout autre type de portes, vous avez le Git, qui
renvoie tout. Et puis vous obtenez un identifiant
unique qui devrait
généralement en renvoyer un ou ne rien renvoyer s'il ne
pouvait pas être trouvé, non ? Donc, tout ce que je vais
faire, c'est copier et coller cette méthode getter. Je vais modifier l'
URL et je vais voir la barre oblique du
panier,
puis mettre
un modèle à barre oblique du
panier,
puis mettre l'aide d'
accolades bouclées et de dire id. Donc je m'attends à ce que lorsque
vous appelez ce point de terminaison, vous allez
indiquez une valeur d'identifiant, ce qui signifie que vous souhaitez que l'
enregistrement soit muni de cet ID. Maintenant,
dans cet en-tête de délégué ici, je vais ajouter un paramètre pour faciliter
la collecte de l'ID. Donc je vais juste dire int id, virgule panier d'achat DB contextuel. Nous savons que cela
est déjà fourni par le système. Cela ne vient donc pas
de l'utilisateur, mais nous facilitons la valeur
de l'identifiant entrant de l'utilisateur ici. Ensuite, notre requête va
ressembler différemment. Nous n'allons pas voir de cartes
d'achat bizarres. Allez dans la base de données
et trouvez un évier. Et puis je lui donnerai une pièce d'identité. Et puis je peux me
qualifier un peu. Non, car soit il
va le trouver et retourner, soit nous ne
voulons pas le trouver et le retourner. Ou nous voulons peut-être
revenir sans téléphoner. Donc, je peux voir que c'est le panier d'achat. C'est donc ma façon de voir ce qui a été
récupéré ici, un objet de panier d'achat. Très bien ? Et je peux faire une
expression lambda et je
vais casser les lignes pour que
ce ne soit pas si déroutant. Voyons donc voir. Je voudrais
renvoyer un résultat de type, ok, avec les données que
vous avez demandées, qui seraient l'objet
panier qui a été récupéré. Et j'en suis sûr, je suis sûr que si vous faites un
discours familier avec le C-sharp de base. Donc l'expression lambda, pas les
lambdas ou une opération ternaire. Oh mon Dieu, je suis désolé pour ça. L'opération ternaire serait donc une opération logique où
vous voyez ce que c'est, quelle est la logique que j'
évalue ? Est-ce vrai ? Est-ce faux ? Fais ça. Il a été trouvé et c'est un objet de type
panier d'achat alors, d'accord, on retourne ça. Sinon, les
résultats bouddhistes commencent à ne pas téléphoner. Et cela donnerait le 404
dont nous avons discuté auparavant. Maintenant, un autre que je voudrais probablement faire en ce
moment, c' est que si je voulais trouver tous les articles qui ont été
ramassés rapidement, n'est-ce pas. Le fait est que
les API d'arrestation vous sont, vous pouvez l'utiliser, comment vous pouvez les créer tout
ce que vous voulez. Vous devez simplement
vous assurer de respecter les normes. Je peux donc créer un autre
important ici à voir ramassé. Donc, s'ils appellent ce
point de terminaison, c'est juste censé renvoyer les éléments qui
ont été ramassés. Parce que rappelez-vous
où cette fleur vous voyez la ramassée
ou non ramassée. Donc, s'il est ramassé, seuls ceux qui devraient
revenir ici. Cela va tout
montrer. Et celui-ci ne va
rapporter qu'un seul objet. Très bien, jusqu'à présent,
ce que je vais faire, c'est dire que les paniers de
shopping db dot pointent où. Et puis nous avons mis dans
notre expression Lambda et notre état
où il est ramassé. Très bien ? Et parce que c'est booléen, je peux simplement le laisser comme ça. Et puis j'ai juste dit à
Piracy de lister, ce qui est notre déclaration d'exécution pour ou si la déclaration de cours. Et c'est tout. Et à peu près, nous venons de
créer trois
points de terminaison get en
quelques minutes, en quelques minutes. Donc, une fois que vous arrivez à tout, voulez ne recevoir que des objets
récupérés. Je ne veux pas obtenir quelque chose
spécifiquement par Adi, alors permettez-moi de le faire rapidement
afin que nous puissions évaluer ou travailler. Très bien, donc nous avons un swagger, nous avons déjà testé s'embêtent également
avec celui-là. Nous savons que nous avons au
moins un élément qui a été
ramassé était une vraie personne pour l'
essayer et l'exécuter. Et je ne devrais pas
tout récupérer à la place, je ne reçois que le seul objet qui est ramassé,
son vrai Excellent. Et puis si j'en veux un par pièce d'identité, je peux voir tout essayer. Je n'ai fourni que la pièce d'identité d'un seul. L'enregistrement que je reçois Buck
a une carte d'identité, non ? Si j'ai fourni une pièce d'identité de dix, sachant que je ne sais pas
ce que j'ai demandé dix je reçois cela pour les
quatre réponses non trouvées. Donc, toutes les
réponses fonctionnent, n'est-ce pas ? Remarquez que quand
il a eu du succès, on a retrouvé un accord de 200. Très bien, donc c'est la
réponse O key à 100 est correcte. Donc, lorsque vous voulez être précis, vous pouvez voir des résultats qui sont corrects. Si
vous retournez quelque chose, il
sera automatiquement activé. D'accord ? C'est donc vraiment pour nous de
créer ou d'obtenir des points de terminaison.
7. Explorer la méthode PUT: Très bien, les gars, donc nous
avançons dans notre aventure et nous allons passer
à la méthode put, non ? Ce que nous avons
jusqu' ici serait d'obtenir
des méthodes que nous pouvons récupérer, mais que se passe-t-il si nous en avons besoin pour les modifier ? J'ai peut-être fait une erreur
quand j'ai créé l'objet, quelque chose comme ça, non ? Je dois donc mettre la méthode PUT. Le put
prend donc à peu près les nouvelles données ,
puis indique que la base de données a remplacé les anciennes données
par ces nouvelles données. C'est essentiellement tout
ce qui se passe dans les sorties. Donc pour faire monter notre point de terminaison, je vais juste dire
les ports de carte points. Et comme je l'ai dit, vous
aurez mis à jour la carte. Et puis la méthode que vous voulez à peu près
après, n'est-ce pas ? Nous allons maintenant insérer notre modèle de
chaîne ou notre URL. Donc généralement, le port
ressemble à ce
à quoi ressemble ce
modèle. Donc, on obtient le même code oblique de
panier, n'est-ce pas ? Et puis nous voyons est
sink et int id. Ensuite, nous allons prendre un objet du type
que nous mettons à jour. En d'autres termes, nous allons mettre à jour
un article de panier d'achat. Cela signifie que si vous
m'envoyez un enregistrement à mettre à jour
dans ma base de données, vous
devez évidemment m'
envoyer l'enregistrement que vous souhaitez remplacer. Cet enregistrement serait-il cet ID, quelles sont les données que
vous souhaitez remplacer ? Essentiellement, c'est tout ce que c'est. Je dois donc mettre un paramètre de type panier,
panier d'achat. Rappelez-vous donc que id arrive
par le modèle, mais le port à demander enverrait
généralement les données pas dans le paramètre est comme ce qu'il ferait partie
de la requête, le corps. Nous verrons donc cela
dans quelques int id, panier d'achat, paniers. Et bien sûr, nous avons
besoin
d'une représentation de notre contexte DB. Et ce n'est qu'
un grand délégué. Et puis nous pointons le point-virgule sur
cette parenthèse. Maintenant, que dois-je faire ? La première chose est que je veux m'
assurer que tout ce que vous
essayez de mettre à jour existe
réellement. S'il n'existe pas, je ne trouverai
vraiment pas d'enregistrement que vous
essayez de mettre à jour. Je vais donc faire quelque chose
comme ce que j'ai fait ici. Je suis allé voir un poids, la méthode de recherche, mais avant cela, je dois l'
attribuer quelque part. Donc var nous permet de voir que l'enregistrement est égal à regarder dans les
paniers et trouver l'enregistrement avec
cet identifiant, n'est-ce pas ? Et en fait, permettez-moi de revenir un peu
plus tôt, de supprimer cette ligne. Ce
qui se passe, c'est que nous allons faire plusieurs choses. Donc, contrairement aux autres
où il y avait des monolignes, nous allons avoir
un certain nombre de choses à faire pour que notre délégué ne puisse
vraiment pas nous
permettre de mettre plusieurs lignes. Je dois donc mettre des accolades
bouclées au lieu
de ce corps délégué. Et je vais juste fermer ça. Et puis à l'intérieur de
ces accolades, je peux maintenant insérer les différentes
lignes de code que je veux. Donc ici, je peux voir que var record est égal aux
paniers d'achat db dot qui trouvent asynchrone. Et puis je peux finir
avec le point-virgule. Très bien ? Il s'agit donc d'un
style de codage différent. C'est un peu
plus fonctionnel que procédural, comme vous seriez probablement
habitué aux deux. Il s'agit simplement de s'
entraîner à rendre permanent. Je voulais donc voir
si un enregistrement et généralement j'aime vérifier le négatif
d'abord. Donc, si l'enregistrement est nul
et que vous pouvez vérifier la valeur null en voyant l'équivalent à null ou si vous pouvez réellement voir qu'il est null. Celui-ci
lirait probablement un peu mieux. Si c'est nul, je vais juste retourner des
résultats, des points introuvables. Je n'ai pas trouvé le dossier que vous disiez
essayer de l'ouvrir ? Non. Si cela dépasse cette partie, nous allons
vouloir faire cette mise à jour. Je suis donc allé voir un record de
points, puis je vais
devoir faire pipi et rester légal
par chaque méthode désolé, chaque propriété qui est entrée
et ne pas y être. donc enregistrer ici
ce qu'il y a dans la base de données. panier représente ici données
du panier d'achat entrantes, la charge utile, le
corps de la demande avec les nouvelles données. Je ne sais pas si vous
changez de nom. Je ne sais pas quoi changer. Donc pour être sûr
après tout mettre à jour. Donc, si vous êtes habitué à SQL et
à mettre à jour des instructions dans SQL, vous savez que vous devez
modifier chaque élément d'une instruction SQL
juste pour être sûr, n'est-ce pas ? Il est donc ramassé, il est ramassé. Qu'avons-nous d'autre ? Nous avons eu de la quantité. Je ne pense pas que nous ayons quelque chose de mondial.
Impossible de mettre à jour l'ID. Très bien, nous voudrions mettre
à jour l'ID de l'enregistrement. Donc, après avoir effectué
tous ces changements, ce que nous voudrions
faire, c'est que j'attendrai, sauvegarde de points
db change un lavabo, puis nous pourrons revenir. Ainsi, chaque fois que nous effectuons une requête HTTP qui n'a pas nécessairement
quoi que ce soit à renvoyer, ce que nous voyons n'est pas de contenu. C'est donc le bourgeon de Solon. Je ne vais pas revenir. D'accord, mais après l'opération de
mise à jour, je n'ai pas vraiment besoin de vous
rendre les données que vous me donnez simplement
parce que vous les avez déjà. Je dirais donc pas de contenu, ce qui signifie à peu près que
je n'ai rien à revenir. Mais c'est un outil
pour, on y va. Donc, il est dit en gros que je
n'ai rien à vous retourner, mais votre opération a été bonne. Tout va bien à ce
moment-là, n'est-ce pas ? Essayons donc
notre opération. Je vais donc juste
courir sans débogage. Et Swagger est sur la balle
avec le code couleur, donc il devient bleu et
nous avons mis de l'orange. Je peux l'essayer. Personne. Je vous verrai dans l'ID
va dans le paramètre. Je voyais également que le reste des données se trouve dans
le corps de la demande. Voici donc où je dis que je veux
mettre à jour l'enregistrement avec l'ID1. Et puis quelles sont les données que
je veux envoyer ? Ce sont donc des choses risquées. Et dans mon cours complet sur l'API de
bout en bout, je souligne les
dangers d'avoir certains champs exposés dans
la vie PUT et post-endpoints. Vous pouvez suivre ce cours. Mais encore une fois, je garde les choses simples ici,
n'est-ce pas ? Mais en général, vous
voudriez prendre cette valeur d'ID ou vous pouvez écrire le code comme nous l'avons fait sans deux-points pour la
valeur d'identification emprisonnée. Disons que je change
ces valeurs, n'est-ce pas ? Enregistrez donc avec l'ID1,
regardons ça. Non. Donc, si je vais à l'obtenir, essayez-le et
dites Afficher l'enregistrement avec l'ID1. Il va
me montrer le savon d'article ID1. Donc la quantité trois
gros haut est fausse. Je ne vais
rien changer dans ce corps de demande. Ce corps de demande représente
les mêmes champs et valeurs
correspondantes que ceux
que l'on peut attendre pour saisie de
notre panier d'achat. Donc, si j'appuie sur Execute, ce qui arrivera, c'est que
les quatre ont réussi. Et si je retourne en arrière et
que je récupère cet enregistrement avec ID1, je vais juste l'
exécuter à nouveau. Maintenant, nous allons voir
cela ressembler à ce que nous venons d'envoyer en
tant que corps de requête. Donc, si je veux changer ça pour
fredonner et ramasser
dix maisons, non ? Exécute. Tout ce qu'il fait, c'est prendre
tout ici. Et l'idée est qu'
elle va simplement
remplacer ce qui se trouve dans la base de données. On y va. Très bien, donc quelques choses sur
ce qu'Entity Framework a fait. Premièrement, lorsque nous récupérons
nos dossiers, nous les récupérons. Et il y a cette fonctionnalité
appelée camionnage qui est activée dans une récupération
comme celle-ci avec le camionnage, toutes les modifications que
vous apportez à
l'une des propriétés sont les valeurs. Vous pouvez simplement appeler Enregistrer les modifications. Et il
saura automatiquement que cela a été modifié parce qu'il
suivait les valeurs. Donc, une fois cette ligne exécutée, il sait que cet enregistrement n'
est pas une citation sans citation sale. Donc, quand vous voyez si GnG regarde cet enregistrement
et exécute les modifications
qui ont été apportées, c'
est et exécute les modifications
qui ont été apportées, peu près ce qui se passe, n'
est-ce pas ? Il existe d'autres moyens
car vous pouvez récupérer des données sans suivi. Ce qui arrive, c'est que lorsque vous avez
des centaines d'enregistrements, vous ne souhaitez
probablement pas effectuer de
suivi car cela peut entraîner des problèmes de performances. Vous verriez donc les personnes qui suivent davantage
leurs requêtes. Mais c'est généralement plus pour les applications
qui atteignent cet état de conservation. Jusqu'à présent une API n'
existe pas vraiment, il n'y a pas vraiment d'
état qui est récupéré. Et ce n'est qu'un moment
enseignant. Je vous aide juste à comprendre ce qu'est le
suivi et pourquoi cela a pu
fonctionner comme ça
sans que nous appelons
db dot update. Très bien. C'est donc à peu près tout pour nous de
rassembler la production. Vous pouvez donc penser toutes les sorties que
vous voudrez peut-être configurer. Mais pour non,
celui-là est assez bien.
8. Explorer la méthode POST: Notre gars. Examinons donc la
création de notre méthode de publication. Donc, juste pour le faire
simplement et rapidement, je vais juste copier la méthode put et la
coller à nouveau. Et nous allons
voir un poteau de serpillière. Ce point de terminaison ne
veut pas avoir de paramètre dessus. Donc, ce
sera juste un panier d'achat oblique. Ensuite, nous allons prendre ce spiromètre et nous n'
attendons que la charge utile dans le corps de
la demande, n'est-ce pas ? que cet
objet de panier soit ce que nous attendons d'
obtenir deux bases de données Editor
en termes de code, nous n'avons pas à faire de vérification. Il suffit d'
ajouter cet
article de panier à la base de données. Je vais juste dire panier
db dot. Ou je pourrais
juste dire db dot bizarre. Et puis nous lui donnons juste
cet objet de panier. Ensuite, nous sauvegardons les modifications. Ensuite, ce que nous allons renvoyer serait une réponse Created. Donc créé aurait
un outil, n'est-ce pas ? L'outil 1 est le code d'état. C'est ainsi créé. Vous pourriez aussi dire
quelque chose de plus semblable à créé pour l'itinéraire. Vous pouvez donc me donner le nom de la racine et d'autres trucs fantaisistes. Mais je vais simplement
garder les choses simples, créées. Et ensuite, nous allons juste lui
rendre quelques données. Il sait donc qu'il est créé
dans un panier d'achat oblique. La réponse aura donc
la barre oblique du point de terminaison,
puis l'ID. Donc, en gros, ce que nous
voyons, c'est que si vous allez réduire les paniers avec l'ID de point du
panier, alors vous pouvez trouver cette méthode, trouver ces données, désolé. Ensuite, nous retournons l'objet
réel. Donc, essentiellement créé
et nous
lui indiquons la chaîne où elle peut
aller pour voir les données créées. Il s'agit ensuite de la charge utile
réelle de données côté de l'itinéraire vers
lequel vous pouvez vous rendre. Et c'est essentiellement ça. Essayons donc cet ancien. Donc le codage couleur c'est
qu'une fois de plus, nous avons notre méthode post ici. Essayez-le. Oh, et je ne devrais pas donner une idée
lorsque je crée, mais nous avons déjà discuté de cela, que nous gardons
les choses simples ici pour l'instant. Essayons un autre
objet. Cette fois. Je veux des céréales, et je veux
deux boîtes de céréales. Et il n'a pas encore été
repris. Ainsi, lorsque nous exécutons
cela, cela représente nos
objets qui étaient ensuite envoyés à la base de données
et que C est créé, il obtient l'ID et
tout est là. Donc, si je fais
tout et que je l'exécute, alors je verrai 123 et notre
article nouvellement créé, l'article quatre. Et c'est vraiment tout
pour toutes les méthodes post. Une fois de plus, nous avons
attendu la charge utile, qui a ensuite obtenu ce qui va causer désérialisation dans cet objet. Ensuite, nous l'avons ajouté à la base de données, puis
nous sauvegardons les modifications. Donc, ce que vous verriez avec Entity Framework
Core, c'est que vous pourriez réellement dire db dot add, et add prend un certain type. Il ne sait pas vraiment quel
type peut être tenté. Mais tant qu'il est hors de
l'entité ou tant qu' il peut le trouver dans le contexte de la base de données et que vous n'
aurez aucun problème. Vous verriez également le point db
, puis la table spécifique,
puis cette annonce, n'est-ce pas ? Donc je
vous montre juste que vous pourriez faire un panier d'achat vraiment db
dot. Et puis il sait qu'il suffit de
sauvegarder les modifications et qu'il trouvera la
table appropriée à mettre dans les données. Et nous avons vu que cela fonctionne. C'est donc tout pour
notre méthode post.
9. Explorer la méthode SUPPRIMER: Nous sommes de retour et cette
fois, nous allons
examiner la méthode de suppression. Nous allons donc supprimer la carte. Une fois de plus, je vais
prendre notre PUT et ensuite nous allons simplement
moderniser pour être supprimés. Très bien ? Je suis sûr que vous savez ce que c'est, mais je sais que l'ordre dans
lequel vous mettez les méthodes n'a pas
vraiment d'importance . Ce n'est pas
parti faux, celui qui est exécuté en premier
sur notre troisième parce que ce
n'est pas une question d'ordre chronologique ou
l'ordre de la méthode
est celui qui est
demandé. 0,1 chose que je dois
souligner, c'est que vous ne devriez jamais avoir deux des mêmes méthodes avec
le même point de terminaison. Revenons donc au bon. Nous avons plusieurs gets, mais remarquez que chacun a
une adresse de point de terminaison différente, n'est-ce pas ? Donc, si je devais me procurer des méthodes avec les mêmes paniers à barres obliques, cela poserait un problème. Mais parce que j'ai cartographié
obtenir un Nmap posts, où est-ce que c'est pour bien les obtenir
? Mon poste. Et tous les deux comment
réduire le panier d'achat, cela ne provoque pas de crash parce que un est allumé, l'autre est post. Donc, si j'ai oublié de
changer cela et d'ajouter les deux entrées Map avec la
même valeur de point de fin. Cela causerait simplement un problème. Regardons vraiment ça. Il est bon de voir ces
erreurs afin de savoir ce que
nous diagnostiquons lorsque nous sommes
confrontés à ces défis. Lorsque vous faites cela et
résolvez vos charges, cela
vous dira simplement que vous détestez que le
chargement ne donne pas
plus de données que cela. Si vous obtenez quelque chose comme ça, revenez en arrière et vérifiez que vous ne
commettez pas cette erreur. Une solution simple
est donc de dire carte, supprimer. Et il va falloir conserver le même point de terminaison parce que
nous voulons un guide d'achat. J'ai besoin de l'identifiant de
ce que nous allons supprimer, mais
ce dont nous n'avons pas besoin, sont les données que nous allons supprimer car nous pouvons toujours utiliser
l'ID pour trouver l'enregistrement. Nous obtenons donc le record. S'il n'est pas trouvé, nous retournons introuvables. Et puis ce que je vais
faire, c'est juste dire db dot. Ce serait db dot remove. On y va. Parfois,
j'oublie ces choses. Donc db dot remove et nous supprimerions l'enregistrement
que nous avons trouvé avec cet ID. Nous sauvegardons les modifications, donc
j'appuie simplement sur Enregistrer. Et ce qui se passe, c'est qu'
il existe dans
Visual Studio 2022 une fonctionnalité appelée Hot Reload. C'est donc cette boule de feu ici. Vous pouvez donc
activer cela lorsque vous enregistrez, il effectue automatiquement un
rechargement à chaud. Cela pourrait vous inciter à penser
que ça m'incite. Mais vous pouvez toujours
appuyer sur le rechargement à chaud. Ensuite, s'il ne peut pas simplement le recharger, vous pouvez simplement dire reconstruire
et appliquer les modifications. Et il fera ce qu'
il doit faire en arrière-plan pendant que vous êtes toujours en cours d'exécution sans débogage. Et lorsque vous exécutez
sans débogage, cette fenêtre de
console est ouverte. Parfois, vous
pouvez essayer quelque chose, mais
je ne travaille pas correctement. Il suffit de vérifier la fenêtre de la
console. se peut que vous deviez
le fermer, puis recommencer. Quoi qu'il en soit, Hot
Reload nous permet simplement recharger notre doc Swagger. Je sais que nous voyons ou
supprimons correctement le point de terminaison. Ensuite, si je l'essaie
et que j'essaie de supprimer un enregistrement avec l'ID pour lequel
nous venons de créer. Et c'est ce que nous exécutons. Nous voyons que nous retournons tout
ce contenu. La suppression est donc un autre point
final pour lequel vous pouvez pas renvoyer de
contenu, n'est-ce pas ? C'est très bien. La fenêtre de la console, pendant que
nous sommes en mode développement, vous verrez ces
requêtes être recrachées là-dessus dans la console. Et cela pourrait vous être
utile de
voir ce qui est généré lorsque vous exécutez ces
commandes EF Core au pied droit, bien que nous n'ayons pas nécessairement
besoin de nous concentrer là-dessus. Et à ce stade, notre
API de foule est opérationnelle. Maintenant, quand nous reviendrons, nous allons
simplement nettoyer notre code et le rendre un
peu plus présentable.
10. Test API avec Swagger Doc: Très bien, alors revenons-en là-dessus et essayons ça. Je vais donc juste courir sans les
déboguer un
peu plus rapidement. Et nous allons simplement utiliser l' outil
Swagger pour tester cette API. Et maintenant, une alternative à
Swagger aurait été comme un facteur ou quelque chose de
similaire. Mais Saga est capable, donc nous allons simplement l'utiliser maintenant. Donc, lorsque nous élargirons notre
objectif, cela implique que nous nous
remettrons en place. collection verra l'échantillon, l'objet exemple de ce que
nous allons récupérer. Et remarquez les accolades carrées, les dépeints qu'il s'
agira d'un tableau d'objets. Prenons, essayons et
exécutons à quel point il va
réellement sur les
requêtes de la base de données, et il y a tous
les exemples de voitures que nous
aurions saisis, n'est-ce pas ? Maintenant, si j'essaie d'obtenir une pièce d'identité, laissez-moi essayer celle-ci. Alors, essayez tout. Ça dit,
donne-moi l'idée, je vais en donner dix. Et nous récupérons la réponse 200 avec
la voiture avec la carte d'identité dix. Je l'ai essayé avec 100. Je n'ai pas 100 voitures. Cette fois, je me suis fait
acheter ça pour les quatre parce qu'elle
n'a pas trouvé cette voiture. Mauvaise idée, non ? Vous pouvez prêter
attention aux URL de réponse. À savoir le, c'est ce que nous
appelons l'URL de base car
c'est le serveur. Et alors ce serait le chemin, et alors ce sera notre valeur
d'identification, n'est-ce pas ? Il est donc bon de
prêter attention à ces choses car lorsque nous écrivons du
code pour interagir avec l'API, nous devons imiter ce type d' URL afin de vérifier que
tout obtenu par ID fonctionne. Essayons le Pulitzer. Si j'ai essayé de modifier la
voiture avec ID1, nous allons la transformer en une chaîne, une chaîne, une
chaîne, une chaîne, une chaîne. Laissez-moi d'abord
récupérer la voiture avec l'ID1 afin que nous puissions voir à
quoi elle ressemblait. C'est donc la voiture avec la pièce
d'identité et nous en prenons une copie
rapide. C'est une Honda Fit, l'ABC de Vinny. Maintenant, quand je lance ça, je remarque que je devrais mettre
tous les détails et avoir tendance à mettre à jour la largeur. Donc, si je laisse les valeurs par défaut
et que je clique sur Exécuter, cela ne
me dira pas de contenu, ce qui signifie qu'il a réussi. Si j'essaie de récupérer
cette voiture à nouveau
, je vais voir
qu'elle ne fonctionne pas. Mettons le cordon. Et mon bourgeon. C'est ça, c'est mes erreurs idiotes. Donc, j'ai vraiment mélangé les devoirs que j'aurais
dû attribuer. Notez que la valeur
arrive par la voiture. Je m'en excuse donc. Maquillage que j'ai sur mon rechargement à
chaud sur Save, donc je devrais pouvoir
revenir en arrière et essayer à nouveau. C'est donc exécuté. Nous voyons une Honda
Fit et tout. Et quand j'ai essayé
d'exécuter ici, j'ai eu l'outil pour. Donc non, je vois, on y va. Maintenant, nous voyons que tout
a changé en chaîne. Mon idiot erreur les gars. Cela fonctionne donc. C'est pourquoi
les tests sont importants. Très bien,
permettez-moi de revenir à ma charge utile d'origine
, puis de recommencer. Et ensuite, nous pouvons
vérifier que nous
voyons maintenant les données originales,
bien visibles. Ensuite, le dernier
est la suppression. Alors, lequel
devrais-je supprimer ? Laissez-nous quand même que je
ne suis pas je ne veux pas voir quel
genre de voiture je n'aime pas. Ce que je vais supprimer. La voiture qui m'intéresse le
moins dans cette liste serait la
voiture avec la carte d'identité quatre. Ce sera trop petit à mon goût. Nous y trouvons donc
l'outil qui
suggère qu' il a été
terminé avec succès. Donc, si je retourne et que j'exécute, il n'y a plus
de voiture avec les quatre IED. Tout comme ça, notre code fonctionne.
11. Examen API: Très bien les gars, donc la
dernière écoute nous a laissé avec notre API de travail qui effectue des opérations brutes de
base. Ce que nous ne voulons pas,
c'est un code d'accès. Nous ne voulons pas les devis
prévisionnels. Je suis allé enlever ça. Je vais également supprimer
Record en bas. Et pour l'instant, tout ce que nous avons, c'est le code dont
nous savons absolument besoin. Sachez qu'il existe différentes
manières d'organiser
votre API minimale,
car vous pouvez votre API minimale,
car vous pouvez créer des méthodes auxquelles vous
obstruez le code. Vous pouvez le placer dans une autre classe, puis l'
appeler comme intergiciel. Il existe plusieurs
façons de le faire. Je ne vais vraiment pas entrer dans toutes ces façons, n'est-ce pas ? Non. Mais au moins à la
fin de cet exercice, vous saurez comment
créer une API en utilisant le
style de codage minimal qui peut faire face à la base de données.