Skip to content

🌾Et simpelt ASP.NET Core Web API projekt, der demonstrerer hvordan man kan bygge en REST API med Entity Framework Core og fremvisning med Swagger

Notifications You must be signed in to change notification settings

SaneStreet/CerealAPI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

60 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🌾 CerealAPI

Et simpelt C# .NET 9 Web API projekt, der demonstrerer hvordan man kan bygge en REST API med Entity Framework Core og dokumenteres med Swagger UI. Derudover er der ogsΓ₯ mulighed for Dockerization, og CI/CD med Jenkins, i en samlet pakke med docker compose. Projektet kan kΓΈres lokalt med dotnet run fra projektroden og Docker containers med docker compose up --build (--build er til fΓΈrste gang man kΓΈrer det)

NΓ₯r projektet kΓΈres i Docker med docker compose up --build sΓ₯ oprettes der 4 containere: cereal-api, cereal-db, cereal-frontend, og jenkins i Γ©n samlet compose

cereal-api er den container der holder pΓ₯ alt API funktionalitet. Som f.eks. Models, Controllers, Endpoints, etc. cereal-db er en MySQL database instance. cereal-frontend er React frontend der kΓΈres med Vite. Der er desuden hot-reload indbygget, sΓ₯ man ikke skal genstarte containere hver gang man Γ¦ndre pΓ₯ koden. jenkins er et CI/CD vΓ¦rktΓΈj der kΓΈrer i sin egen instance.


πŸ–ΌοΈ Frontend

NΓ₯r projektet kΓΈrer enten lokalt eller gennem Docker containerization, kan det tilgΓ₯s pΓ₯ http://localhost:5173.

πŸ—‚οΈ Projektstruktur

CerealAPI/
β”œβ”€β”€ πŸ“‚ CerealAPI/                 # API projektmappe
β”‚   β”œβ”€β”€ πŸ“ Controllers/             # API controllere
β”‚   β”œβ”€β”€ πŸ“ Data/                    # CSV-fil og database seeder
β”‚   β”œβ”€β”€ πŸ“ Migrations/              # Entity Framework migrations
β”‚   β”œβ”€β”€ πŸ“ Models/                  # Datamodeller
β”‚   β”œβ”€β”€ πŸ“œ CerealAPI.csproj         # C# projektfilen
β”œβ”€β”€ β”œβ”€β”€ πŸ‹ Dockerfile               # Dockerfilen til API
β”‚   └── βš™οΈ Program.cs               # Main entry point
β”œβ”€β”€ πŸ“‚ CerealFrontEnd/            # Frontend projektmappe
β”‚   β”œβ”€β”€ πŸ“ public/                  # Den "offentlige" mappe
β”‚   β”œβ”€β”€ πŸ“ src/                     # Resurse mappen
β”‚   β”‚    β”œβ”€β”€ πŸ“ api/                  # Indeholder API typing
β”‚   β”‚    β”œβ”€β”€ πŸ“ assets/               # Diverse assets
β”‚   β”‚    β”œβ”€β”€ πŸ“ components/           # Genbrugelige komponenter
β”‚   β”‚    β”œβ”€β”€ πŸ“ pages/                # Alle siderne der loades
β”‚   β”‚    β”œβ”€β”€ πŸͺ¨ App.tsx               # Filen hvor det hele kΓΈres (minimal size)
β”‚   β”‚    β”œβ”€β”€ πŸ“‹ types.ts              # TypesΓ¦tning til objekter (pt. kun Cereals) 
β”‚   β”‚    └── πŸ“‹ Og mange flere filer... 
β”œβ”€β”€ β”œβ”€β”€ πŸ‹ Dockerfile               # Docker filen til Frontend
β”‚   └── βš™οΈ Config-filer..           # En hel masse config filer
β”œβ”€β”€ 🎼 docker-compose.yml         # Orkestrerer API, MySQL, Frontend, og Jenkins
└── πŸ€΅πŸ»β€β™‚οΈ Jenkinsfile                # CI/CD pipeline konfiguration

πŸ“‘ API Endpoints

Metode Endpoint Beskrivelse Body (JSON) eksempel
GET /api/Cereal Hent alle cereals –
GET /api/Cereal/{id} Hent en cereal via Id { "id": 15 }
POST /api/Cereal Opret en ny cereal { "name": "Corn Flakes", "calories": 120 }
PUT /api/Cereal/{id} Opdater en cereal { "id": 1, "name": "Choco Pops", "calories": 200 }
DELETE /api/Cereal/{id} Slet en cereal { "id": 37 }

