Grafikus C# – Windows Forms tanfolyam › 15.5 lecke

Továbbtanulás · 15.5 lecke · web

Desktop és webes felületek különbsége

Eddig telepített, asztali programokat készítettél: a kód a felhasználó gépén fut, a felhasználó a saját gépére telepíti. De a mai szoftverek nagy része webalkalmazás: a felhasználó a böngészőben nyitja meg, a program (és az adat) egy szerveren él. A két világ más szemléletet kíván: máshol fut a kód, más a telepítés és a frissítés, más a biztonság, és más a felelősség az adatokért. Ebben a leckében megérted a kliens–szerver modellt és a HTTP alapjait, látod egy kis ASP.NET Core webes szolgáltatás kódját, és megtanulod, mikor melyik megoldás a jó. Ez készíti elő a 15.6 leckét, amelyben a Windows Forms programod egy webes szolgáltatással beszélget.

  • kb. 90 perc
  • áttekintő szint
  • desktop és web
Diáklány C# programot készít laptopon

A lecke végére

  • összehasonlítod az asztali és a webes alkalmazást több szempont szerint;
  • elmagyarázod a kliens–szerver modellt, a HTTP kérés–válasz működését és az állapotmentességet;
  • megkülönbözteted a frontendet és a backendet;
  • elolvasol egy ASP.NET Core minimal API kódját;
  • érted a webes biztonság alapjait (szerveroldali ellenőrzés, HTTPS, hitelesítés, adatvédelem);
  • megalapozottan választasz asztali, webes vagy hibrid megoldást.

Mielőtt elkezded

Ehhez a leckéhez a 12. fejezet (rétegek, modell, szolgáltatás), a 13.5 lecke (bevitel-ellenőrzés), a 11. fejezet (async) és a 15.4 lecke (platformok) szükséges. HTML/CSS ismeret előny, de nem feltétel.

15.4 .NET MAUI →

Asztali és webes alkalmazás összehasonlítva

SzempontAsztali (telepített)Webes (böngésző)
Hol fut a kód?A felhasználó gépén (kliens).A szerveren (backend), a böngészőben csak a megjelenítés és a JavaScript (frontend).
TelepítésSzükséges (telepítő, ZIP: 14. fejezet), minden gépen.Nincs: a böngésző megnyitja a címet.
FrissítésÚj verziót kell kiadni, a felhasználónak telepítenie (14.6 lecke).A szerveren frissítesz egyszer, mindenkinek azonnal új.
Elérés, offlineOffline is működik; csak azon a gépen érhető el.Bárhonnan, bármilyen eszközről (internettel); offline csak különleges megoldással.
Hardver és rendszerTeljes hozzáférés (fájlok, nyomtató, USB, hang).A böngésző korlátai között (biztonsági homokozó).
Adat helyeA felhasználó gépén (14.7 lecke).A szerveren, közös: több felhasználó ugyanazt látja.
Több felhasználóNehezebb (közös adatbázis, szinkron).Természetes: ez a szerver feladata.
Biztonsági felelősségA felhasználó gépe és a telepítés biztonsága.A szerver védelme, hitelesítés, adatvédelem: te üzemelteted.
KöltségEgyszeri fejlesztés; nincs szerver.Szerver és üzemeltetés (hosting), folyamatos költség.
TeljesítményA gép erőforrásait használja; gyors, helyi.Hálózati késleltetés; a szerver kapacitása számít.
Kinézet és élményNatív, gazdag (Windows Forms, WPF).HTML/CSS/JavaScript (vagy Blazor): rugalmas, a böngészőtől függ.
Nincs „jobb”Mindkettőnek megvan a helye. A nyilvántartó, amelyet egy ember használ egy gépen, jól működik asztali programként. Ha többen, különböző gépekről kell, hogy ugyanazt az adatot lássák, a webes megoldás természetesebb.
Hibrid is vanGyakori a vastag kliens + szerver: az asztali program (Windows Forms, WPF) egy webes szolgáltatással (API) beszélget az adatért. Ezt készíti elő a 15.6 lecke. Így megvan az asztali kényelem és a közös, központi adat.
Mit ismersz már?A C#, az OOP, a rétegek (modell, szolgáltatás, tároló), az async, a JSON, a naplózás és a hibakezelés mind átvihető a webes szerver oldalra: a backend ugyanúgy C# kód.
Mit kell új tanulnod?A HTTP működését, a web biztonsági alapjait, a HTML/CSS/JavaScript alapjait (ha frontendet is írsz), és a szerver üzemeltetését.

