Transkripte
1. Einführung: Hallo und willkommen zu meinem Kurs, ASP.Net Core minimale
API-Entwicklung. Ich bin Ihr Ausbilder für Krieg Williams und ich bin
Softwareingenieur und Dozent und mache das
seit 12 Jahren. In diesem Kurs werden wir ein Verständnis dafür
bekommen, wie wir minimale APIs
mit Dotnet Six
entwickeln.
Wir werden verstehen, Wir werden verstehen ganze API-Verben ganze Fortsetzung,
Licht und Entity Framework
funktionieren Core kombiniert, um uns einen Ort zum Speichern
und Abrufen von Daten zu geben. Wir werden uns auch die
Abhängigkeitsinjektion ansehen und ganze
Swagger-Dokumente helfen uns bei der
Interaktion mit unserer API. Werfen Sie diesen Kurs wird
Visual Studio 2022 und Folgevorgängen für dotnet verwenden. Und Visual Studio 2022 ist
erforderlich, um dotnet sechs zu verwenden. Es ist eine voll funktionsfähige
und erweiterbare IDE, sehr leistungsfähig ist
und es uns ermöglicht,
so viel mehr für die Entwicklung zu tun . Lasst uns also ohne weiteres anfangen.
2. API-Übersicht: Hey Leute, willkommen
zum Anfang dieses neuen Abschnitts,
in dem wir an einer RESTful-API
arbeiten werden , die unsere mobile App
ergänzt. Also haben wir uns schon alle
Grundlagen von Maui angeschaut. Aber jetzt wollen wir
mit dem Aufbau einer echten App beginnen. Und im Allgemeinen kommunizieren
mobile Apps mit APA, weshalb viele von ihnen
Internetzugang benötigen. Wenn Sie jetzt nicht so
vertraut sind, was eine API ist, werde
ich
Sie jetzt durch einige der Grundlagen führen. Und wenn Sie sich wirklich mit mehr Details
befassen möchten , können
Sie sich meine anderen
Kurse ansehen, in denen ich Sie
mit API-Design
durch den Klingelton bringe . Aber für diesen Kurs wird
es
einfach genug sein, dass
wir eine API zum Laufen bringen und sehen können,
wie wir diese API
über unsere mobile App konsumieren und mit
ihnen interagieren können. Jetzt bauen wir
eine RESTful-API auf. Und Handgelenk ist ein Akronym für Repräsentative
State Transfer. Im Wesentlichen ist es ein
offener Standard, der es jedem
Client
ermöglicht , mit einem Endpunkt
zu interagieren und auf
einige, die
wir als IT-Ressourcen bezeichnen, zugreifen zu können Endpunkt
zu interagieren und auf
einige, die
wir als IT-Ressourcen bezeichnen, zugreifen . Nehmen wir zum Beispiel eine
Anwendung wie Facebook. Wir sind Facebook auf
unserem Mobiltelefon, oder wenn es in unserem Internet ist, unsere Internetbrowser,
wir haben es auf verschiedenen Geräten und wir
haben Apps
für Android, für iOS usw. Tatsache ist, dass jede
dieser Apps nicht machbar ist und von Grund auf neu
erstellt wurde. Es
interagiert eigentlich nur mit einer API , die Facebook entwickelt hat
und weiterentwickelt. Und deshalb bleibt, wenn
Sie Updates aufrufen, was sie tun
, in etwas, in
der API, und sie
müssen die Art und Weise aktualisieren, wie
Up mit dieser API interagiert. Aber im Wesentlichen liegt die
Intelligenz in der APA. Und da es sich um
einen offenen Standard
handelt, spielt es keine Rolle, ob
es sich um ein Android-Gerät oder ein Windows-Gerät oder um Ihr Mobiltelefon oder Ihre mobile Uhr oder
Ihre Smartwatch handelt. Alle von ihnen können mit
diesen offenen Standard-APIs oder
Webservice interagieren , der im Allgemeinen dem restlichen
Architekturstil
entspricht. Wenn wir über
APIs und erholsame APIs sprechen,
gibt es bestimmte
Konzepte, mit denen wir
sicherstellen möchten , dass wir uns
wohl fühlen. Eine davon ist einheitlich, was bedeutet,
dass es eine Standardmethode gibt Ihre URLs
zu formulieren
und diese Anrufe zu erfüllen. Es ist immer noch weniger. Sie stellen also im Allgemeinen nicht
fest, dass Cookies und andere Dateien
auf dem Gerät generiert werden , um die API zu
unterstützen. Anruf wird
getätigt, sobald ich das fertig nenne, es vergisst es. Es hat nichts wirklich
festgehalten, oder? Es ist zwischenspeicherbar, was bedeutet,
dass Sie manchmal eine Entzündung
haben, die
immer angefordert wird. Anstatt also in
die Datenbank oder den
Datenspeicher zu gehen , legen
wir jedes Mal Geld ein Geld ein, damit die API schneller mit
Entzündungen reagieren
kann , auf die häufiger
zugegriffen
wird und ändert
sich im Allgemeinen nicht so sehr. Es ist geschichtet. Sie haben also verschiedene
Teile und Layer in der API, um zu beschränken, was auf verschiedenen Ebenen getan werden
kann. Oder Ressource
repräsentiert im Allgemeinen Datenbits oder ein Objekt zwischen der Datenbank und der
Clientanwendung. Und im
Allgemeinen möchten Sie, wenn Sie Ihre
RESTful-API-Endpunkte
benennen, Ihre
RESTful-API-Endpunkte
benennen,
selbstbeschreibend sein. Wenn es also ein Endpunkt ist mit einer persönlichen
Entzündung
umzugehen, dann möchten Sie sicherstellen, dass
Sie eine Entzündung der Person sagen. Das sind also nur Prinzipien. Als nächstes haben wir
die HTTP-Methoden. Jetzt haben wir verschiedene Methoden in Form von get,
put, post, delete. Dies sind die beliebtesten , die Sie sehen werden, dass sie verwendet werden. Es gibt noch andere. Aber im Allgemeinen möchten wir, wenn wir es
mit einem Datenspeicher zu tun
haben, für Operationen
durchführen. Wir nennen das generell
Crowd-Operations. Wir möchten
Daten in der Datenbank erstellen, wollten die
Daten in der Datenbank abrufen. Wir möchten Änderungen
daran vornehmen oder aktualisieren, und wir möchten
es entfernen oder löschen. Also sieh IUP. Holen Sie sich also den
Abruf ab, wenn Sie den Datensatz
oder eine Reihe von Datensätzen anzeigen möchten. Ich GET Anfrage
setzen, put ist das U, was Update ist. Sie haben auch Patch, aber das ist ein Thema
für ein anderes Mal. Machen Sie
die einfachere Implementierung, damit
wir hier
für unsere Zwecke arbeiten. Aber wir senden
PUT-Anfragen, wann immer wir eine
Aktualisierung der Daten vornehmen möchten. Wir haben die Post-Anfrage
wann immer wir Daten erstellen möchten. Und dann haben wir die
Löschanfragen, die meiner Meinung nach
selbsterklärend, wenn nicht die
selbsterklärendsten sind, eine von allen, dann
haben wir die HTTP-Antwort. Das waren also die Anfragen
, die wir uns gerade angeschaut haben. Die Antwort ist
das, was der Server zurücksendet. Also haben wir im Allgemeinen ein XX
und XX bedeutet nur Zahl, Zahlen wie 100,
zwischen einhundert,
einhundertneunundneunzig . Die x-Achse repräsentiert
alles von 00 bis 99100. Statuscodes sprechen
im Allgemeinen über Kommunikation von
Übertragungsprotokollen auf 100. Im Allgemeinen erreicht der Erfolg
in der Operation. 300er Jahre waren,
dass es eine Umleitung gab. 400 zeigt, dass es vielleicht ein schlechtes Rechenzentrum
oder vom Kunden gab. Der User-Mid werden also Daten
gesendet, die der
Server nicht verarbeiten konnte. Und so würden wir sagen, es war schlecht, eine schlechte Anfrage oder Sie haben etwas
angefordert , das nicht
wie ein 404-Fehler gefunden werden konnte. Ich bin sicher, dass sich jeder
mit einem Fluorophorfehler identifizieren kann. Und dann haben wir den 500-Fehler, was bedeutet, dass der Server dort
ist, wo das Problem lag. Die Daten kamen herein, aber
vielleicht haben Sie
dieses
Problem mit der Datenbankkonnektivität nicht aufgerufen oder der Server wurde fertig, dann reagierte die API
mit einer 500-Antwort. Dies sind also allgemeine
Antwortzitate, und es ist sehr wichtig, diese
Rechte in einem guten API-Design zu erhalten. All dies, um zu sehen, dass
unsere API als Interaktionspunkt zwischen
unserer mobilen App und
einer zentralen Datenbank dienen wird Interaktionspunkt zwischen
unserer mobilen App und
einer . Alles, was wir in der mobilen App tun
, möchten
wir, dass sie
durch die API fließt ,
denn dort wird die
wahre Intelligenz sein und genau darauf werden
wir
diese Reise beginnen. In diesem Abschnitt beginnen
wir mit dem API-Design und wir werden die Grundlagen
durchgehen und genug
tun, um es zum
Laufen zu bringen und
es noch einmal zu verstehen, wenn Sie weitere Details wünschen, Sie kann sich den ultimativen ASP.Net Core API-Entwicklungsleitfaden für den
Kurs ansehen. Sie können dies für
alles überprüfen, was Sie
über das richtige
API-Design von Grund auf wissen müssen . In diesem Kurs
halten wir es einfach. In der nächsten Lektion werden
wir also
unser API-Projekt einrichten und den Ball ins Rollen
bringen.
3. Setup-Projekt: Alles klar Leute,
willkommen zurück. Lasst uns also direkt hineinspringen. Wir werden
unser Visual Studio 2022 öffnen und ein neues Projekt erstellen, aber ich möchte eine leere Lösung. Also beginne ich lieber
mit einer leeren Lösung. Das ist also eher
eine leere Lösung, damit ich der Lösung
einen Namen geben und anschließend die
Projekte hinzufügen kann. Also werden wir an
einer
mobilen App für den Einkaufswagen arbeiten , oder? Also Einkaufswagenliste, also werde ich nur die Warenkorbliste
sagen. Das ist der Name
der Lösung. So können wir weitermachen
und das schaffen. Sobald wir die Lösung haben, erstelle
ich
ein neues Projekt. Also gehe ich einfach
direkt zur Lösung, Neues Projekt
hinzufügen. Und dann können wir
ein API-Projekt hinzufügen. Ich suche einfach noch einmal
nach API. Und dann gehe
ich mit einer C-Sharp ASP.Net Core Web API. Und dann rufe ich die
Punkt-API
der Einkaufswagenliste auf. Dann haben wir auf Weiter geklickt. Und jetzt sind hier einige
interessante Möglichkeiten für uns. Und wie gesagt,
ich möchte es
relativ einfach und
einfach für uns halten . Erstens, wir werden
jetzt dotnet Core sechs mit Visual
Studio 2022 Preview
verwenden , Sie können zu fünf zurückkehren, die zum Zeitpunkt
dieser Aufnahme das Ende des Lebens
erreicht haben,
so dass Sie ich
will wahrscheinlich nicht dorthin gehen. Dotnet Core Drei-Punkt-Eins hat
immer noch langfristige Unterstützung, ebenso wie dotnet sechs und
dotnet seven in der Vorschau. Aus Stabilitätsgründen
fahre ich mit dotnet sechs fort. Und wir können einen
Authentifizierungstyp eingeben. Aber im Moment wählen wir einfach
keine aus, weil wir
das später manuell machen werden. Wir können für HTTPS konfigurieren, wir brauchen nicht dunkler. Nun, hier
wird es interessant. Wir können wählen,
Controller zu verwenden, oder wir können das Häkchen deaktivieren, damit wir minimale APIs verwenden können. Traditionell würden wir
immer Controller verwenden, aber ich denke, dies
wäre ein guter Zeitpunkt,
um zu sehen, wie die
minimale API aussieht. Zumal dies
wirklich eine leichtgewichtige App ist, aber sie könnte sowieso einfach bei uns
wachsen. Also werde ich
das Häkchen „Controller verwenden“ deaktivieren das Häkchen „Controller verwenden ,
damit wir minimale APIs verwenden und
offene APIs unterstützen können . Und dann
ist die nächste Option, die ziemlich interessant
ist, ob wir Anweisungen auf oberster Ebene
verwenden möchten oder nicht. Bei dotnet sechs wären Anweisungen der
obersten Ebene wie
die Hauptfunktion und der
Haupt-Namespace und so weiter gewesen . Einige Personen
hätten also gesagt sie es vorziehen,
es in sechs zu sehen, und minimale
Stilklassen
eingeführt, bei denen Sie nicht unbedingt
so explizit oben sein müssen. Sie können also wählen,
welches Sie wollen. Ich werde die Anweisungen
der obersten Ebene nicht verwenden , weil ich sie so mag. Und ich klicke einfach auf Create. Okay, jetzt haben wir unser
API-Projekt erstellt. Wenn ich also zu program.cs gehe, beachte, dass du es gewohnt bist den Controller-Ordner
in deiner API-Entwicklung zu sehen, du wirst ihn hier nicht weil wir
die US-Controller deaktivieren. Wenn Sie sich für die Verwendung von Steuerelementen entschieden haben, kein Problem, sollten Sie in der
Lage sein, gut zu folgen. Aber weil wir minimale APIs
machen, oder ich habe die minimalen
API-Vorlagen ausgewählt. Was passiert ist
, dass wir
sehen werden, dass alles genau
hier in dieser program.cs passiert. Sobald ein Programm ausgeführt
wird, baut es alle
Abhängigkeiten auf, die es benötigt. Und dann geht es direkt
in die Ausführung des Codes oder das Wissen, welche Codierung
ausgeführt wird, und dann läuft es. Die API wird also dort sitzen
und auf Anfragen warten und alles läuft ziemlich von unserer program.cs aus. Ich werde
das nur ausführen, um sicherzustellen, dass es los ist und es funktioniert. Und es wird
diesen Browser starten , der
uns unser Swagger-Dokument zeigt. Da wir uns also für die Unterstützung
offener APIs entschieden haben, haben
wir automatisch
Swagger in unsere API integriert. Sobald wir das ausgeführt haben,
sehen wir uns die Dokumentation an. Je mehr
Endpunkte-Fähigkeiten sind, desto mehr wird dieses Dokument
automatisch erweitert. Das ist es also für uns zu erschaffen. Wenn wir wiederkommen,
richten wir die Kursrichtlinie ein.
4. CORS einrichten: Alles klar Leute, also
richten wir
in dieser Lektion unsere Kursrichtlinien ein. Und ich mache das eher als
eines der ersten Dinge. Wann immer wenn ich eine API erstelle, warum? Nun, die API nach Design
soll von anderen Kunden konsumiert werden. Andere sind Clients, die sich möglicherweise nicht unbedingt auf
demselben Server wie die APA befinden. Kein Auto ist ein allgemeiner
Sicherheitsbegriff für jede App, die im Internet
gehostet wird. Und im Allgemeinen würde
diese Richtlinie vorschreiben, ganz unterschiedliche Ressourcen
unterschiedliche Anfragen sind, die durch die angeforderte App erleichtert werden
können. All das zu sehen. Die Kursrichtlinie ermöglicht es
uns, Anfragen aus
bestimmten Quellen abzulehnen , wenn alle
Quellen eine geringe Anforderung sind. Also wenn wir das
Handy woanders oder 60 Millionen mobile
Apps auf
der ganzen Welt und unsere APIs irgendwo
auf einem Server haben. Wir müssten eine
Kursrichtlinie haben,
um zu sagen , ich weiß nicht, ich kann
60 Millionen Anfragen und
60 Millionen Mobiltelefone nicht verfolgen . Also erlaube ich einfach
jedem, mit mir zu sprechen. Natürlich können wir weitere
Sicherheit auf einer anderen Ebene hinzufügen. Aber im Moment verwenden wir nur
die Kursrichtlinie, um
sicherzustellen, dass wir
Anfragen von mobilen
Apps nachträglich erleichtern können , oder? Wir werden darauf hingehen, dass Zeilen sieben in der program.cs sind. Und wie ich schon in
der letzten Lektion sagte, habe ich mich nicht dafür entschieden,
die Aussagen auf oberster Ebene zu verwenden. Es kommt also einfach
auf den Punkt, oder? Es startet nur den
Code, weil er
bereits weiß, dass es sich
um
die program.cs handelt, also muss er nicht int,
void, programmklasse
usw. deklarieren . Also keine Klasse ungültig,
weißt du, was ich gesehen habe? Lassen Sie uns also darauf eingehen. Also sagen wir Builder Dots
Services, Punkt, füge Autos hinzu. Genau da ist es. Und was wir hier
tun werden, ist
einige Optionen einzurichten , die die Konfiguration
leiten. Okay, also sagten wir Optionen
und verwenden dann geschweifte Klammern. Und lass mich
das ein bisschen größer machen. Stellen Sie sicher, dass wir sehen können, dass wir
mir etwas realistischer geben können. Es stellt sicher, dass wir alle klar
sehen können , was passiert. In Ordnung, erstellen Sie also die
Dots-Services , die CORS
im Web oder Optionen hinzufügen. Und dann werden innerhalb unserer
Optionen
Optionen, Punkt, Add, Policy haben . Das ist also unsere Kursrichtlinie. Wir müssen ihm einen Namen geben. Also sage ich nur ein Tief weil ich nicht bereit bin, irgendwelche Einschränkungen
zu setzen. Also ja, es
wird buchstäblich Hallo alle sein. Und dann
starte ich einen weiteren Lambda-Ausdruck. Sieh dir einfach ein Lambda an. Und dann ist das wie
ein Builder-Funktionen, also sage ich einfach einen Punkt und dann kann ich sagen, dass jeder Header
zulassen kann. Das bedeutet also jede Art
von Anfrage, die
hereingeht , gezogen wird usw. Obwohl es begann,
sehen Sie irgendeinen Ursprung. Wo auch immer es ist,
stammt, es ist, dass die
Anfragen niedrig sind, und dann kann ich einen niedrigen sehen, jede Methode, tatsächlich
jede Methode
zulässt ist die HTTP-Methode , die in den
Header kommt anders. Ich entschuldige mich, der Header ist
Teil des Anforderungstextes. Und manchmal könnten bestimmte
Schläger Miliz sein. Also folgen wir einfach jedem Header, Zulassen, jeder Methode usw. und los geht's. Das ist also die Richtlinie
, die wir eingerichtet haben. Nein, wir müssen
die Middleware lassen, also
bauen wir hier unsere Dienste auf. Aber dann beginnt die
Middleware hier bei der Aufwärts-Deklaration. Und er bemerkte, dass sich die
Variable hier ändert, oder? Es ist, oder der
Objektname ändert sich, es ist oben statt
Builder-Punkte, Dienste oder was auch immer. Und was
wir dann tun müssen, ist den AppBuilder wissen zu
lassen
, dass er Kerne verwenden sollte. Darum neige ich dazu, das
darunter zu legen. Also werde ich einfach
sagen, benutze Kerne. Verwenden Sie also die Cors
Middleware und
wenden Sie bitte die Richtlinie an, die als Low bezeichnet
wurde. Alles klar, also achten Sie zu diesem Zeitpunkt auf
Tippfehler, denn
das ist eine magische Saite. Sie könnten also am Ende
nichts debuggen, wenn Sie das Gefühl haben , diese beiden
Wagen nach rechts zu verschütten. Das ist es also wirklich für die
Einrichtung unserer Kursrichtlinien. Ich kann hier aufhören, weil
es zu diesem Zeitpunkt
keine wirklich greifbare Möglichkeit gibt,
dies zu validieren. Außerhalb der
Ausführung der API, versuchen Sie, sie
irgendwo zu hosten und dann von
einem anderen Computer aus darauf zuzugreifen. Das ist also wirklich
unsere Kurspolitik. Ich habe bereits erklärt, warum
wir es dafür brauchen. Wenn wir also wiederkommen, werden wir unsere API
weiter aufbauen.
5. SQLite Datenbank einrichten: Hallo Leute, willkommen zurück. In dieser Episode werden
wir unsere Datenbank aufbauen. der Regel möchten
Sie
für eine App, die
für eine große Nutzung skaliert
wird, natürlich für eine große Nutzung skaliert
wird, eine
Enterprise Grade Datenbank
wie Oracle oder
Microsoft SQL Server verwenden . Und dann das
Flaggschiff-Objekt-Relational-Mapping-Tool oder
die Bibliothek, die Dotnet Core uns die
Interaktion mit der Datenbank gibt. Das Flaggschiff ist
Entity Framework Core. Wissen
Sie, dass es Konnektoren
für viele andere Datenbanken hat, also sage ich Ihnen nicht, dass Sie die Datenbank verwenden müssen , die
ich gerade verwenden werde, aber ich halte
es einfach genug, aber ich werde
das erklären allgemeines Konzept
für Sie, damit Sie schätzen können, warum ich diese
Entscheidungen treffe. Für diesen Kurs verwende
ich nur eine
Fortsetzungsdatenbank, die sich
einfach im
Ordner mit der APA befindet. In einer
Unternehmensanwendung möchten
Sie jedoch erneut eine Verbindung zu
einem Remote-Server für
eine Enterprise-Datenbank möchten
Sie jedoch erneut eine Verbindung zu
einem Remote-Server für wie Microsoft SQL Server herstellen. Um Entity
Framework in unser Projekt zu integrieren, ich mit
der rechten Maustaste auf das Projekt und
gehe dann zu NuGet-Paketen. Und dann gehen wir einfach
zu Browse und ich suche nach Microsoft Dot Entity
Framework Core, Fortsetzung Licht. Wenn Sie noch einmal eine andere Datenbank
verwenden möchten, wissen Sie vielleicht bereits, wie Sie sie an SQL Server
verdrahten können. Dann suchen Sie einfach nach Microsoft, aber Entity
Framework Core, und Sie würden sehen, dass
die verschiedenen für SQL Server,
für mein SQL usw. sterben . Im Allgemeinen ist der Name
also
konsistent, wo Sie
sagen einfach Entity Framework ,
Core, Duct und den
Datenbankingenieur, den Sie bevorzugen. Dann würdest du
die Bibliotheken finden. Jemand zum Herunterladen. Entity Framework Core
macht Fortsetzungslicht, und das wird mit ein
paar zusätzlichen Bibliotheken geliefert. Lassen Sie mich also weitermachen und
das
herunterladen und installieren und akzeptieren Sie
alles, was auftaucht. Dafür
benötige ich auch eine andere Bibliothek, die Microsoft Dot Data Dot Fortsetzung Light
Dot Core ist. Also kann ich weitermachen
und mir das schnappen. Und das ermöglicht es mir, einige
andere wichtige Operationen durchzuführen. Ich mache weiter und installiere das. Gehen wir nun zurück zu unserer program.cs und
fangen dann an, dies zu verdrahten. Also führe ich
einfach ein paar Konfigurationen und führe dich dann durch sie. Was wir hier machen, ist, dass
wir einen Ordner einrichten. Alles klar Leute, also
lasst uns zurück
zu unserer program.cs springen . Und ich füge einfach ein paar
Konfigurationszeilen ein und führe dich dann
durch , was
passiert, wenn ich den Datenbankpfad
einrichte. Der Datenbankpfad
geht also einfach
zum Stammordner und erstellt eine Datei namens
Einkaufswagen dot db. Dann entspricht die Verbindungszeichenfolge ich nur kurz
einen Con nenne, , die
ich nur kurz
einen Con nenne,
einer neuen
SQL Lite-Verbindung. Natürlich müssen Sie während des Vorgangs einige
fehlende Verweise einbeziehen. Also füge sie einfach so ein,
wie du sie siehst. Und die Datenquelle wird
gleich dem DB-Pfad sein. Und dann sagen wir Build Out
Services im DB-Kontext. Und wir haben einen
Einkaufswagen DB-Kontext
, der eine rote Linie hat,
weil er noch nicht existiert, aber setzen Sie
ihn trotzdem ein. Und dann setzen wir
die Option ein, dass wir Fortsetzung ITE verwenden, und das ist unsere Verbindung. Okay, damit wir diese Datei
erstellen können. Ich kontrolliere nur Punkte und ich generiere das
in einer neuen Datei. Dann haben wir den
Warenkorb DB-Kontext. Jetzt
treffe ich zuerst dieses Publikum und werde es dann vom DB-Kontext
erben lassen. Sobald Sie das tun, natürlich irgendwelche fehlenden Punkte
verpassen, indem Sie die
Referenz entsprechend verwenden. Jetzt, da ich
diese DVI-Kontexte
habe, will ich unseren Konstruktor. Und dann initialisiert dieser
Konstruktor unser Häkchen im DB-Kontext,
DB-Kontextoptionen. Und diese Optionen würden
sich selbst als Typ betrachten. Wir nennen das einfach Optionen und geben
das dann an die Basis weiter, oder? Im Wesentlichen injizieren
wir also die Optionen, die
aus unserer program.cs kommen. Und das wären die
Optionen hier, du siehst Licht. Und sie gaben
es nur an die Basis weiter, die den DB-Kontext ist
, den wir verwenden. Cql ITE. In Ordnung? Nein, wir
brauchen wirklich nur einen Tisch. Also sage ich einfach Requisite. Und dann
erstelle ich einen neuen Datentyp. Ich nenne es einfach
einen Einkaufswagen. Und nennen wir das
Einkaufswagen. Okay, wenn wir also eine mobile
App
erstellen, denken Sie darüber nach. Sie erstellen eine
mobile App, die
Menschen dabei hilft , beim Einkaufen zu kompilieren, was sie
wollen. Das machen
wir im Wesentlichen hier, oder? Später, wenn sich die App weiterentwickelt, möchten
wir vielleicht eine Möglichkeit
aufstellen, um
herauszufinden, zu welchem
Warenkorbdatensatz gehört, zu welchem Benutzer oder
welcher Benutzer diese
Interessen in zwei Teile hat. Aber wie gesagt, ich
halte es sehr einfach. An diesem Punkt, wenn wir uns weiterentwickeln, können
wir ausgefallenere Dinge einbringen. Und ich habe das an
die falsche Stelle gebracht, das sollte nicht
im Konstruktor sein. Ich entschuldige mich, das
sollte hinter dem Konstruktor her sein. Da sind wir los. Dies ist also die Eigenschaft
im EB-Kontext. Innerhalb des Framework Core muss
ich
in die Eigenschaften eingefügt werden. Und eigentlich sollte das
DB Set vom Typ Warenkorb sein. Ich frage mich also, warum
es so seltsam aussieht. So DB Satz vom Typ Einkaufswagen bekommt es keinen Einkaufswagen
ist ein Datentyp, den wir benötigen. Also schaffe ich das einfach. Und ich generiere
diese Klasse einfach in einer neuen Datei. Jetzt haben wir diese
Einkaufswagen-Datei. Ich kann einfach F 12 drücken, wobei es
ausgewählt ist und es wird
zu seiner Definition springen. Nein, was hat ein
Einkaufswagen? Nein, die meisten Entitäten,
und ich würde sagen, dass jede Entität in Ihrer Datenbank immer mit NAD beginnen
sollte. In Ordnung? Wir könnten
Artikelnamen, Artikelnamen haben. Okay, da ich das richtig mache
, versuche
ich hier Abkürzungen zu
nehmen, aber es ist, als ob meine, meine
Programmiersinne kribbeln. Erstens, wenn Sie
etwas in einen Warenkorb legen, geben
Sie wahrscheinlich
den Namen des Artikels ein. Sie würden wahrscheinlich die Menge
eingeben , die Sie voraussichtlich abholen. Und vielleicht möchten Sie
ein Flag setzen , um zu sehen, ob es ausgewählt
ist oder nicht. Hast du es abgeholt oder nicht? Hier ist also eine Zeichenfolge
für den Elementnamen. Und dann haben wir int
für die Menge. Oder es könnte doppelt für
die Menge sein , weil man 1,5 oder so sagen
könnte. Oh nein, Sie können den
entsprechenden Datentyp auswählen, also Menge und ein
boolescher Wert, der besagt, dass es ist. Das sind also unsere
Datentypen, oder? Wisse, dass wir den
Bowl haben, den ich lief. Jetzt habe ich die
grundlegende Vorlage dafür wie mein
Einkaufswageneintrag aussehen wird. Es heißt, springe zurück zum DB-Kontext des
Einkaufswagens. Und was ich tun werde
, ist,
die Methode für das Erstellen von
Modellen zu überschreiben . Wenn Sie also
das Wort override schreiben, werden
Sie gefragt, was
Sie überschreiben möchten? Und wir überschreiben
eine Nicht-Modellerstellung, und dann wird es das alles für uns
generieren, also brauchen wir diese erste Zeile. Dann ging ich zu einer
ModelBuilder-Punkt-Entität, diesem Warenkorb. Und dann möchte ich
sagen, dass das Daten hat. In diesem Fall
werde
ich die Datenbank
mit einigen Daten besetzen , damit wir, wenn
wir unsere API zur Überprüfung ausführen, Daten darin sehen, oder? So hat Daten
eine Sammlung von Objekten
jeglicher Art, die Sie
hier angeben, benötigt eine Sammlung von Objekten . Also würde ich einfach einen neuen
Einkaufswagen sagen und dann einen Ausweis geben , der
abgeholt wird, wäre gleich Stürze. Und der Artikelname wäre, mal sehen, Seife und
das ist eine Zeichenfolge. Und dann
wäre die letzte Quantität. Und wir brauchen zum Beispiel drei Stück
Seife, oder? Dann wird es einfach
eine Sammlung brauchen. Wir können also einfach Komma, trennt diese Objekte so viele
Objekte wie Sie möchten. Natürlich sollte jeder eine andere ID
haben, da ID automatisch als Primärschlüssel
in der Datenbank angesehen
wird . Also lasst es uns ein bisschen verwechseln. Lasst uns das treffen. Und das würde gezüchtet und wir sollten zwei
Brote holen. Und dieser kann Stürze bleiben, und dieser sollte Shampoo sein. Ich
erfinde das nur, während ich weitermache, da es keine Mariel-Einkaufsliste ist. Da sind wir los. Wir haben also drei Elemente
, die wir
in unsere Datenbanktabelle einsetzen möchten ,
wenn unsere App ausgeführt wird. Und wir haben so ziemlich
alles verdrahtet , um zur Laufzeit eine Datenbank
zu haben , oder? Was ich tun werde, ist zu
NuGet-Paketen zu gehen und
ein weiteres Paket zu installieren ,
zumindest für null. Und dieses wäre Entity Framework
Core-Dock-Tools, die uns Zugriff auf bestimmte
Befehle geben, die wir ausführen können weil wir
die Tabelle in der Datenbank erstellen müssen. Wir holen
die Tools und installieren das. Und wenn Sie nur hinschauen, können
Sie sich meinen Entity Framework Core-Kurs ,
wenn Sie nicht so vertraut sind mit
Entity Framework Core
nicht so vertraut sind. Kurz gesagt,
dies ermöglicht es uns, diese
Befehle auszuführen, mit denen wir eine Migration
hinzufügen und sie als Switches
aktualisieren können , worauf wir uns gerade
konzentrieren werden. Gehen wir also zu Tools und gehen zum NuGet-Paketmanager
und startete diese Konsole. Und dann sage ich
Add Bindestriche Migration. Und dann sage ich
einfach „Datenbank erstellen“. Und dann drücken wir Enter, lassen Sie es ein bisschen darüber nachdenken. Sobald es das getan hat, erhalten
wir unsere Migrationsdatei, die ich nicht auf die Details
eingehen werde, aber kurz gesagt, Tabelle erstellen und die Daten
einfügen. Und wir hatten drei
Rekorde eingelegt, oder? Der nächste Befehl
wäre also update Bindestrichdatenbank. Wenn die Datenbank nicht
existiert, wird sie
erstellt und
dann alle Datensätze eingefügt. An dieser Stelle sollte also unsere
Datenbank existieren. Du kannst weitermachen und bauen
und laufen und es einfach testen. Aber natürlich haben wir den Endpunkt noch nicht
gebaut. Wenn wir also zurückkommen, erstellen
wir den API-Endpunkt, der es uns ermöglicht
, diese Datensätze
abzufragen oder abzurufen denen wir wissen, dass sie sich
in der Datenbank befinden.
6. GET entdecken: Hallo Leute, willkommen zurück.
Also haben wir einfach unsere Datenbank eingerichtet, jetzt möchten
wir
unsere ersten Endpunkte einrichten , damit wir
sehen können, was sich in der Datenbank befindet. Denn als die Datenbank zur Laufzeit
bei modaler Erstellung
erstellt wurde , wollten
wir
diese Datensätze in sehen, also
sollten zumindest diese Datensätze in der
Datenbank enthalten sein und alles, was wir zumindest abrufen
möchten sie
und sehen Sie, wie die API funktioniert. Was wir also tun werden
, ist
der Vorlage zu folgen , die uns gegeben
wurde. Ja, es sind
Wettervorhersagen und ja, die Daten sind ein statischer Wechselrichter sich nur um dieses Array
handelt. Aber das Prinzip dahinter wie wir
unseren Code lesen werden, ist das gleiche. Unterhalb oder Wettervorhersage direkt über dem App-Punktlauf. Was ich tun werde, ist Punkte
aufzuschreiben, Mopp, hol. Okay, was
passiert ist, dass Sie für alle Methoden, die
Sie verwenden möchten, eine Map und
dann den Methodentyp sehen können. Also wollen wir meinen PUT
bekommen, meinen PUT
bekommen, posten oder löschen usw., oder? Wenn wir sie durchgehen, werden
Sie diese
Art von Mustern sehen. Also werden wir sehen, wie Mopp kommt, und dann müssen wir ihm die Adresse
geben. Um die Wettervorhersage zu erhalten, müssen
Sie die Prognosen für die URL
oder das Logo-Logo des
Server-URLs sehen . Wir wollen die Artikel des
Einkaufswagens bekommen. Wir würden sagen Schrägstrich in unserer
Schnur, Slash Einkaufskarten. In Ordnung? Und was wir dann
tun wollen, ist asynchron zu machen. Dann werden wir so ziemlich async und wir brauchen unsere Darstellung
unserer Datenbank. Also werde ich alles
zusammenbrechen, was nicht unbedingt notwendig
ist. Wir können also das meiste von dem sehen, was wir sehen müssen, in
einem Schuss, oder? Wir brauchen eine gewisse Darstellung
unserer Datenbank. Also muss ich sehen, dass die asynchrone Datenbank ein Objekt erstellt. Ich nenne es einfach dB. Und dann erstellen wir
einen Lambda-Pfeil. Und dann können wir
unseren Code ziemlich schreiben. In Ordnung. Also werde ich das einfach nach
unten bewegen und mit einem Semikolon enden. Und dann wird unser
Funktionscode in
diesem Abschnitt
der Methode enthalten sein , oder? Also sage ich eine seltsame DB. Dots Einkaufswagen,
College-Einkaufswagen Das ist in Ordnung. Liste. So ziemlich ich sage,
wähle Stern aus diesem Tisch aus. In Ordnung? Und so ziemlich
genau das wird es tun. Lassen Sie uns das überprüfen, schauen Sie sich das schön und sauber an. Wenn Sie also nicht an minimale APIs
gewöhnt wären und an
Controller gewöhnt sind, wissen Sie was, Da Sie eine
ganze große Datei für
wirklich nur diese
Codezeile mit alter Methode
und allem hätten wirklich nur diese
Codezeile . Das ist also eine nette,
prägnante Art zu sehen. Wenn Sie diesen Endpunkt erreichen, rufen Sie eine Kopie der Datenbank von unserem Service Builder
ab, fragen Sie ab und geben Sie zurück, was auch immer. Dann ist das wirklich
alles, was wir tun müssen. Okay, also lasst
uns die Zehen testen. Ich gehe einfach weiter und renne. Okay, also lasst
uns das jetzt testen. Ich gehe einfach weiter
und führe das API-Projekt aus. Und sofort
werden Sie feststellen, dass wir unsere neuen
Endpunkte haben, oder? Also haben wir unseren GET-Endpunkt. Wir können das erweitern
und wir können es sehen, ausprobieren und dann können
wir es ausführen. An dieser Stelle sollte es also die Methode
treffen, die in die Datenbank
geht und unsere Datensätze
abruft. Hervorragend, in Ordnung, also
wissen wir jetzt, dass eine oder API, ja, sie läuft zu unserer Datenbank erstellt
wurde und die
Datensätze in drei vorhanden sind, wir können sie abrufen und mit unserer
Datenbank
interagieren unsere API. Bevor wir also gehen, implementiere
ich einfach
die andere Art von GetMethod. Also kann ich
Daten abrufen, oder? In der Regel möchten Sie entweder alle Daten
oder möchten
einige der Daten. Und die Art und Weise, wie ich
die Summe bestimmt habe, wäre etwas. Also ICH SUMME. Aber die Art und Weise, wie Sie bestimmen welche Teilmenge der Daten
Sie wünschen, würde durch
einen von
Ihnen bereitgestellten Parameter verwendet werden , und dann führen Sie eine Abfrage
basierend auf dem Parameter aus. Um
Schwierigkeiten bei einer APA zu erkennen, haben
Sie zwei Arten von Toren. Vor jeder anderen Art von Toren hast du den Git, der alles
zurückgibt. Und dann erhalten Sie eine
eindeutige Kennung, die im Allgemeinen
entweder einen zurückgeben
oder nichts zurückgeben sollte , wenn er nicht gefunden werden
könnte, oder? Alles, was ich
tun werde, ist diese Getter-Methode zu
kopieren und einzufügen. Ich werde die
URL ändern und werde den Schrägstrich des
Einkaufswagens sehen und dann
eine Vorlage mit
geschweiften Klammern einlegen und ID sagen. Ich erwarte
also, dass
Sie, wenn
Sie diesen Endpunkt aufrufen ,
geben Sie einen ID-Wert an, was bedeutet, dass Sie den
Datensatz mit dieser ID haben möchten. Nun, in diesem In der Delegate-Kopfzeile füge
ich
einen Parameter hinzu, füge
ich um die Erfassung
der ID zu erleichtern. Also sage ich einfach int id, komma-Einkaufswagen DB-Kontext. Wir wissen,
dass dies bereits
vom System zur Verfügung gestellt wird. Das kommt
also nicht vom Benutzer, aber wir erleichtern hier den eingehenden ID-Wert
des Benutzers. Dann wird
unsere Anfrage anders aussehen. Wir werden keine seltsamen Einkaufskarten sehen
. Gehe zur Datenbank
und finde eine Senke. Und dann gebe ich ihm einen Ausweis. Und dann kann ich das ein bisschen
qualifizieren. Nein, weil es es entweder finden und
zurückgeben
wird oder wir es nicht finden und zurückgeben wollen
. Oder wir wollen vielleicht
zurückkehren, nicht angerufen. So kann ich sehen, dass der Einkaufswagen ist. Das ist also meine Art zu sehen was auch immer es hier
abgerufen wurde, ein Einkaufswagen-Objekt. In Ordnung? Und ich kann einen
Lambda-Ausdruck machen und ich breche
einfach die Zeilen, damit
es nicht so verwirrend ist. Also lass uns sehen. Ich
möchte ein Ergebnis des Typs zurückgeben, okay, mit den von
Ihnen angeforderten Daten, denen es sich um das
Warenkorbobjekt handelt , das abgerufen wurde. Und ich bin mir sicher, ich bin mir sicher, wenn Sie hier einen
Diskurs machen mit grundlegenden C-Sharp
vertraut ist. Also Lambda-Ausdruck, keine
Lambdas oder eine ternäre Operation. Oh mein, das tut mir leid. Ternäre Operation wäre also eine logische Operation, bei der
Sie sehen, was ist die Logik, die ich
beurteile? Stimmt es? Ist das falsch? Tu das. Es wurde gefunden und es ist ein Objekt vom Typ
Einkaufswagen dann, okay, das geben wir zurück. Ansonsten werden Buddhist sehen
Ergebnisse nicht angerufen. Und das würde das 404 geben,
das wir zuvor besprochen haben. Nun, eine weitere, die ich wahrscheinlich
jetzt machen möchte, während wir hier sind, ist was, wenn ich alle Gegenstände
finden wollte , die schnell
abgeholt
wurden, richtig. Die Sache ist also, dass
die Verhaftungs-APIs Ihre, Sie können es verwenden, wie Sie es erstellen können, wie Sie
es so erstellen können, wie Sie wollen. Stellen Sie einfach sicher, dass
Sie die Standards befolgen. Also kann ich hier eine weitere
wichtige Rolle erstellen, um sie abgeholt zu sehen. Wenn sie also diesen
Endpunkt aufrufen,
sollen nur abgeholte
Artikel zurückgegeben werden. Denn denken Sie daran,
wo auch immer diese Blume Sie sehen, die abgeholt
oder nicht abgeholt wird. Wenn es also abgeholt wird, sollten
nur die
hierher zurückkommen. Das wird alles
zeigen. Und dieser wird
nur einen Gegenstand zurückbringen. Okay, bis jetzt abgeholt, was ich tun werde, ist, db dot
Einkaufswagen Punkt wo zu sagen. Und dann setzen wir
unseren Lambda-Ausdruck und unseren Zustand ein
, in dem er abgeholt wird. In Ordnung? Und weil es boolean ist, kann
ich es einfach so lassen. Und dann habe ich einfach
Piraterie gesagt, dass ich auflisten soll, was unsere Ausführungserklärung
für oder wenn Kursaussage ist . Und das war's. Und so ziemlich wir haben gerade drei Gets
Endpoints in wenigen
Minuten
erstellt , in wenigen Minuten. Sobald Sie also alles erreicht haben, möchten Sie nur
abgeholte Gegenstände bekommen. Ich möchte nicht etwas
spezifisches von Adi bekommen, also lassen Sie mich das einfach schnell ausführen,
damit wir es beurteilen oder arbeiten können. Okay, also haben wir Prahler, wir haben bereits getestet, um uns auch
damit zu beschäftigen. Wir wissen, dass wir
mindestens einen Gegenstand haben, der
abgeholt wurde, war wahr jemand, der es
ausprobiert und ausführt. Und ich sollte stattdessen nicht
alles zurückbekommen, ich bekomme nur den einen Gegenstand abgeholt wird
,
sein wahres Excellent. Und wenn ich dann eins nach Ausweis will, kann
ich sehen, dass alles erledigt ist. Ich gebe nur die ID von einem an. Der Rekord, den ich bekomme Buck
hat einen Ausweis, oder? Wenn ich eine ID von zehn angegeben habe, da ich weiß, dass ich nicht weiß,
was ich um zehn gebeten habe, bekomme
ich das für alle
vier Antworten nicht gefunden. Das sind also alle
Antworten funktionieren, oder? Beachten Sie, dass
wir, als
er erfolgreich war, einen 200 Akkord zurückbekommen haben. Okay, das ist also die O wichtige
Antwort auf 100 in Ordnung. Wenn Sie also spezifisch sein möchten, können
Sie Ergebnisse sehen, die in Ordnung sind. Wenn
Sie so lange etwas zurückgeben, ist es automatisch
eingeschaltet. Okay? Das ist es also wirklich für uns, Endpunkte zu
erstellen oder zu bekommen.
7. PUT-Methode entdecken: Alles klar Leute, also machen wir in unserem Abenteuer
weiter und wir werden mit der Put-Methode fortfahren, oder? Was wir
bisher haben, wäre also Methoden zu bekommen, die wir abrufen können, aber was ist, wenn wir sie bearbeiten müssen? Vielleicht habe ich einen Fehler gemacht,
als ich den Artikel erstellt habe, etwa so etwas, oder? Also muss ich die PUT-Methode einsetzen. Der Put
nimmt also ziemlich die neuen Daten und teilt dann
mit, dass die Datenbank die alten Daten durch diese neuen Daten
ersetzt hat. Das ist im Wesentlichen alles
, was bei Ausgaben passiert. Um unseren Endpunkt zu erreichen, sage
ich nur nach
oben Punkt-Map-Ports. Und wie gesagt, du
wirst die Karte aktualisiert haben. Und dann die Methode, die du danach so ziemlich
willst, oder? Jetzt fügen wir unser
String-Muster oder unsere URL ein. Normalerweise sieht der Port
genau so aus, als ob er in Bezug auf das aussieht, wie diese
Vorlage aussieht. Also bekommen wir die gleiche Slash-ID des
Einkaufswagens, oder? Und dann sehen wir
sinken und int id. Dann nehmen wir ein Objekt des Typs
, den wir aktualisieren. Mit anderen Worten, wir werden
einen Warenkorbartikel aktualisieren. Das heißt, wenn Sie
mir einen Datensatz senden, der
in meiner Datenbank aktualisiert werden soll, müssen Sie mir natürlich den Datensatz
senden, Sie ersetzen möchten. Dieser Datensatz wäre diese ID, was sind die Daten, die
Sie ersetzen möchten? Im Wesentlichen ist das alles, was es ist. Also muss ich einen Parameter vom Typ
Einkaufswagen, Warenkorb einlegen. Denken Sie also daran, dass die ID durch die Vorlage
eintritt, aber der anzufordernde Port würde
im Allgemeinen die Daten senden, die nicht im Parameter enthalten sind,
ähnelt dem , was sie Teil
der Anforderung, des Hauptteils, sein würde. So werden wir das
in ein paar int id,
Warenkorb, Einkaufswagen sehen . Und natürlich brauchen wir eine
gewisse Darstellung unseres DB-Kontextes. Und das ist nur
ein großer Delegierter. Und dann semikolonieren wir
diese Klammer richtig. Was möchte ich jetzt machen? Das erste ist, dass ich
sicherstellen möchte , dass alles, was Sie aktualisieren
möchten,
tatsächlich existiert. Wenn es nicht existiert, dann kann ich
wirklich keinen Datensatz finden , den Sie aktualisieren
möchten. Also mache ich so etwas
wie das, was ich hier gemacht habe. Ich habe ein Gewicht gesehen, die Find-Methode, aber vorher muss ich es irgendwo
zuweisen. Var lässt uns also sehen, dass der Datensatz gleich
ist, um in
Einkaufswagen zu schauen und den Datensatz mit
dieser ID zu
finden, oder? Und eigentlich, lass mich etwas
früher zurückgehen, entferne diese Zeile. Was passiert ist
, dass wir mehrere Dinge erledigen werden. Im Gegensatz zu den anderen,
bei denen es Einzeiler gab, werden
wir
eine Reihe von Dingen haben damit unser Delegierter uns
wirklich nicht einfach erlauben kann, mehrere Zeilen
einzulegen. Also muss ich anstelle dieses
Delegiertengremiums
geschweifte Klammern einsetzen. Und das schließe ich einfach ab. Und dann kann
ich innerhalb
dieser geschweiften Klammern jetzt die verschiedenen
Codezeilen eingeben, die ich möchte. Also hier kann ich sehen, dass der var record gleich dem
db-Punkt-Einkaufswagen
ist, die asynchron finden. Und dann kann ich
mit dem Semikolon enden. In Ordnung? Es ist also ein anderer
Kodierungsstil. Es ist ein bisschen funktioneller
als prozedural, wie Sie wahrscheinlich an beides gewöhnt
wären. Es ist nur eine Frage der
Übung, dauerhaft zu machen. Also wollte ich sehen,
ob ein Rekord ist und generell möchte ich zuerst nach dem Negativen
suchen. Wenn der Datensatz also null ist
und Sie nach null suchen können indem Sie das Äquivalent zu null sehen oder Sie können tatsächlich sehen, dass es null ist. Dieser würde wahrscheinlich ein bisschen besser
lesen. Wenn es null ist
, gebe ich einfach
Ergebnisse zurück, Punkte wurden nicht gefunden. Ich konnte die Akte nicht finden du sagtest,
dass du es öffnen
willst? Nein. Wenn es über diesen Teil
hinausgeht, werden wir dieses Update durchführen
wollen. Also ging ich los, um einen
Rekordpunkt zu sehen, und dann
muss ich pinkeln und legal
bleiben bei jeder Methode tut mir leid, jede Immobilie, die
hereinkam und nicht dabei ist. Also notieren Sie hier
, was in der Datenbank ist. Warenkorb stellt hier die Daten des eingehenden Einkaufswagens, die Nutzlast, den
Anforderungstext mit den neuen Daten dar. Ich weiß nicht, ob du den Namen
änderst. Ich weiß nicht, was ich ändern soll. Also um nach dem Update alles auf der sicheren Seite
zu sein. Wenn Sie also an SQL gewöhnt sind und Anweisungen in SQL
aktualisieren, wissen
Sie, dass Sie jede einzelne Sache
in einer SQL-Anweisung
ändern müssen ,
nur um sicher zu sein, oder? Also ist es abgeholt, wird abgeholt. Was hatten wir sonst noch? Wir hatten Quantität. Ich glaube nicht, dass wir
irgendetwas haben , das global ist.
Id kann nicht aktualisiert werden. Okay, wir würden die Datensatzkennung aktualisieren wollen
. Nachdem wir
all diese Änderungen vorgenommen haben, möchten
wir warten db dot save ändert eine Senke, dann können wir zurückkehren. Wann immer wir also eine HTTP-Anfrage stellen, die nicht unbedingt
etwas zurückgeben muss, sehen wir keinen Inhalt. Also ist es Solons Kumpel. Ich komme nicht zurück. Okay, aber nach dem
Update-Vorgang muss
ich Ihnen
die Daten, die Sie mir einfach geben, nicht wirklich zurückgeben ,
weil Sie sie bereits haben. Also würde ich keinen Inhalt sagen, was so ziemlich bedeutet, dass
ich nichts zurückgeben kann. Aber das ist ein Werkzeug
für, da sind wir los. Es heißt also im Grunde, dass ich
nichts zu dir zurückgeben kann, aber deine Operation war gut. An diesem Punkt ist alles gut zu gehen, oder? Lassen Sie uns also
unsere Operation testen. Also werde ich einfach
laufen, ohne zu debuggen. Und Swagger ist
mit der Farbcodierung auf dem Ball, also wird es blau und dann haben
wir Orange gesetzt. Ich kann es ausprobieren. Niemand. Ich sehe dich in der ID
geht in den Parameter. Ich habe auch gesehen, dass der Rest der Daten in
den Anforderungstext fließt. Also hier sage ich, dass ich den Datensatz mit der ID1
aktualisieren möchte . Und welche Daten möchte
ich dann übermitteln? Das sind also riskante Dinge. Und in meinem vollständigen
End-to-End-API-Kurs weise
ich auf die
Gefahren hin, wenn bestimmte Felder im
Leben PUT- und Post-Endpoints aufgedeckt werden. Du kannst diesen Kurs durchlaufen. Aber ich halte
es hier noch einmal einfach, oder? Aber normalerweise
möchten Sie diesen ID-Wert verwenden oder Sie können
den Code so schreiben , wie wir es getan haben um keinen Doppelpunkt für den inhaftierten
ID-Wert zu erhalten. Sagen wir also, ich ändere
diese Werte, oder? Nehmen Sie also mit der ID1 auf,
schauen wir uns das an. Nein. Wenn ich also zum Get gehe, probiere es aus und sag Zeig
mir Rekord mit der ID1. Es wird
mir ID1-Artikel-Seife zeigen. Zahl drei
großes Top ist also falsch. Ich werde in diesem Anforderungstext
nichts ändern. Dieser Anforderungstext stellt
dieselben Felder und entsprechenden Werte dar
, die für
unseren Einkaufswageneintrag erwarten würden . Wenn ich also Ausführen drücke, passiert es, dass es für
alle vier erfolgreich war. Und wenn ich zurückgehe und
diesen Datensatz mit ID1 abrufe, führe
ich das einfach noch einmal aus. Jetzt werden wir sehen, dass
es genauso aussieht wie das was wir gerade
als Anfragetext geschickt haben. Also wenn ich das ändern will, um zu summen und
zehn Häuser abzuholen, oder? Führt aus. Alles was es tut ist
alles hier zu nehmen. Und die Idee ist, dass
es nur das
ersetzen wird, was sich in der Datenbank befindet. Da sind wir los. Okay, also ein paar Dinge darüber,
was Entity Framework getan hat. Erstens, wenn wir
unsere Aufzeichnungen abrufen, rufen
wir sie tatsächlich ab. Und es gibt diese Funktion
namens Trucking, die in einem
solchen Abruf mit Trucking
aktiviert ist .
Alle Änderungen, die
Sie an einer
der Eigenschaften vornehmen , sind die Werte. Sie können einfach „Änderungen speichern“ aufrufen. Und es wird automatisch
wissen, dass dies
geändert wurde , weil er die Werte
verfolgt hat. Sobald diese Zeile ausgeführt wird, weiß
sie, dass dieser Datensatz kein Zitat ohne Zitat verschmutzt
ist. Wenn Sie also sehen, ob GnG
sich diesen Datensatz anschaut und
die vorgenommenen Änderungen ausführt, passiert das so
ziemlich, oder? Es gibt andere Möglichkeiten
, da Sie Daten ohne Tracking
abrufen können . Was passiert
, ist , dass Sie, wenn Sie
Hunderte von Datensätzen haben wahrscheinlich nicht
nachverfolgen möchten, da dies Leistungsproblemen führen
kann. Sie würden also sehen, dass Personen
ihre Anfragen mehr verfolgen. Dies ist jedoch in der Regel eher für Anwendungen,
die diesen Status erreichen. Bisher
gibt es eine API keine wirklich, es gibt keinen wirklich
Status, der abgerufen wird. Und das ist nur ein
lehrbarer Moment. Ich helfe Ihnen nur zu verstehen, was
Tracking ist und warum das einfach so
funktionieren konnte,
ohne dass wir
db dot update anrufen. In Ordnung. Das ist also so ziemlich genau für uns, die Ausgabe
zusammenzustellen. Sie können sich also
alle Ausgaben vorstellen , die
Sie möglicherweise einrichten möchten. Aber für nein, das
ist gut genug.
8. POST-Methode: Unser Mann. Schauen wir uns also an, unsere Post-Methode zu
erstellen. Um das
einfach und schnell zu machen, kopiere
ich einfach
die Puts-Methode und
füge sie erneut ein. Und wir werden einen Mop-Pfosten
sehen, Post. Dieser Endpunkt ist nicht
bereit, einen Parameter darauf zu haben. Es wird also nur ein Slash-Einkaufswagen
sein. Und dann nehmen wir dieses Spirometer und
warten nur auf die Nutzlast
im Anfragetext, oder? Damit wir erwarten, dass dieses
Warenkorbobjekt zwei Editor-Datenbank
in Bezug auf den Code
erhalten wird , müssen
wir keine Überprüfungen durchführen. Alles, was wir tun müssen, ist diesen
Warenkorbartikel in die Datenbank zu legen. Ich sage nur
db dot Einkaufswagen. Oder ich könnte eigentlich
einfach db dot ungerade sagen. Und dann geben wir ihm einfach
das Einkaufswagen-Objekt. Und dann speichern wir Änderungen. Was wir dann zurückgeben werden, wäre eine Created Response. Also kreiert hätte
ein Tool eins, oder? Tool eins ist der Statuscode. So erschaffen. Du könntest auch
etwas mehr sagen wie es für eine Route erstellt wurde. Du kannst mir also den Root-Namen und ein paar andere ausgefallene Sachen geben. Aber ich halte
es einfach, erstellt. Und dann geben wir ihm einfach ein paar Daten zurück. Es weiß also, dass es
im Slash-Einkaufswagen erstellt wurde. Die Antwort wird also
den Endpunkt-Schrägstrich
und dann die ID haben . Im Grunde
sehen wir, wenn Sie
Einkaufswagen mit der Punkt-ID des
Einkaufswagens schneiden , dann können Sie diese Methode finden, diese Daten
finden, Entschuldigung. Dann geben wir das
eigentliche Objekt zurück. Im Wesentlichen erstellt
und wir sagen ihm die Zeichenfolge, wohin es
gehen kann, um die erstellten Daten zu sehen. Und dann ist das die
tatsächliche Datennutzlast neben der Route
, zu der Sie gehen könnten. Und das ist es im Wesentlichen. Also lasst uns das alte testen. Farbcodierung ist also
, dass
wir wieder unsere Post-Methode hier haben. Probiere es aus. Oh, und ich sollte keine Idee
geben,
wenn ich kreiere, aber wir haben bereits darüber gesprochen,
dass wir die
Dinge hier vorerst einfach halten. Versuchen wir es mit einem anderen
Gegenstand. Dieses Mal. Ich will Müsli und ich will
zwei Kisten Müsli. Und es wurde noch nicht
abgeholt. Wenn wir dies ausführen, stellt
das unsere
Objekte dar, die
dann an die Datenbank gesendet wurden und C erstellt wird, erhält
es die ID für und
alles ist da. Wenn ich also ein Get
all mache und ausführe, dann sehe ich 123 und unseren neu erstellten
Artikel, Punkt vier. Und das ist es wirklich
für alle Post-Methode. Also
warteten wir noch einmal auf die Nutzlast,
die dann bekam, was dazu führen wird dieses Objekt
entserialisiert wurde. Und dann haben wir es
der Datenbank hinzugefügt und dann speichern
wir Änderungen. Was Sie also mit
Entity Framework
Core sehen würden , ist, dass Sie tatsächlich sagen
könnten, dass db dot add und add einen Typ benötigt. Es weiß nicht wirklich, welcher
Typ versucht werden könnte. Aber solange es außerhalb
der Entität ist oder solange es es
im DB-Kontext findet und Sie
keine Probleme bekommen. Sie würden auch db dot und
dann die spezifische Tabelle
und dann diese Anzeige sehen , oder? Also zeige ich dir nur, dass
du entweder einen wirklich
db-Punkt in den Warenkorb legen kannst. Und dann weiß es, dass
Sie einfach die Änderungen speichern und es wird die entsprechende
Tabelle finden, um die Daten einzufügen. Und wir haben gesehen, dass das funktioniert. Das war's also für
unsere Post-Methode.
9. LÖSCHTE Methode entdecken: Wir sind zurück und dieses
Mal werden wir uns die Delete-Methode
ansehen. Also werden wir die Karten-Löschung durchführen. Noch einmal nehme ich
unseren PUT und dann werden wir einfach
nachgerüstet, um Delete zu sein. In Ordnung? Ich bin mir sicher, dass Sie wissen, was es ist, aber ich weiß,
dass es keine Rolle
spielt, in der Sie die Methoden einsetzen. Es ist nicht
gefälscht gelaufen, welcher zuerst ausgeführt
wird
sic auf unserem dritten weil es egal ist
Es geht nicht die chronologische Reihenfolge oder
die Reihenfolge der Methode ist genau die, welche
angefordert wird
Bei welcher 0.1 Sache sollte ich
darauf hinweisen, dass Sie niemals zwei
der gleichen Methoden mit
demselben Endpunkt haben sollten . Also lasst uns zurück zum Guten gehen. Wir haben mehrere Gets, aber beachten Sie, dass jeder
eine andere
Endpunktadresse hat , oder? Wenn ich also Methoden mit
denselben Slash-Einkaufswagen bekommen müsste , würde
das ein Problem verursachen. Aber weil ich einen Nmap-Posts
abgebildet habe, wo ist es, um
es richtig zu bekommen? Mein Beitrag. Und beide, wie
Slash Einkaufswagen, es verursacht keinen Absturz, weil man weiterkommt, einer ist Post. Wenn ich also vergessen habe, dies zu
ändern und füge die beiden Map Puts mit
demselben Endpunktwert hinzu. Es würde nur ein Problem verursachen. Schauen wir uns das tatsächlich an. Es ist gut, diese
Fehler zu sehen, damit wir wissen, was wir diagnostizieren, wenn wir mit diesen Herausforderungen
konfrontiert sind. Wenn Sie das tun und Ihre Lasten
lösen, wird
es Ihnen nur sagen, dass
Sie es hassen, nicht zu laden, keine Daten
mehr als das gibt. Wenn du so etwas bekommst, geh zurück und überprüfe und
vergewissere dich, dass du diesen Fehler nicht
machst. Eine einfache Lösung hier
ist es, map, delete zu sagen. Und es muss denselben Endpunkt beibehalten , weil
wir einen Einkaufsleitfaden wünschen. Ich brauche die ID dessen,
was wir löschen werden, was wir jedoch nicht benötigen, sind die Daten, die wir löschen
werden,
da wir die ID immer verwenden können, um den Datensatz zu finden. Also hier kriegen wir den Rekord. Wenn es nicht gefunden wird, kehren
wir zurück nicht gefunden. Und was ich dann tun werde
, ist einfach db dot zu sagen. Es wäre db-Punkt entfernen. Da sind wir los. Manchmal vergesse
ich diese Dinge. Also db dot remove und wir würden den Datensatz entfernen
, den wir mit dieser ID gefunden haben. Wir speichern Änderungen, also drücke
ich einfach Speichern. Und was passiert ist, dass
es in
Visual Studio 2022 eine Funktion namens Hot Reload gibt. Das ist also der Feuerball hier. Sie können also tatsächlich
aktivieren, dass beim Speichern automatisch ein Hot
Reload durchgeführt wird. Es könnte dich dazu veranlassen,
als würde es mich auffordern. Aber du kannst immer
einfach auf „Hot Reload“ tippen. Wenn er es dann nicht einfach neu laden kann, können
Sie einfach Rebuild sagen
und Änderungen anwenden. Und es wird tun, was
es
im Hintergrund tun muss , während Sie noch ohne Debuggen laufen. Und wenn Sie
ohne Debuggen laufen, dieses
Konsolenfenster geöffnet. Manchmal probierst du
vielleicht etwas aus, ich arbeite einfach nicht richtig. Sucht einfach nach dem
Konsolenfenster. Möglicherweise müssen Sie
es schließen und dann von vorne anfangen. So oder so, Hot
Reload ermöglicht es uns, unser Swagger-Dokument
einfach neu zu laden. Ich weiß, dass wir den Endpunkt richtig sehen oder
löschen. Wenn ich es dann ausprobiere
und dann versuche,
einen Datensatz mit der ID zu löschen einen Datensatz mit der ID ,
für den
wir gerade erstellt haben. Und das führen wir aus. Wir sehen,
dass wir alle Inhalte zurückgeben. Löschen ist also ein weiterer
Endpunkt, für den Sie keinen
Inhalt zurückgeben
können, oder? Es ist vollkommen in Ordnung. Im Konsolenfenster, während
wir uns im Entwicklungsmodus befinden, würden
Sie sehen, dass diese
Abfragen in der Konsole
ausgespuckt werden . Und das könnte für Sie
nützlich sein, um zu sehen, was generiert wird, wenn Sie diese EF
Core-Befehle mit dem rechten Fuß ausführen, obwohl wir uns nicht unbedingt darauf konzentrieren
müssen. Und an dieser Stelle haben
wir unsere
Crowd-API in Betrieb. Wenn wir jetzt wiederkommen, bereinigen wir
einfach unseren Code und lassen diesen
etwas vorzeigbarer aussehen.
10. API mit Swagger Doc: Okay, also lasst uns wieder
dran sein und lassen Sie uns das ausprobieren. Also werde ich einfach laufen, ohne diese ein
bisschen schneller zu
debuggen. Und wir werden nur das
Swagger-Tool verwenden , um diese API zu testen. Und jetzt wäre eine Alternative zu
Swagger
wie ein Postbote oder
ähnliches gewesen . Aber Saga ist fähig, also benutzen wir sie jetzt einfach. Wenn wir also unser Get erweitern, bedeutet das, dass wir wieder aufstehen
werden. Sammlung wird die Probe angezeigt, das Beispielobjekt dessen, was
wir zurückbekommen werden. Und beachte die quadratischen Klammern, die zeigen, dass es sich um eine Reihe von Objekten
handeln wird. Nehmen wir es aus, probieren es aus und führen aus, welchen Punkt es tatsächlich bei
Abfragen der Datenbank geht, und es gibt alle Beispielautos, die wir eingegeben
hätten, richtig? Wenn ich nun versucht habe, nach einem Ausweis zu kommen, lass mich das versuchen. Also versuch es alles. Es heißt,
gib mir die Idee, ich gebe es zehn. Und wir bekommen
die 200-Antwort mit
dem Auto mit der ID zehn zurück . Ich versuche es mit einer 100. Ich habe keine 100 Autos. Diesmal
kaufe ich das für alle vier, weil es das Auto nicht finden
konnte. Schlechte Idee, oder? Sie können darauf achten, die Antwort-URLs zu
leiten. Nämlich die, das
nennen wir die Basis-URL
, weil das der Server ist. Und dann wäre dies der Weg, und dann wird unser
ID-Wert sein, oder? Es ist also gut, auf diese Dinge zu
achten denn wenn wir
Code schreiben, um mit der API zu interagieren, müssen
wir diese Art von
URLs nachahmen , damit überprüft wird, dass
alles nach ID funktioniert. Versuchen wir es mit dem Pulitzer. Wenn ich versucht habe,
Auto mit ID1 zu modifizieren, machen
wir es in eine Zeichenfolge, String,
String, String, String. Lassen Sie mich also zuerst das Auto mit
der ID1
abrufen , damit wir sehen können,
wie es aussah. Das ist also das Auto mit dem Ausweis und wir nehmen unser
schnelles Exemplar davon. Es ist ein Honda Fit, Vinnys ABC. Wenn ich das jetzt ausführe, merke
ich, dass ich
alle Details eingeben und
dazu neigen würde , die Breite zu aktualisieren. Wenn ich also die Standardeinstellungen belasse
und auf Ausführen klicke, wird
mir kein Inhalt mitgeteilt,
was bedeutet, dass er erfolgreich war. Wenn ich versuche,
dieses Auto wieder zu holen
, werde ich sehen
, dass es nicht funktioniert. Lasst uns die Schnur einstellen. Und mein Kumpel. Das ist, das sind meine dummen Fehler. Also habe ich tatsächlich
die Aufgaben durcheinander gebracht, die ich
hätte zuweisen sollen. Notieren Sie, dass der Wert durch das Auto
hereinkommt. Dafür entschuldige ich mich also. Macht es wieder gut, dass ich mein
heißes Reload auf Save habe, also sollte ich einfach
zurückgehen und es erneut versuchen können. Das sind also Executes. Wir treffen uns mit einem Honda
Fit und so. Und als ich dann
versucht habe, hier auszuführen, bekomme
ich das Tool für. Also nein, ich sehe, da sind wir los. Jetzt sehen wir also, dass
sich alles in eine Zeichenfolge geändert hat. Mein alberner Fehler Leute. Das funktioniert also. Und deswegen ist das
Testen wichtig. Okay, also lass
mich einfach zu
meiner ursprünglichen Nutzlast zurückkehren und
dann erneut ausführen. Und dann können wir
überprüfen, ob wir jetzt die Originaldaten
sehen,
richtig, gut aussehen. Dann
ist das letzte der Löschvorgang. Welches möchte
ich also löschen? Lassen Sie uns immer noch das Ich bin nicht Ich will nicht sehen, welche
Art von Auto ich nicht mag. Was ich löschen werde. Das, das ich in
dieser Liste
am wenigsten mag , wäre das
Auto mit dem Ausweis vier. Es wird zu klein für meinen Geschmack sein. Dort bekommen wir
das Tool, das darauf hindeutet, dass es erfolgreich
abgeschlossen wurde. Wenn ich also zurückgehe und hinführe, gibt es kein
Auto mehr mit den IED vier. Einfach so funktioniert unser Code.
11. API: Alles klar Leute, also das
letzte Hören hat uns
unsere funktionierende API hinterlassen , die
grundlegende Crud-Operationen durchführt. Was wir nicht wollen,
ist der Zugangscode. Wir wollen die
prognostizierten Zitate nicht. Ich bin gegangen, um das zu entfernen. Ich werde
Record auch unten entfernen. Und im Moment haben wir nur
den Code, von dem wir wissen, dass
wir unbedingt brauchen. Wissen Sie, dass es verschiedene
Möglichkeiten gibt,
Ihre minimale API zu organisieren,
da Sie Methoden
erstellen können Ihre minimale API zu organisieren,
da Sie Methoden
erstellen können , für die Sie den Code
behindern. Du könntest es in
eine andere Klasse legen und es dann als Middleware
nennen. Es gibt eine Reihe von
Möglichkeiten, dies zu tun. Ich werde mich wirklich nicht auf
all diese Weise einlassen , oder? Nein. Aber zumindest am
Ende dieser Übung wissen
Sie, wie
Sie eine API mit
dem minimalen
Codierungsstil erstellen , der eine Crowd gegen die Datenbank
ausführen kann .