Input-tyyppien hyödyntäminen mutaatioissa
Selkeyttäkää mutaatioiden argumentteja määrittelemällä uudelleenkäytettäviä input-tyyppejä järjestelmällisempiä API-kutsuja varten.
Input-tyyppien hyödyntäminen mutaatioissa on ilmainen GraphQL-rajapinnat Spring Bootilla-oppitunti CoddyKitissä. Tämä on oppitunti 3/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.
Liian pitkiä mutaatioargumentteja?
GraphQL-mutaatioita rakentaessasi sinun on usein välitettävä useita tietoja entiteetin luomista tai päivittämistä varten. Ajattele esimerkiksi uuden käyttäjän tai tuotteen luomista.
Jokaisen kentän välittäminen erillisenä argumenttina voi tehdä mutaatioiden allekirjoituksista pitkiä ja vaikeasti hallittavia, mikä heikentää koodin luettavuutta ja ylläpidettävyyttä.
GraphQL:n syöttötyypit
Syöttötyypit ovat GraphQL:n erityisiä oliotyyppejä, joita käytetään nimenomaan mutaatioiden argumentteina ja joskus myös kyselyissä. Niiden avulla toisiinsa liittyvät kentät voidaan ryhmitellä yhdeksi rakenteiseksi olioksi.
Tämä tekee mutaatioiden määrittelyistä selkeämpiä ja järjestelmällisempiä samalla tavoin kuin DTO (Data Transfer Object) toimii perinteisissä REST-ohjelmointirajapinnoissa.
Syöttötyypin syntaksi (SDL)
Syöttötyypin määrittäminen GraphQL:n Schema Definition Language (SDL) -kielessä on suoraviivaista. Käytä input-avainsanaa type-avainsanan sijaan.
Syöttötyypit voivat sisältää kenttinään vain skalaarityyppejä, enumeraatioita tai muita syöttötyyppejä. Ne eivät voi sisältää tulosteena palautettavia oliotyyppejä, rajapintoja tai unionityyppejä.
input CreateProductInput {
name: String!
description: String
price: Float!
category: String
}Ongelma: paljon argumentteja
Tarkastellaan uuden tuotteen luovaa mutaatiota. Ilman syöttötyyppiä se voitaisiin määritellä esimerkiksi näin:
Huomaa, kuinka argumenttiluettelosta voi tulla pitkä ja toisteinen, etenkin jos kenttiä on paljon. Tällaisen määrittelyn kirjoittaminen ja lukeminen voi olla työlästä.
type Mutation {
createProduct(
name: String!,
description: String,
price: Float!,
category: String
): Product
}Ratkaisu: selkeät mutaatiot
Kun käytössä on CreateProductInput, mutaation allekirjoituksesta tulee paljon selkeämpi ja helpommin luettava. Kaikki toisiinsa liittyvät syöttökentät on nyt kapseloitu yhteen argumenttiin.
Tämä parantaa selkeyttä ja vähentää skeeman sekavuutta.
type Mutation {
createProduct(input: CreateProductInput!): Product
}
input CreateProductInput {
name: String!
description: String
price: Float!
category: String
}Spring Bootin DTO syötteelle
Spring Boot -sovelluksessa GraphQL:n syöttötyypit esitetään yksinkertaisina Java-luokkina. Ne toimivat tiedonsiirto-olioina (DTO), jotka Springin GraphQL-integraatio voi yhdistää automaattisesti.
Varmista sujuva yhdistäminen huolehtimalla, että Java-luokan kenttien nimet vastaavat SDL:n syöttötyypin nimiä.
package com.coddykit.graphql;
public class CreateProductInput {
private String name;
private String description;
private float price;
private String category;
// Getters and Setters (omitted for brevity)
public String getName() { return name; }
public void setName(String name) { this.name = name; }
// ... other getters/setters
}Syötteen käyttäminen resolverissa
Tarkastellaan nyt, miten Spring Bootin GraphQL-resolverimetodi käyttää tätä CreateProductInput-DTO:ta. Useiden @Argument-annotaatioiden sijaan tarvitset vain yhden annotaation syöttöoliota varten.
Tämä tekee resolverimetodin allekirjoituksesta paljon selkeämmän ja helpommin hallittavan etenkin silloin, kun syöttökenttiä on paljon.
package com.coddykit.graphql;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.graphql.data.method.annotation.Argument;
import org.springframework.graphql.data.method.annotation.MutationMapping;
import org.springframework.stereotype.Controller;
// Dummy Product class for example return type
class Product {
String id; String name; public Product(String id, String name) { this.id = id; this.name = name; }
public String getId() { return id; } public String getName() { return name; }
}
// Input DTO from previous scene
class CreateProductInput {
private String name; private String description; private float price; private String category;
public String getName() { return name; } public void setName(String name) { this.name = name; }
public String getDescription() { return description; } public void setDescription(String description) { this.description = description; }
public float getPrice() { return price; } public void setPrice(float price) { this.price = price; }
public String getCategory() { return category; } public void setCategory(String category) { this.category = category; }
}
@SpringBootApplication
@Controller
public class Main {
public static void main(String[] args) {
// This would start a Spring Boot web server
// SpringApplication.run(Main.class, args);
System.out.println("Application context started (conceptually).");
}
private static long productIdCounter = 1;
@MutationMapping
public Product createProduct(@Argument CreateProductInput input) {
System.out.println("Creating product: " + input.getName());
// In a real application, you'd save this to a database
String newId = "prod-" + productIdCounter++;
return new Product(newId, input.getName());
}
}Miksi syöttötyyppejä käytetään?
Syöttötyypit tarjoavat GraphQL-ohjelmointirajapinnan suunnitteluun useita merkittäviä etuja:
- Luettavuus: Mutaatioiden allekirjoituksista tulee paljon lyhyempiä ja selkeämpiä.
- Uudelleenkäytettävyys: Samaa syöttötyyppiä voidaan usein käyttää sekä luonti- että päivitysmutaatioissa, mikä vähentää skeeman toistoa.
- Validointi: Validointilogiikka on helpompi kohdistaa yhteen koottuun syöttöolioon.
- Laajennettavuus: Uusien valinnaisten kenttien lisääminen syöttötyyppiin ei riko olemassa olevia asiakkaita, koska ne voivat yksinkertaisesti ohittaa uudet kentät.
Monimutkaiset tiedot sisäkkäisillä syötteillä
Syöttötyypit voivat sisältää myös muita syöttötyyppejä, joten niiden avulla mutaatioille voidaan mallintaa monimutkaisia ja hierarkkisia tietoja. Tämä on erittäin hyödyllistä rakenteisten tietojen lähettämisessä.
Tilauksen luominen voi esimerkiksi edellyttää asiakastietoja ja luetteloa tuotteista, joilla kullakin on omat ominaisuutensa, kaiken tämän yhden syöttöolion sisällä.
input AddressInput {
street: String!
city: String!
zipCode: String
}
input CustomerInput {
name: String!
email: String!
shippingAddress: AddressInput
}
input CreateOrderInput {
customer: CustomerInput!
items: [OrderItemInput!]!
}
input OrderItemInput {
productId: ID!
quantity: Int!
}Syöttötyyppien testi
Olet oppinut GraphQL:n syöttötyypeistä ja niiden hyödyistä. Testataanpa ymmärryksesi!
Kertaus: syöttötyypit hallussa!
Hienoa! Opit tässä oppitunnissa GraphQL:n syöttötyypit. Opit, miten ne selkeyttävät mutaatioiden argumentteja ja tekevät ohjelmointirajapinnasta siistimmän ja helpommin ylläpidettävän.
- Opimme määrittelemään syöttötyyppejä SDL:ssä
input-avainsanan avulla. - Toteutimme niitä Spring Boot -resolv eri -metodeissa DTO:iden avulla.
- Tutustuimme myös niiden keskeisiin hyötyihin, kuten parempaan luettavuuteen, uudelleenkäytettävyyteen ja helpompaan validointiin.
Nämä ovat olennaisia vankkojen ja käyttäjäystävällisten GraphQL-ohjelmointirajapintojen rakentamisessa! Jatka harjoittelua!
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 ”Input-tyyppien hyödyntäminen mutaatioissa” ilmainen?
Kyllä – oppitunnin ”Input-tyyppien hyödyntäminen mutaatioissa” 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 ”Input-tyyppien hyödyntäminen mutaatioissa”?
Selkeyttäkää mutaatioiden argumentteja määrittelemällä uudelleenkäytettäviä input-tyyppejä järjestelmällisempiä API-kutsuja varten. 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 3/4.
Kuinka kauan ”Input-tyyppien hyödyntäminen mutaatioissa”-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
- Sisäkkäisten olioiden ja suhteiden mallintaminen
- Rajapintojen ja union-tyyppien toteuttaminen
- Input-tyyppien hyödyntäminen mutaatioissa
- Enumeraatiot ja mukautetut skalaarityypit