Jósolj!

Egy iskolai nyilvántartásban a tanárok 10 különböző gépről szeretnék ugyanazt az adatbázist használni, és mindenki a legfrissebb adatot lássa. Melyik megoldás illik jobban?

Jóslat ellenőrzése

A webes (vagy kliens–szerver) megoldás: közös adat a szerveren, nincs szétszórt másolat, nincs telepítés minden gépre. Az asztali programban 10 gép 10 külön adatbázist használna, vagy közös fájlmegosztást, amely zárolási és szinkronizálási gondokat okoz (13.6 lecke).

Hogyan működik a web? Kliens, szerver, HTTP

LépésKi?Mi történik?
1.Böngésző (kliens)Kérést küld a szervernek: a metódus az olvasás (GET), a cím az /api/diakok.
2.Szerver (ASP.NET Core)Megkeresi, melyik C# kód felel a címért, és lefuttatja.
3.Szerver és adatbázisA szerver lekérdezi a diákok adatait az adatbázisból (a 13.6 lecke tárolója).
4.SzerverÖsszeállítja a választ: állapotkód (200: rendben) és a tartalom, általában JSON formátumban.
5.BöngészőMegkapja a választ, és megjeleníti (vagy a JavaScript feldolgozza).
Egy válasz tartalma (JSON, egyszerűsítve)JSON
[
{ "id": 1, "nev": "Anna" },
{ "id": 2, "nev": "Béla" }
]
Kérés és válaszA böngésző (vagy bármilyen program) kérést küld egy címre (URL), a szerver választ ad. A kérésnek van metódusa (GET: olvasás, POST: új adat, PUT: módosítás, DELETE: törlés), útvonala (/api/diakok), fejlécei és (POST-nál) törzse. A válasznak állapotkódja van (200 rendben, 400 hibás kérés, 404 nincs ilyen, 500 szerverhiba).
ÁllapotmentesA HTTP állapotmentes: a szerver minden kérést önállóan kezel, nem „emlékszik” az előzőre. A bejelentkezett állapotot süti (cookie) vagy token hordozza a kérésekben. Ez más, mint az asztali program, amelyben a változók a program élete alatt megmaradnak.
Frontend és backendA frontend az, amit a felhasználó lát a böngészőben (HTML, CSS, JavaScript, vagy Blazor); a backend a szerveren futó program (C#, ASP.NET Core): adatot kezel, szabályokat érvényesít, adatbázist használ. A kettő HTTP-n, gyakran JSON formátumban beszél.
API és RESTAz API (Application Programming Interface) a szerver „felülete programok számára”. A REST stílusú API az erőforrásokat címekkel (/api/diakok/3) és a HTTP metódusokkal kezeli. Egy API-t nem csak a böngésző, hanem egy Windows Forms program, egy mobilalkalmazás is hívhat (15.6 lecke).

Jósolj!

A felhasználó bejelentkezik a webalkalmazásba, majd a következő oldalra lép. A HTTP állapotmentes. Honnan „tudja” a szerver, hogy ő ugyanaz a bejelentkezett felhasználó?

Jóslat ellenőrzése

A bejelentkezés után a szerver egy sütit (vagy tokent) küld, amelyet a böngésző minden további kéréssel visszaküld: ebből azonosítja a felhasználót. Az azonosító titkos és védett kell legyen (HTTPS, biztonságos süti beállítások), különben ellophatják.

Egy kis webes szolgáltatás C#-ban (ASP.NET Core minimal API)

Program.cs (dotnet new web, .NET 8)C#
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

var diakok = new List<Diak>(); // egyszerűség kedvéért memóriában (élesben adatbázis)
int kovetkezoId = 1;
object zar = new object(); // a szerver egyszerre több kérést is kezel: szálbiztonság (11. fejezet)

// olvasás: a címhez a Get metódus tartozik; a visszaadott lista JSON-ként megy ki
app.MapGet("/api/diakok", () => { lock (zar) { return diakok.ToList(); } });

// új adat: a kérés törzse (JSON) UjDiak objektummá alakul
app.MapPost("/api/diakok", (UjDiak uj) =>
{
if (string.IsNullOrWhiteSpace(uj.Nev) || uj.Nev.Length > 40) // A SZERVER ellenőriz: a kliensnek nem szabad hinni (13.5 lecke)
{
return Results.BadRequest("A név kötelező, legfeljebb 40 karakter."); // 400-as állapotkód
}

lock (zar)
{
Diak d = new Diak { Id = kovetkezoId++, Nev = uj.Nev.Trim() };
diakok.Add(d);

return Results.Created("/api/diakok/" + d.Id, d); // 201-es állapotkód
}
});

// törlés: az útvonal része az azonosító
app.MapDelete("/api/diakok/{id}", (int id) =>
{
lock (zar) { return diakok.RemoveAll(x => x.Id == id) > 0 ? Results.NoContent() : Results.NotFound(); }
});

app.UseDefaultFiles(); // a wwwroot/index.html a kezdőlap
app.UseStaticFiles();
app.Run();

public class Diak { public int Id { get; set; } public string Nev { get; set; } = ""; }
public record UjDiak(string Nev);
Útvonal és kezelőA MapGet, MapPost, MapDelete egy HTTP metódust és egy útvonalat kapcsol egy C# lambdához. A visszaadott érték (lista, objektum) automatikusan JSON válasz lesz: a szerializálást a keretrendszer végzi (a 10. fejezet System.Text.Json ismerete itt is él).
ÁllapotkódokA Results.BadRequest (400), Created (201), NoContent (204), NotFound (404) a kliensnek mondja meg, mi történt. A jó API pontos állapotkódot és érthető hibaüzenetet ad.
Több kérés egyszerreA szerver egyszerre több kérést szolgál ki különböző szálakon (11. fejezet): a közös adatot (a lista) lock védi, különben versenyhelyzet keletkezik. Adatbázisnál az adatbázis kezeli a párhuzamosságot, de a gondolat ugyanaz.
Fejlesztés közbenA dotnet run elindítja a szervert egy helyi címen (például https://localhost:5001): böngészővel vagy az Invoke-RestMethod PowerShell paranccsal kipróbálható. A böngésző címsorába beírt cím GET kérést küld.
wwwroot/index.html: egy egyszerű frontend (HTML + JavaScript)HTML
<!doctype html>
<html lang="hu">
<head><meta charset="utf-8"><title>Diáklista</title></head>
<body>
<h1>Diákok</h1>
<input id="nev" placeholder="Név"> <button id="hozzaad">Hozzáad</button>
<ul id="lista"></ul>

<script>
async function betolt() {
const valasz = await fetch('/api/diakok'); // kérés a szerver felé
const diakok = await valasz.json();
const lista = document.getElementById('lista');
lista.textContent = ''; // töröl, majd újraépít
for (const d of diakok) {
const li = document.createElement('li');
li.textContent = d.nev; // textContent: a szöveg NEM értelmeződik HTML-ként (XSS elleni védelem)
lista.appendChild(li);
}
}

document.getElementById('hozzaad').addEventListener('click', async () => {
const valasz = await fetch('/api/diakok', {
method: 'POST', headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ nev: document.getElementById('nev').value })
});
if (!valasz.ok) { alert(await valasz.text()); return; }
document.getElementById('nev').value = '';
betolt();
});

