GraphQL-API-er med Spring Boot · leksjon

Oppretting av data med mutasjoner

Implementer mutasjoner i Spring Boot for å legge til nye poster i datalageret på serversiden.

Leksjon 2 av 411 trinn

Oppretting av data med mutasjoner er en gratis leksjon i GraphQL-API-er med Spring Boot på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i GraphQL-API-er med Spring Boot, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i GraphQL-API-er med Spring Boot inneholder totalt 4 leksjoner.

Introduksjon: Legge til nye data

GraphQL brukes ikke bare til å hente data. Det lar oss også endre data! I dag skal vi lære hvordan vi legger til helt nye poster i systemet vårt ved hjelp av mutasjoner.

Dette er en grunnleggende ferdighet når man bygger interaktive applikasjoner.

Mutasjonens rolle ved oppretting

I GraphQL kalles enhver operasjon som endrer data på serveren, en mutasjon. Dette omfatter:

  • Opprette nye elementer (dagens fokus!)
  • Oppdatere eksisterende elementer
  • Slette elementer

Tenk på spørringer som noe vi bruker til å lese data, og mutasjoner som noe vi bruker til å skrive eller endre data.

Utforming av inputtyper

Når du oppretter data, trenger du ofte å oppgi flere felt (for eksempel en boks tittel, forfatter og utgivelsesår). I stedet for å føre opp hvert felt som et separat argument for mutasjonen, bruker vi inputtyper.

Inputtyper er spesielle objekttyper som brukes som argumenter. De gjør skjemaet ryddigere og argumentene enklere å håndtere, særlig for komplekse objekter.

Skjema: createBook-muteringen

Først definerer vi BookInput og createBook-mutasjonen i GraphQL Schema Definition Language (SDL).

Dette forteller klientene nøyaktig hvilke data som trengs for å opprette en bok, og hva mutasjonen returnerer.

input BookInput {
  title: String!
  author: String!
  publicationYear: Int
}

type Mutation {
  createBook(book: BookInput!): Book!
}

type Book {
  id: ID!
  title: String!
  author: String!
  publicationYear: Int
}

Bokens datamodell

I Spring Boot-applikasjonen vår representerer vi en bok ved hjelp av en enkel Java-klasse (et Plain Old Java Object, eller POJO). Denne klassen inneholder dataene for hver bok vi oppretter.

class Book {
  String id;
  String title;
  String author;
  Integer publicationYear;

  public Book(String id, String title, String author, Integer year) {
    this.id = id;
    this.title = title;
    this.author = author;
    this.publicationYear = year;
  }

  // Getters for all fields (omitted for brevity in snippets)
  public String getId() { return id; }
  public String getTitle() { return title; }
  public String getAuthor() { return author; }
  public Integer getPublicationYear() { return publicationYear; }
}

Simulering av datalagring

I denne leksjonen holder vi det enkelt og lagrer bøkene våre i en liste i minnet. I en virkelig Spring Boot-applikasjon ville dette vanligvis innebære en database (for eksempel H2 eller PostgreSQL) og et Spring Data JPA-repositorium.

Foreløpig bruker vi en statisk List til å simulere datalageret vårt.

import java.util.ArrayList;
import java.util.List;

public class BookDataStore {
  private static final List<Book> books = new ArrayList<>();

  public static void addBook(Book book) {
    books.add(book);
  }

  public static List<Book> getAllBooks() {
    return new ArrayList<>(books); // Return a copy
  }
}

Implementering av resolvermetoden

Nå skal vi skrive Java-metoden som fungerer som resolver for createBook-mutasjonen.

Denne metoden mottar BookInput og utfører logikken for å opprette et nytt Book-objekt.

import java.util.UUID; // For generating unique IDs

// Simplified BookInput class for demonstration
class BookInput {
  String title;
  String author;
  Integer publicationYear;

  // Getters (omitted for brevity)
  public String getTitle() { return title; }
  public String getAuthor() { return author; }
  public Integer getPublicationYear() { return publicationYear; }
}

public class BookService {
  public Book createBook(BookInput bookInput) {
    // ... logic to create and save book ...
    return null; // Placeholder
  }
}

Resolverlogikk: Legge til data

Her er den detaljerte logikken i createBook-resolvermetoden. Den håndterer generering av en ID, oppretting av objektet og lagring av det.

import java.util.UUID;

// (Book, BookInput, BookDataStore classes would be available)

