Skip to content

Latest commit

 

History

History
97 lines (70 loc) · 8.22 KB

Feladat-1.md

File metadata and controls

97 lines (70 loc) · 8.22 KB

Előkészítés

Az Entity Framework laboron készült adatmodellt (kissé kibővítve) fogjuk hasznosítani, hogy egy RESTful API-t készítsünk ASP.NET Core-ban.

  1. Hozz létre egy új C# nyelvű ASP.NET Core Web API (nem Web App!) típusú projektet MovieCatalog.Api néven

    • Érdemes a laborgépeken kikapcsolni a Configure for HTTPS lehetőséget, mert a gépekre nem biztos, hogy tudjuk telepíteni a fejlesztéshez szükséges tanúsítványt. Saját gépeken ilyen probléma nem lesz, viszont az első indításkor el kell fogadni a tanúsítvány telepítését a kettő megjelenő ablakban.
    • .NET verzió: 6.0
    • Minden extra opció legyen kikapcsolva, kivéve
      • Use controllers
      • Enable OpenAPI support - ezzel a műveleteink metaadata alapján generálódó Swagger UI tesztoldalt kapunk
    • Authentication type is None legyen
  2. Nem lesz szükség a létrejött projektben az alábbi fájlokra, ezek törölhetők:

    • Controllers/WeatherForecastController.cs
    • WeatherForecast.cs
  3. Töltsd le az alábbi DACPAC fájlt innen. Ami egy hordozható export formátum MS SQL Server adatbázisok számára.

  4. Csatlakozz egy LocalDB példányhoz a Visual Studio-s SQL Server Object Explorerben. Ezután a Databases mappán jobbklikk, majd válaszd Publish Data-tier Application opciót. Tallózd be a DACPAC fájlt és add meg adatbázis nevét, ami legyen a neptun kódod, majd mehet a Publish. Ezzel telepíted a DACPAC fájlban lévő objektumokat, adatokat az adatbázis kiszolgálóra. Import után érdemes ráfrissíteni az adatbázisok listájára.

  5. Add hozzá a fejlesztésre szánt kapcsolódási stringet az appsettings.Development.json fájlhoz (az appsettings.json "mögött" bújik meg). A beállítás neve is legyen a neptun kódod (pontosabban DBneptunkód).

    {
        "ConnectionStrings": {
            "DB<neptun kódra írj át>": "Server=(localdb)\\mssqllocaldb;Database=<neptun kódra írj át>;Trusted_Connection=True;MultipleActiveResultSets=true"
        },
        "Logging": { ... }
    }
    • Ha már korábbról van ugyanilyen névvel adatbázisunk, azt érdemes törölni, vagy más néven elnevezni a connection stringben az adatbázist, hogy ne akadjanak össze.
  6. Add hozzá a projekthez a Microsoft.EntityFrameworkCore.SqlServer NuGet csomagot

  7. Add hozzá az előre elkészített entitásmodell és adatbázis kontextus fájlokat a projektedhez egy új Entities könyvtárba. Ehhez érdemes letölteni ezt a git repot. A DACPAC adatbázis sémája megfelel az EF modellnek, és mivel nem módosítunk rajta, így EF migrációval ezen mérés keretében nem kell foglalkozni.

  8. Regisztráld az adatbázis kontextust a DI rendszerbe. (Program.cs)

  9. Add hozzá a projekthez az előkészített kivétel osztályokat innen egy új Exceptions mappába.

  10. Add hozzá a projekthez az előkészített GenreService és az IGenreService osztályokat innen egy új Services mappába.

  11. Regisztráld az IGenreService-t a DI rendszerbe scoped életciklussal. (Program.cs)