betolt();
</script>
</body>
</html>
A frontend feladataA böngészőben futó JavaScript (fetch) kéréseket küld az API-nak, és a válaszból felépíti a megjelenítést. A logika és az adat a szerveren van; a frontend csak a felület. Ezt nevezzük kliens–szerver elválasztásnak.
Blazor: C# a böngészőbenHa nem szeretnél JavaScriptet írni, a Blazor a webes felületet is C#-ban (és Razor sablonokban) teszi lehetővé: a tanult nyelv a frontenden is használható. A modellek és a ViewModel-szerű logika megosztható a szerverrel.

Jósolj!

A frontend JavaScript ellenőrzi, hogy a név nem üres, és csak akkor küldi el. A szerver kódja viszont nem ellenőrzi. Mi a gond?

Jóslat ellenőrzése

Az API-t bárki közvetlenül hívhatja (más programmal, a böngésző fejlesztői eszközeivel), a weboldalt megkerülve: a kliensoldali ellenőrzés semmit nem véd. A szerver ellenőrizzen minden bemenetet; a kliensoldali ellenőrzés csak a kényelmet szolgálja (gyors visszajelzés).

Biztonság és felelősség: ami a weben más

TémaMit jelent?Védekezés
Bemenet ellenőrzéseAz API-t bárki hívhatja, bármilyen adattal.Minden bemenetet a szerveren ellenőrizz (13.5 lecke): típus, hossz, tartomány, kötelező mezők.
SQL-beszúrás (injekció)Ha a felhasználói szöveget közvetlenül fűzöd az adatbázis-lekérdezés szövegébe, a felhasználó megváltoztathatja a lekérdezés jelentését.Paraméteres lekérdezés (13.6 lecke): az adat soha nem válik a lekérdezés részévé.
Weboldalba beszúrt kód (XSS)Ha a felhasználó szövege HTML-ként értelmeződik az oldalon, mások böngészőjében fut le idegen kód.A szöveget szövegként jelenítsd meg (textContent, a keretrendszerek automatikus kódolása); ne fűzz bemenetet nyers HTML-be.
Titkosított csatornaTitkosítatlan kapcsolaton a jelszó és az adat lehallgatható.Mindig HTTPS.
Hitelesítés és jogosultságKi vagy te (bejelentkezés), és mit tehetsz (jogosultság)?Kész megoldás (ASP.NET Core Identity, külső szolgáltató); soha ne írj saját jelszókezelést; a jelszót nem tárolod szövegesen, csak sózott hash-ként.
Titkok kezeléseJelszavak, API-kulcsok, adatbázis-kapcsolat.Nem a forráskódban és nem a verziókezelőben (14.7 lecke): környezeti változó, titokkezelő.
AdatvédelemA szerveren a te felelősséged a felhasználók személyes adata (GDPR).Csak a szükséges adat, tájékoztatás, hozzáférés-korlátozás, törlési lehetőség, biztonságos tárolás.
NaplózásA szerver hibáit és eseményeit te látod egyedül.Szerveroldali napló (13.7 lecke), személyes adat nélkül; riasztás hibánál.
A bizalom irányaAz asztali programban a felhasználó a saját gépén dolgozik a saját adatával. A weben idegenek küldenek adatot a szerveredre: ezért a szerver semmit nem hisz el a kliensről, mindent ellenőriz és szűr.
ÜzemeltetésA webalkalmazás futtatása folyamatos munka: frissítések (operációs rendszer, .NET), mentések, figyelés, tanúsítványok, költségek. Az asztali programnál ez a felhasználóra száll; a weben rád.
Nem csak technikaSzemélyes adatok kezelése jogi felelősséggel jár (GDPR, intézményi szabályok). Iskolai projektnél különösen: ne tölts fel valódi diákadatot teszt- vagy bemutató szerverre; használj kitalált adatot.
Mit érdemes továbbtanulni?HTTP és REST, ASP.NET Core (minimal API, Razor Pages, Blazor), Entity Framework (adatbázis), hitelesítés, HTML/CSS/JavaScript alapok. A 15.6 lecke az első lépést teszi meg: a Windows Forms programod hívja az API-t.