public class BookService {
  public Book createBook(BookInput bookInput) {
    // 1. Generate a unique ID for the new book
    String newId = UUID.randomUUID().toString();

    // 2. Create a new Book instance from the input
    Book newBook = new Book(
        newId,
        bookInput.getTitle(),
        bookInput.getAuthor(),
        bookInput.getPublicationYear()
    );

    // 3. Add the new Book to our data store
    BookDataStore.addBook(newBook);

    // 4. Return the newly created Book
    return newBook;
  }
}

Kjørbart eksempel: createBook

Her er et forenklet, kjørbart eksempel som viser hvordan createBook-logikken fungerer i en main-metode. Kjør det og se på resultatet!

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

// Simplified Book class for runnable snippet
class Book {
  String id;
  String title;
  String author;
  Integer publicationYear;

  public Book(String id, String title, String author, Integer year) {
    this.id = id;
    this.title = title;
    this.author = author;
    this.publicationYear = year;
  }
  public String toString() {
    return "Book{id='" + id.substring(0,4) + "...', title='" + title + "'}";
  }
}

// Simplified BookInput class
class BookInput {
  String title;
  String author;
  Integer publicationYear;

  public BookInput(String title, String author, Integer year) {
    this.title = title;
    this.author = author;
    this.publicationYear = year;
  }
  public String getTitle() { return title; }
  public String getAuthor() { return author; }
  public Integer getPublicationYear() { return publicationYear; }
}

// Simplified DataStore
class SimpleBookDataStore {
  private static final List<Book> books = new ArrayList<>();
  public static void addBook(Book book) { books.add(book); }
  public static List<Book> getAllBooks() { return new ArrayList<>(books); }
}

public class Main {
  public Book createBook(BookInput bookInput) {
    String newId = UUID.randomUUID().toString();
    Book newBook = new Book(
        newId,
        bookInput.getTitle(),
        bookInput.getAuthor(),
        bookInput.getPublicationYear()
    );
    SimpleBookDataStore.addBook(newBook);
    return newBook;
  }

  public static void main(String[] args) {
    Main app = new Main();

    BookInput input1 = new BookInput(
        "The Great Journey", "A. Traveler", 2023
    );
    Book createdBook1 = app.createBook(input1);
    System.out.println("Created: " + createdBook1);

    BookInput input2 = new BookInput(
        "Coding Adventures", "B. Coder", 2024
    );
    Book createdBook2 = app.createBook(input2);
    System.out.println("Created: " + createdBook2);

    System.out.println("\nAll books in store:");
    for (Book b : SimpleBookDataStore.getAllBooks()) {
      System.out.println("- " + b);
    }
  }
}

Rask sjekk: Mutasjonsinput

Hvorfor foretrekkes vanligvis en Input Type for mutasjonsargumenter fremfor individuelle skalarargumenter?

Oppsummering: Opprette data

Godt jobbet! Du har lært hvordan du implementerer en GraphQL-mutasjon for å opprette nye dataposter i en Spring Boot-kontekst.

  • Vi definerte en inputtype i skjemaet for å få ryddigere argumenter.
  • Vi opprettet et mutasjonsfelt (createBook) som bruker denne inputtypen.
  • Vi implementerte en Java-resolvermetode som håndterer opprettingslogikken.
  • Vi så hvordan vi kan legge til nye data i et simulert datalager og returnere det nye elementet.

Deretter skal vi se på hvordan vi oppdaterer og sletter eksisterende data ved hjelp av mutasjoner!

Gratis å komme i gang

Lær deg GraphQL-API-er med Spring Boot med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Oppretting av data med mutasjoner» gratis?

Ja – hele teksten i «Oppretting av data med mutasjoner» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av GraphQL-API-er med Spring Boot-kurset, kan du oppgradere til CoddyKit PRO. Kurset i GraphQL-API-er med Spring Boot inneholder totalt 4 leksjoner.

Hva lærer jeg i «Oppretting av data med mutasjoner»?

Implementer mutasjoner i Spring Boot for å legge til nye poster i datalageret på serversiden. Du øver på GraphQL-API-er med Spring Boot med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med GraphQL-API-er med Spring Boot?

Ingen tidligere erfaring er nødvendig. GraphQL-API-er med Spring Boot på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Oppretting av data med mutasjoner»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne GraphQL-API-er med Spring Boot-leksjonen?

Ja. Alle GraphQL-API-er med Spring Boot-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Forstå GraphQL-mutasjoner
  2. Oppretting av data med mutasjoner
  3. Oppdatering og sletting av data
  4. Validering av input-argumenter i mutasjoner
← Tilbake til GraphQL-API-er med Spring Boot