Általános szabályok

  • A kontroller nem használhatja adatbáziselérésre a kontextust, csak a Services mappában található IXXXService interfész műveleteit, közvetetten pedig a XXXService függvényeit.
  • A kontroller közvetlenül nem példányosíthatja a XXXService-t, csak konstruktoron keresztül kaphatja IXXXService-ként
  • A kontroller függvényei (azaz a műveletek) minden esetben
    • aszinkronok (async), de a nevüknek nem kell Async-ra végződni
    • Task<ActionResult> vagy Task<ActionResult<T>> visszatérési értékűek, ahol a T kollekció is lehet
  • A XXXService osztályok a különleges eseteket (unhappy path) kivételdobással jelzik a hívó felé. A szükséges kivételtípusok már implementálva vannak a projektben, az Exceptions mappából másoltuk be őket.
  • A XXXService osztályokban minden szükséges metódus váza megtalálható, de nem minden metódus van implementálva, a hiányzókat implementálnod kell legkésőbb a kapcsolódó feladat megoldásakor

Feladat 1.

Készíts egy új API kontrollert GenresController néven! A kontroller az alábbi műveleteket tudja elvégezni:

  • GET /api/genres
    • az összes műfaj lekérdezése,
    • 200-as HTTP válaszkóddal tér vissza (Ok), a válasz törzsben a műfajok sorosított listájával
  • GET /api/genres/<ID>
    • a megadott ID-jú Genre objektum lekérdezése,
    • ha az ID azonosítójú elem nem található, visszatérés 404-gyel (Not found)
    • egyébként 200-as HTTP válaszkóddal tér vissza (Ok), a válasz törzsében az adott ID-jú sorosított Genre objektum

Általános tudnivalók, megjegyzések, tippek

  • Az adatbázis sémája szinte megegyezik az EF laboron megismerttel, kivéve:
    • új index a Title.StartYear oszlopra
    • az új művek azonosítóját az adatbázis osztja ki
    • az ezen órai modell pont a fentiek miatt nem kompatibilis az előző órai adatbázissal
  • A XXXService osztályok a kivételes eseteket kivételdobással kezelik (pl. a megadott ID-val nem található elem ObjectNotFoundException<> dobást eredményez)
  • Kiinduló kontroller kódot lehet generáltatni. Ehhez a laborhoz az API controller with read/write actions generátor az ajánlott, az Entity Framework-ös generátorok gyakran hibára futnak és egyébként is körülbelül a generált kód ugyanannyi részét kellene átírni.
  • Sokszor körülményesebb az IIS Express-en történő debuggolás, helyette használhatod közvetlenül a Kestrel szervert is. Ehhez a zöld play gomb melletti menüben a projekt nevét viselő lehetőséget válaszd ki! Ezután indításkor az IIS Express tálcaikon helyett egy konzolalkalmazás indul el, ami hasznos üzeneteket is kiír a konzolra.
  • Régebbi .NET-en, vagy Open API/Swagger nélkül az F5 hatására a szerver elindul, automatikusan a /weatherforecast URL-re kerülünk. Mivel a szerverünknek nincsen felülete, a WeatherForecastControllert pedig töröltük, ezért itt egy 404-es oldal fogad minket. Ez nem gond, de ha a kezdő URL-t szeretnéd átírni, akkor a projekten belül a Properties/launchSettings.json fájlban teheted meg (launchUrl mező átírása vagy törlése).
  • Módosító/beszúró műveleteknél szükség van egy elemre sorosított formában, ezt kell általában ezen műveleteknél a törzsben küldeni. Érdemes ezt a sorosított formát a lekérdező művelet válaszából elcsenni.
  • Általad írt kódrészletekről képernyőképet kell beadni. Ezek a fájlok érintettek:
    • Program.cs
    • kontrollerek kódfájljai
    • XXXService-ek kódfájljai
  • Minden feladathoz beadandók tesztkésekről készítendő képek. A képet a Swagger UI beépített weboldalról kell készíteni. A kép a Curl résztől a Server response-ig terjedő részt (a Responses részt már nem) tartalmazza (response header és response body is, ha van!). Példák:

This is an image

This is an image

Beadandó tesztkérések

  • listázás
  • egy elem sikeres lekérdezése
  • nem létező elem lekérdezése

Következő feladat

Folytasd a következő feladattal.