Jósolj!

Az API-kulcsot a C# forráskódba írod, és a kódot feltöltöd egy nyilvános tárhelyre. Mi a kockázat?

Jóslat ellenőrzése

A kulcs nyilvánosan olvasható: automatikus programok percek alatt megtalálják a kiszivárgott kulcsokat, és visszaélhetnek velük (költséges hívások, adatlopás). Titkot ne tegyél a kódba; ha kiszivárgott, azonnal cserélni kell, nem elég törölni a kódból (a történetben megmarad).

📷 Képernyőkép helye

Mit tegyél ide: a böngészőben a futó diáklista weboldal, mellette a fejlesztői eszközök Network füle a kérésekkel.Javasolt fájlnév: winforms-15-5-web.webp · Alt szöveg: A webes diáklista és a hálózati kérések

Hibakeresés: te vagy a hibadetektív

Mi a baj, és hogyan javítod?

Gondold végig az okot, és csak utána nyisd le a megoldást.

1. 404-es hiba az API hívásakor

A böngésző „nem található” választ kap.

Ok és javítás

Elírt útvonal (/api/diak helyett /api/diakok), vagy nincs bejegyezve a MapGet. Ellenőrizd az útvonalat és a metódust (a böngésző címsora mindig GET).

2. 400-as hiba az adat küldésekor

