GraphQL-API:er med Spring Boot · Lektion

Enumtyper och anpassade skalärtyper

Utöka Ert GraphQL-schema bortom de inbyggda typerna genom att definiera enumtyper för fasta värdemängder och anpassade skalärer för domäntyper som datum och URL:er i Spring Boot.

Lektion 4 av 413 steg

Enumtyper och anpassade skalärtyper är en gratis lektion i GraphQL-API:er med Spring Boot på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för GraphQL-API:er med Spring Boot, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i GraphQL-API:er med Spring Boot innehåller totalt 4 lektioner.

Bortom inbyggda typer

GraphQL levereras med skalärer som Int, String och Boolean. Men verkliga domäner behöver mer: en fast uppsättning statusar, en riktig datumtyp eller en validerad e-postadress.

Enum-typer och anpassade skalärer låter schemat uttrycka detta exakt.

Vad är en GraphQL-enum?

En enum begränsar ett fält till en fast lista med namngivna värden. Klienterna kan endast skicka eller ta emot ett av dessa värden, och verktyg kan erbjuda autokomplettering.

enum OrderStatus {
  PENDING
  SHIPPED
  DELIVERED
  CANCELLED
}

Använda en enum i en typ

Referera till enumen precis som till vilken annan typ som helst. Fältet garanteras nu innehålla en giltig status.

type Order {
  id: ID!
  status: OrderStatus!
}

Mappa enum-typer till Java

Spring for GraphQL mappar automatiskt en schema-enum till en Java-enum när namnen matchar exakt.

public enum OrderStatus {
    PENDING, SHIPPED, DELIVERED, CANCELLED
}

Varför anpassade skalärer?

De inbyggda skalärerna är begränsade. Om ett datum representeras som en String går betydelse och validering förlorade. En anpassad skalär definierar hur ett domänvärde serialiseras, deserialiseras och valideras.

Deklarera en skalär i schemat

Deklarera först skalärens namn i SDL och använd den sedan på fält.

scalar DateTime

type Event {
  id: ID!
  startsAt: DateTime!
}

Använda ett färdigt skalärbibliotek

Biblioteket graphql-java-extended-scalars tillhandahåller färdiga skalärer för DateTime, Date, URL med mera, så att du inte behöver skriva dem själv.

// build.gradle
implementation 'com.graphql-java:graphql-java-extended-scalars:21.0'

Registrera en skalär i Spring

Koppla skalären till körmiljön med en RuntimeWiringConfigurer-bean, så att schemat vet hur den ska hanteras.

@Bean
public RuntimeWiringConfigurer scalars() {
    return wiring -> wiring.scalar(ExtendedScalars.DateTime);
}

Skriva en egen skalär

För en domäntyp kan du definiera en GraphQLScalarType med en anpassad Coercing-implementering som styr logiken för parsning och serialisering.

GraphQLScalarType.newScalar()
    .name("Email")
    .coercing(new EmailCoercing())
    .build();

Validering i Coercing

En skalärs Coercing kan avvisa ogiltiga indata genom att kasta en CoercingParseValueException, vilket ger typnivåvalidering utan extra arbete.

if (!value.toString().contains("@")) {
    throw new CoercingParseValueException("Invalid email");
}

Bästa praxis

Använd dessa typer med eftertanke:

  • Föredra enum-typer framför fritt formaterade strängar för fasta uppsättningar
  • Återanvänd bibliotekets skalärer innan du skriver egna
  • Håll Coercing-logiken ren och förutsägbar
  • Dokumentera det förväntade formatet för varje anpassad skalär

Snabb kontroll

Testa dina kunskaper om enum-typer och skalärer.

Sammanfattning

Du har utökat schemats typsystem:

  • Enum-typer begränsar fält till en fast uppsättning värden
  • De mappas automatiskt till Java-enumtyper via namnet
  • Anpassade skalärer modellerar domäntyper som datum och e-postadresser
  • Använd bibliotekets skalärer eller skriv en egen Coercing
  • Registrera skalärer via RuntimeWiringConfigurer

Mer uttrycksfulla typer gör ditt API säkrare och tydligare.

Gratis att börja

Lär dig GraphQL-API:er med Spring Boot med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
12
Lektioner
48

Vanliga frågor

Är lektionen ”Enumtyper och anpassade skalärtyper” gratis?

Ja – hela texten till ”Enumtyper och anpassade skalärtyper” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i GraphQL-API:er med Spring Boot, kan Ni uppgradera till CoddyKit PRO. Kursen i GraphQL-API:er med Spring Boot innehåller totalt 4 lektioner.

Vad lär jag mig i ”Enumtyper och anpassade skalärtyper”?

Utöka Ert GraphQL-schema bortom de inbyggda typerna genom att definiera enumtyper för fasta värdemängder och anpassade skalärer för domäntyper som datum och URL:er i Spring Boot. Ni övar på GraphQL-API:er med Spring Boot med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig GraphQL-API:er med Spring Boot?

Du behöver inga förkunskaper. Utbildningen i GraphQL-API:er med Spring Boot på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Enumtyper och anpassade skalärtyper”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här GraphQL-API:er med Spring Boot-lektionen?

Ja. Varje GraphQL-API:er med Spring Boot-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Modellera nästlade objekt och relationer
  2. Implementera gränssnitt och unionstyper
  3. Använda inputtyper för mutationer
  4. Enumtyper och anpassade skalärtyper
← Tillbaka till GraphQL-API:er med Spring Boot