πŸš€ Teknologier

  • ASP.NET Core Web API
  • Entity Framework Core
  • MySQL Workbench
  • Swagger / Swashbuckle
  • Docker Containers
  • Jenkins
  • React w. Vite & TypeScript

🍽️ CSV-import og seeding

Ved fΓΈrste opstart importerer API’et automatisk data fra Data/Cereal.csv til databasen. Dette hΓ₯ndteres af CerealSeeder under opstart:

CerealSeeder.SeedProducts(context, "Data/Cereal.csv");

Hvis filen ikke findes, kaster den en exception f.eks.:

System.IO.FileNotFoundException: CSV filen blev ikke fundet

For at sikre adgang og at Docker faktisk kan finde filen tilfΓΈjes denne linje til docker-compose.yml:

volumes:
  - ./CerealApi/Data:/app/Data

βš™οΈ Installation (Lokal Udvikling)

  1. Klon repoet:
git clone https://github.com/brugernavn/CerealAPI.git
cd CerealAPI
  1. TilfΓΈj database-forbindelse i appsettings.json :
"ConnectionStrings": {
    "DefaultConnection": "server=localhost;database=cerealsdb;user=dinBruger;password=dinKode"
  }
  1. Opret migrations og opdater databasen:
dotnet ef add migrations initialCreate
dotnet ef database update
  1. Start API'et enten i Visual Studio Run eller .NET CLI:
dotnet run

πŸ“– Brug af Swagger

NΓ₯r API’et kΓΈrer, kan du Γ₯bne:

http://localhost:5555/swagger

Her kan ud teste alle endpoints til API'et i browseren.

Hvis det kΓΈres i Docker er porten 5556: (Husk at tjekke om Docker containers kΓΈrer fΓΈr du gΓ₯r ind pΓ₯ adressen)

http://localhost:5556/swagger

🚒 Dockerization

GennemgΓ₯ Dockerfile og docker-compose.yml for at sΓ¦tte dine egne vΓ¦rdier:

Dockerfile

EXPOSE 5556 # bruges i dette projekt

docker-compose.yml

# Under api:
ports:
      - "5556:5556"   # Docker API port
environment:
      - ConnectionStrings__DefaultConnection=Server=db;Port=3306;Database=cerealdb;User=DockerUserDb;Password=DockerPassDb;
      - ASPNETCORE_URLS=http://+:5556
      - DOTNET_ENVIRONMENT=Development
# Under db:
environment:
  MYSQL_ROOT_PASSWORD: DbPassIDocker
  MYSQL_DATABASE: cerealdb
  MYSQL_ROOT_HOST: '%'
ports:
- "3308:3306"   # Docker MySQL port

Derefter kan de startes gennem Docker Desktop, eller med Docker CLI fra rod-mappen (samme sted som README):

docker compose up --build

πŸ”„ CI/CD Pipeline

Pipelinen (defineret i Jenkinsfile) bestΓ₯r af fire hovedtrin: 🧾 Checkout – Henter projektet fra GitHub πŸ—οΈ Build – Genskaber og kompilerer .NET-projektet πŸ§ͺ Test – KΓΈrer enhedstests πŸš€ Deploy – Genstarter containerne via Docker Compose


🧭 Continous Integration Flowchart (Rough sketch)

        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚       GitHub         β”‚
        β”‚    (CerealAPI Repo)  β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚ Push / Commit
                   β–Ό
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚       Jenkins        β”‚
        β”‚   CI/CD Pipeline     β”‚
        β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
        β”‚  1️⃣ Build & Test     β”‚
        β”‚  2️⃣ Docker Compose   β”‚
        β”‚  3️⃣ Deploy API       β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚
                   β–Ό
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚        Docker Host         β”‚
        β”‚                            β”‚
        β”‚  πŸ₯£ CerealAPI | 🐬 MySQL  β”‚
        β”‚                            β”‚
        β”‚ Swagger β†’ localhost:5556   β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Repo Flow: NΓ₯r der pushes ny kode til GitHub, trigger Jenkins pipelinen, der automatisk bygger, tester og genstarter hele miljΓΈet i Docker. (I teorien)


πŸ§ͺ Test

Kald Lokalt API fra terminalen:

curl https://localhost:5555/api/cereal

Eller benyt Swagger til GET/POST requests.

Kald Dockerized API i terminalen:

curl http://localhost:5556/api/cereal

πŸ“‹ Mulige udvidelser

  • Jenkins Agent (docker image)
  • Frontend (React?)

About

🌾Et simpelt ASP.NET Core Web API projekt, der demonstrerer hvordan man kan bygge en REST API med Entity Framework Core og fremvisning med Swagger

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published