A POST hibás kérést jelez.

Ok és javítás

A törzs nem érvényes JSON, hiányzik a Content-Type: application/json fejléc, vagy a mezők neve nem egyezik (nev a UjDiak.Nev-vel). Nézd meg a hálózati kérés törzsét a böngésző fejlesztői eszközében.

3. CORS-hiba a böngészőben

Egy másik címről hívott API-t a böngésző blokkolja.

Ok és javítás

A böngésző alapból megtiltja, hogy egy oldal másik eredetű (cím, port) API-t hívjon. A szerveren engedélyezni kell a CORS-t a megfelelő eredetre (builder.Services.AddCors), vagy a frontendet és az API-t ugyanonnan szolgáld ki. Nem „mindenkinek” engedélyezd (biztonság).

4. A szerver egy kérésnél összeomlik

Hibás bemenetnél 500-as hiba jön.

Ok és javítás

A kezelőkód nem ellenőrzi a bemenetet (null, üres név), és kivétel keletkezik. Ellenőrizd a bemenetet, és adj 400-as választ; a szerver naplózza a kivételt (13.7 lecke), de a kliensnek ne adj stack trace-t.

5. Két kérés összeakad

Egyszerre két felhasználó adata keveredik, vagy az azonosító duplán fordul elő.

Ok és javítás

Versenyhelyzet a közös adaton: lock, szálbiztos gyűjtemény, vagy adatbázis-tranzakció (11. fejezet, 13.6 lecke).

6. Működik helyben, élesben nem

A webalkalmazás a saját gépeden jó, a szerveren hibás.

Ok és javítás

Eltérő környezet: hiányzó beállítás (kapcsolati szöveg, környezeti változó), írási jog, adatbázis, tűzfal, HTTPS tanúsítvány. Naplózás és a hibaoldalak ellenőrzése (14. fejezet gondolata: tiszta környezetben is próbáld ki).

Mini projekt: a nyilvántartó webes változata

Készítsd el a diáknyilvántartó legegyszerűbb változatát webes szolgáltatásként és weboldalként, majd hasonlítsd össze a korábbi asztali programmal:

  1. Projekt: dotnet new web -n DiakWeb (vagy a Visual Studio ASP.NET Core Empty sablonja), majd dotnet run: a helyi cím megnyílik a böngészőben.
  2. API: másold be a leckebeli Program.cs-t (MapGet, MapPost, MapDelete), és egészítsd ki egy PUT végponttal (a diák nevének módosítása, ugyanazzal az ellenőrzéssel).
  3. Weboldal: hozd létre a wwwroot/index.html fájlt a leckebeli JavaScripttel; egészítsd ki törlés gombbal minden sor mellett.
  4. Szerveroldali ellenőrzés: a név ellenőrzését (kötelező, legfeljebb 40 karakter, nincs duplikátum) tedd egy külön osztályba (a 12. fejezet szerint), amelyet az API hív.
  5. Próbák PowerShellből: hívd az API-t Invoke-RestMethod paranccsal: listázás, új diák, üres név (400-as hiba), nem létező azonosító törlése (404), kitörlés.
  6. Böngésző-eszköz: nyisd meg a böngésző fejlesztői eszközét (F12), a Network fülön nézd meg a kéréseket: metódus, cím, állapotkód, válasz törzse.
  7. Két böngésző, közös adat: nyisd meg az oldalt két böngészőablakban: add hozzá az egyiken a diákot, frissítsd a másikat; ugyanazt látják-e? Ezt az asztali programnál hogyan oldanád meg?
  8. Összehasonlító táblázat: szempont, Windows Forms nyilvántartó, webes változat: telepítés, frissítés, hol az adat, több felhasználó, bevitel-ellenőrzés helye, offline működés, üzemeltetési teendők, adatvédelmi felelősség.
  9. Következtetés: 5–6 mondat: melyik megoldást választanád egy 10 fős iskolai munkacsoportnak, és melyiket egy egyszemélyes naplóprogramnak; mit tennél, ha mindkettő kell (hibrid, 15.6 lecke)?
