GraphQL-rajapinnat Spring Bootilla · Oppitunti

Tietojen luominen mutaatioilla

Toteuttakaa Spring Bootissa mutaatioita, joilla lisätään uusia tietueita taustajärjestelmän tietovarastoon.

Oppitunti 2/411 vaihetta

Tietojen luominen mutaatioilla on ilmainen GraphQL-rajapinnat Spring Bootilla-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu GraphQL-rajapinnat Spring Bootilla-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. GraphQL-rajapinnat Spring Bootilla-kurssilla on yhteensä 4 oppituntia.

Johdanto: uusien tietojen lisääminen

GraphQL ei ole tarkoitettu vain tietojen hakemiseen. Sen avulla tietoja voidaan myös muuttaa! Tänään opitte lisäämään järjestelmäämme täysin uusia tietueita mutaatioiden avulla.

Tämä on keskeinen taito kaikkien vuorovaikutteisten sovellusten rakentamisessa.

Mutaatioiden rooli tietojen luomisessa

GraphQL:ssa kaikkia palvelimen tietoja muuttavia operaatioita kutsutaan mutaatioiksi. Näihin kuuluvat:

  • uusien kohteiden luominen (tämän päivän aihe!)
  • olemassa olevien kohteiden päivittäminen
  • kohteiden poistaminen

Ajatelkaa kyselyitä tietojen lukemiseen ja mutaatioita tietojen kirjoittamiseen ja muuttamiseen.

Syöte-tyyppien suunnittelu

Tietoja luotaessa on usein annettava useita kenttiä (esimerkiksi kirjan nimi, tekijä ja julkaisuvuosi). Sen sijaan, että jokainen kenttä lueteltaisiin mutaation erillisenä argumenttina, käytämme syöte-tyyppejä.

Syöte-tyypit ovat argumentteina käytettäviä erityisiä oliotyyppejä. Ne tekevät skeemasta selkeämmän ja helpottavat argumenttien hallintaa etenkin monimutkaisten olioiden yhteydessä.

Skeema: createBook-mutaatio

Määritellään ensin BookInput ja createBook-mutaatio GraphQL:n skeeman määrittelykielellä (SDL).

Tämä kertoo asiakkaille täsmälleen, mitä tietoja kirjan luomiseen tarvitaan ja mitä mutaatio palauttaa.

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

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

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

Kirjan tietomalli

Spring Boot -sovelluksessamme kirjaa edustaa yksinkertainen Java-luokka (Plain Old Java Object eli POJO). Luokka sisältää jokaisen luomamme kirjan tiedot.

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; }
}

Tietojen tallennuksen simulointi

Tässä oppitunnissa pidämme asiat yksinkertaisina ja tallennamme kirjat muistinvaraiseen luetteloon. Todellisessa Spring Boot -sovelluksessa käytettäisiin yleensä tietokantaa (kuten H2:ta tai PostgreSQL:ää) ja Spring Data JPA -repositoriota.

Käytämme toistaiseksi staattista List-rakennetta tietovaraston simulointiin.

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
  }
}

Resolver-metodin toteuttaminen

Kirjoitetaan nyt Java-metodi, joka toimii createBook-mutaation resolverina.

Metodi vastaanottaa BookInput-syötteen ja suorittaa uuden Book-olion luomiseen tarvittavan logiikan.

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
  }
}

Resolverin logiikka: tietojen lisääminen

Tässä on createBook-resolver-metodin yksityiskohtainen logiikka. Se huolehtii tunnisteen luomisesta, olion luomisesta ja sen tallentamisesta.

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;
  }
}

Suoritettava esimerkki: createBook

Tässä on yksinkertaistettu suoritettava esimerkki, joka havainnollistaa createBook-logiikan toimintaa main-metodissa. Suorittakaa se ja tarkistakaa tuloste!

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);
    }
  }
}

Pikatarkistus: mutaation syöte

Miksi syöte-tyypin käyttöä yleensä suositellaan mutaatioiden argumenteissa yksittäisten skalaaristen argumenttien sijaan?

Kertaus: tietojen luominen

Hienoa työtä! Opitte toteuttamaan GraphQL-mutaation uusien tietueiden luomista varten Spring Boot -ympäristössä.

  • Määrittelimme skeemaan syöte-tyypin selkeämpiä argumentteja varten.
  • Loimme tätä syötettä käyttävän mutaatiokentän (createBook).
  • Toteutimme Java-kielellä resolver-metodin, joka käsittelee luomiseen liittyvän logiikan.
  • Näimme, miten uusia tietoja lisätään simuloituun tietovarastoon ja uusi kohde palautetaan.

Seuraavaksi tutustumme olemassa olevien tietojen päivittämiseen ja poistamiseen mutaatioiden avulla!

Aloita maksutta

Opi GraphQL-rajapinnat Spring Bootilla tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Tietojen luominen mutaatioilla” ilmainen?

Kyllä – oppitunnin ”Tietojen luominen mutaatioilla” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko GraphQL-rajapinnat Spring Bootilla-kurssin, päivitä CoddyKit PROhon. GraphQL-rajapinnat Spring Bootilla-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Tietojen luominen mutaatioilla”?

Toteuttakaa Spring Bootissa mutaatioita, joilla lisätään uusia tietueita taustajärjestelmän tietovarastoon. Harjoittelet GraphQL-rajapinnat Spring Bootilla-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni GraphQL-rajapinnat Spring Bootilla-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin GraphQL-rajapinnat Spring Bootilla-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Tietojen luominen mutaatioilla”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä GraphQL-rajapinnat Spring Bootilla-oppitunnilla?

Kyllä. Jokainen GraphQL-rajapinnat Spring Bootilla-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. GraphQL-mutaatioiden ymmärtäminen
  2. Tietojen luominen mutaatioilla
  3. Tietojen päivittäminen ja poistaminen
  4. Mutaation syöteargumenttien validointi
← Takaisin: GraphQL-rajapinnat Spring Bootilla