AI Flashcards
Hvad er en API(Application Programming Interface) , og hvorfor bruger vi den i projektet?
en måde at kommunikere med et andet system over internettet. I projektet bruger vi API’er til at få AI-svar fra fx OpenAI.
Hvad er WebClient, og hvordan bruges den?
bruges til at sende HTTP-kald til eksterne API’er. Det er en moderne måde at hente data fra fx OpenAI eller andre AI-tjenester.
Hvad er en DTO (Data Transfer Object)?
en Java-klasse, som matcher den data, vi modtager fra en API eller selv sender ud. Det gør det nemt at arbejde med JSON-data i Java.
Hvad får man tilbage fra OpenAI API?
Et JSON-svar med AI’ens svar indeni (typisk i choices[0].message.content).
Hvordan kan man håndtere svaret fra OpenAI API i Java?
Enten som en String (rå JSON-tekst) eller som et Java-objekt (DTO)
Hvad betyder det at modtage svaret som en String?
Du får hele JSON-svaret som tekst, og skal selv læse/parse det manuelt hvis du vil bruge indholdet.
Hvad betyder asynkron kode?
Det betyder, at programmet ikke venter på et svar, men kører videre. Svaret håndteres senere – godt hvis du kalder mange API’er.
Hvad er Mono, og hvad gør .block() i WebClient?
Mono repræsenterer et fremtidigt svar (asynkront). .block() venter på svaret og gør det synkront – dvs. programmet stopper og venter, til svaret er klar
Hvad betyder caching, og hvordan bruges det i projektet?
Caching betyder at gemme et svar (fx fra OpenAI) i databasen. Hvis samme spørgsmål stilles igen, hentes svaret hurtigt og gratis fra databasen.
Hvad er et endpoint i Spring Boot?
Et endpoint er en URL, som din backend tilbyder, fx /chat?message=hej. Det laves med @RestController og @GetMapping i Java.
Hvad er @GetMapping og @RequestParam?
- @GetMapping definerer et endpoint, som kan kaldes med GET.
- @RequestParam bruges til at hente en værdi fra URL’en, fx navnet i /chat?name=kim.
Hvorfor bruger vi POST til at kalde OpenAI?
Fordi vi sender en besked (prompt) med indhold – og det gøres normalt med POST, da det er mere sikkert og fleksibelt end GET.
Hvordan ser et simpelt API-kald med WebClient ud?
public String getData() {
return webClient
.get() // laver et GET-kald
.uri(“/data”) // endpointet på API’et
.retrieve() // henter svaret
.bodyToMono(String.class) // konverterer svaret til en String
.block(); // gør det synkront (venter på svaret)
}
Hvad er forskellen på retrieve() og exchange() i WebClient?
- retrieve() er den nemme måde, hvor du bare henter svaret.
- exchange() giver dig mere kontrol over statuskode og headers.
Hvad er en JSON, og hvorfor bruger vi det?
en måde at strukturere data på. Det er det format, vi sender og modtager fra API’er som OpenA
Hvordan kan vi kalde flere API’er parallelt?
Vi kan bruge Mono.zip(…) til at samle flere Mono objekter, så vi kan vente på, at de alle er færdige på én gang – det er hurtigere.
Hvad gør @CrossOrigin i et Spring Boot-projekt?
tillader, at din backend kan modtage kald fra en frontend, der kører på en anden adresse (domæne/port). Det løser problemer med CORS (Cross-Origin Resource Sharing).
Hvad er WebClient.Builder, og hvorfor bruger man det?
bruges til at oprette en WebClient med en fast base-URL og evt. fælles headers. Det gør din kode nemmere at genbruge
Hvad gør @Configuration i Spring Boot?
markerer en klasse, som definerer konfiguration – fx WebClient, databaseforbindelser eller beans, som Spring skal styre.
Hvad er forskellen på Mono<T> og Flux<T>?</T></T>
- Mono<T> = én ting kommer tilbage (fx ét svar eller én liste).</T>
- Flux<T> = mange ting kommer tilbage (som en strøm af elementer).</T>
Hvad gør @Value(“${ARTICLEAPIKEY}”) i ArticleApiService?
Den henter API-nøglen fra application.properties eller en miljøvariabel, så den ikke er hardcodet i koden.
Hvad gør .queryParam(“q”, topic) i WebClient-kaldet?
Den tilføjer et søgeord til URL’en, så vi kan hente artikler om et bestemt emne fra API’et.
Hvad gør objectMapper.readTree(jsonResponse)?
Den konverterer JSON-svaret til et objekt, så vi kan hente felter som titel og beskrivelse.
Hvordan bruges @RestController og @PostMapping(“/study-helper”) i QuizController?
@RestController gør klassen til en HTTP-controller, og @PostMapping definerer et endpoint, som modtager POST-requests.