Megoldás megnyitása (próbáld ki előbb önállóan!)
PowerShell próbák és a PUT végpont (a leckebeli Program.cs kiegészítése)PowerShell / C#
# --- PowerShell: az API kipróbálása (a cím a dotnet run kimenetében látszik) ---
$alap = "https://localhost:5001/api/diakok"

Invoke-RestMethod $alap # lista
Invoke-RestMethod $alap -Method Post -ContentType "application/json" -Body '{"nev":"Anna"}' # új diák (201)
Invoke-RestMethod $alap -Method Post -ContentType "application/json" -Body '{"nev":""}' # üres név: 400-as hiba
Invoke-RestMethod "$alap/999" -Method Delete # nincs ilyen: 404
Invoke-RestMethod "$alap/1" -Method Delete # törlés (204)

// --- C#: PUT végpont a Program.cs-ben ---
app.MapPut("/api/diakok/{id}", (int id, UjDiak uj) =>
{
if (string.IsNullOrWhiteSpace(uj.Nev) || uj.Nev.Length > 40) { return Results.BadRequest("A név kötelező, legfeljebb 40 karakter."); }

lock (zar)
{
Diak d = diakok.FirstOrDefault(x => x.Id == id);

if (d == null) { return Results.NotFound(); }

d.Nev = uj.Nev.Trim();

return Results.Ok(d);
}
});

Várt tapasztalat: az üres névre 400-as, a nem létező azonosítóra 404-es hibát kapsz (a PowerShell kivételként jelzi); a két böngészőablak ugyanazt a listát látja (a frissítés után), mert az adat a szerveren van; a webes változatnál a program frissítése a szerveren egyszer történik. A fejlesztői tanúsítvány miatt a PowerShell figyelmeztethet az első https hívásnál (dotnet dev-certs https --trust megbízhatóvá teszi). A pontos port és a viselkedés a gépedtől és a .NET verziótól függ.

📷 Képernyőkép helye

Mit tegyél ide: a böngészőben a kész weboldal, és a PowerShell kimenete a próbákról.Javasolt fájlnév: winforms-15-5-kesz.webp · Alt szöveg: A kész webes nyilvántartó és az API-próbák

Három önálló gyakorlófeladat

Egyszerre csak egyet csinálj: tervezd meg, írd meg, futtasd, ellenőrizd, és csak utána nyisd ki a megoldást.

1. Állapotkódok

Milyen állapotkódot adsz: (a) sikeres lekérdezés; (b) új elem létrehozva; (c) hibás bemenet; (d) nem létező elem; (e) váratlan szerverhiba?

Egy lehetséges megoldás

(a) 200; (b) 201; (c) 400; (d) 404; (e) 500. Az 500-as hibánál a kliensnek általános üzenetet adsz, a részleteket a szerver naplózza.

2. Melyik hová?

Döntsd el, hogy a következő szabályok a szerverre vagy a kliensre kerüljenek: (a) a név nem lehet üres; (b) gyors visszajelzés gépelés közben; (c) a jegy 1 és 5 között van; (d) csak a tanár törölhet.

Egy lehetséges megoldás

Mind a szerveren érvényesüljön (a), (c), (d): ezek a szabályok és a jogosultság. A (b) a kliens dolga a kényelemért, de a szerver is ellenőriz. A szabály: a kliensoldali ellenőrzés csak kényelmi, a szerveroldali a biztonsági.

3. Hibrid terv

Rajzold le (szavakkal), hogyan beszélne a Windows Forms nyilvántartó a webes szolgáltatással.

Egy lehetséges megoldás

A Form eseménykezelője egy szolgáltatás-osztályt hív (12.8 lecke), amely HttpClient-tel kéri az API-t (async, 11. fejezet), a választ JSON-ból objektummá alakítja, és a Form a listát megjeleníti. A hálózati hibát try–catch kezeli (13.6 lecke). A következő lecke ezt építi fel.

Gyakorlótár: 6 további feladat

Három szinten gyakorolhatsz: alap, közepes és kihívás. Csak a próbálkozás után nyisd le a megoldást.

Alap szint

1. Hol fut a kód?

Asztali programban és webalkalmazásban hol fut a logika?

Megoldás megnyitása

Asztali programban a felhasználó gépén; webalkalmazásban a szerveren (a böngészőben csak a megjelenítés és a JavaScript).

2. Mi a HTTP metódus?

Melyik metódus olvas, melyik hoz létre, melyik töröl?

Megoldás megnyitása
GET olvas, POST létrehoz, DELETE töröl (PUT módosít).

Közepes szint

3. Állapotmentes

Mit jelent, hogy a HTTP állapotmentes?

Megoldás megnyitása

A szerver minden kérést önállóan kezel, nem őrzi az előzőt; az állapotot süti vagy token hordozza.

4. Frontend és backend

Melyik a böngészőben, melyik a szerveren?

Megoldás megnyitása

A frontend (HTML, CSS, JavaScript) a böngészőben, a backend (ASP.NET Core C#) a szerveren fut.

Kihívás szint

5. Miért szerveroldali ellenőrzés?

Ha a weboldal már ellenőrzi a bemenetet, miért kell a szerveren is?

Megoldás megnyitása

Az API-t bárki közvetlenül hívhatja a weboldal megkerülésével: csak a szerveroldali ellenőrzés véd.

6. Mikor melyiket?

Egy egyszemélyes, offline napló és egy közös iskolai jelenléti rendszer: melyik asztali, melyik webes?

Megoldás megnyitása

Az egyszemélyes, offline napló asztali (vagy mobil) program; a közös jelenléti rendszer webes (vagy kliens–szerver), mert több felhasználó közös adatát kell kezelni.

Gyors önellenőrzés

Válaszolj fejben, és csak utána nyisd le a választ.

1. Mi a kliens–szerver modell?

A kliens kérést küld, a szerver választ ad; az adat és a logika jellemzően a szerveren van.

2. Mi az API?

A szerver felülete programok számára, címekkel és HTTP metódusokkal.

3. Mi a JSON?

Szöveges adatformátum, amelyben az API az adatot küldi (10. fejezet).

4. Mi a minimal API?

Az ASP.NET Core rövid szintaxisa, amelyben egy útvonalhoz egy lambda kezelőt kapcsolsz (MapGet, MapPost).

5. Miért kell HTTPS?

Titkosítja a kapcsolatot, így a jelszó és az adat nem hallgatható le.

6. Hol tartod a titkokat?

Nem a kódban: környezeti változóban vagy titokkezelőben.

7. Mi a hibrid megoldás?

Asztali (vagy mobil) kliens, amely egy webes szolgáltatással (API) tartja a közös adatot.

Mit tudsz már?

  • Összehasonlítod az asztali és a webes alkalmazást (telepítés, frissítés, adat, biztonság, költség).
  • Érted a kliens–szerver modellt, a HTTP metódusokat és állapotkódokat, az állapotmentességet.
  • Elolvasol egy ASP.NET Core minimal API-t és egy egyszerű weboldalt.
  • Ismered a webes biztonság alapjait, és a szerveroldali ellenőrzés szerepét.

Következő lecke: Webszolgáltatások használata grafikus programból

A Windows Forms programod hívja az API-t: HttpClient, JSON, async, hibakezelés.