Implementare interfacce e tipi union
Utilizzi interfacce e tipi union per creare schemi flessibili e polimorfici.
Implementare interfacce e tipi union è una lezione GraphQL APIs with Spring Boot gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento GraphQL APIs with Spring Boot, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso GraphQL APIs with Spring Boot include 4 lezioni in totale.
Parti di questa lezione non sono ancora state tradotte e vengono mostrate in inglese.
Flexible Schemas with Polymorphism
GraphQL allows you to design highly flexible APIs. Sometimes, you need a field that can return different types of objects, or you want to define a shared set of fields that multiple types must implement. This is where polymorphism comes in.
We'll explore two key concepts for achieving this: Interfaces and Union Types.
Understanding GraphQL Interfaces
Imagine you have different types of media, like a Book and a Movie. Both might have a title and a releaseYear. Instead of duplicating these fields, you can define an Interface.
An interface is a contract that specifies a set of fields that any type implementing it must include. It's like a blueprint for common functionality.
Defining an Interface in SDL
In GraphQL's Schema Definition Language (SDL), an interface is defined using the interface keyword. Here, we define a Media interface that both Book and Movie will share.
interface Media {
id: ID!
title: String!
releaseYear: Int
}Types Implementing an Interface
Now, let's make our Book and Movie types implement the Media interface. They must include all fields defined by Media, and can add their own unique fields. Notice the implements keyword.
type Book implements Media {
id: ID!
title: String!
releaseYear: Int
author: String
pages: Int
}
type Movie implements Media {
id: ID!
title: String!
releaseYear: Int
director: String
durationMinutes: Int
}Resolvers for Interfaces
When you query a field that returns an interface type, Spring GraphQL automatically resolves the concrete type based on the data. You usually create Java data classes that implement a common Java interface, and Spring GraphQL handles the rest. Try running this example:
package com.coddykit.graphql;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.graphql.data.method.annotation.QueryMapping;
import org.springframework.stereotype.Controller;
import java.util.List;
import java.util.ArrayList;
@SpringBootApplication
public class GraphqlApp {
public static void main(String[] args) {
SpringApplication.run(GraphqlApp.class, args);
}
}
interface Media {
String getId();
String getTitle();
Integer getReleaseYear();
}
record Book(String id, String title, Integer releaseYear, String author, Integer pages) implements Media {}
record Movie(String id, String title, Integer releaseYear, String director, Integer durationMinutes) implements Media {}
@Controller
class MediaController {
@QueryMapping
public List<Media> allMedia() {
List<Media> mediaList = new ArrayList<>();
mediaList.add(new Book("b1", "The Hitchhiker's Guide", 1979, "Douglas Adams", 193));
mediaList.add(new Movie("m1", "Inception", 2010, "Christopher Nolan", 148));
return mediaList;
}
}Exploring GraphQL Union Types
While interfaces ensure types share common fields, Union Types allow a field to return one of several distinct types, without requiring them to share any common fields. Think of it as an 'either-or' situation. For example, a search result might be a Product OR a User.
Schema Definition for Unions
In SDL, union types are defined using the union keyword, followed by the types it can represent, separated by a vertical bar |. Here's a SearchResult union that can be either a Book or a Movie.
union SearchResult = Book | MovieResolvers for Union Types
When a field returns a union type, Spring GraphQL needs to know which concrete type it is. For Java, you simply return an instance of one of the types defined in the union. Spring GraphQL automatically adds the __typename field for clients to distinguish. Try running this example:
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.QueryMapping;
import org.springframework.stereotype.Controller;
@SpringBootApplication
public class GraphqlApp {
public static void main(String[] args) {
SpringApplication.run(GraphqlApp.class, args);
}
}
record Book(String id, String title, Integer releaseYear, String author, Integer pages) {}
record Movie(String id, String title, Integer releaseYear, String director, Integer durationMinutes) {}
@Controller
class SearchController {
@QueryMapping
public Object search(@Argument String query) {
if (query.equalsIgnoreCase("inception")) {
return new Movie("m1", "Inception", 2010, "Christopher Nolan", 148);
} else if (query.equalsIgnoreCase("hitchhiker")) {
return new Book("b1", "The Hitchhiker's Guide", 1979, "Douglas Adams", 193);
}
return null;
}
}Choosing Between Interfaces and Unions
Both interfaces and unions offer polymorphism, but they serve different purposes:
- Interfaces: Use when multiple types share a common set of fields and behavior. They enforce a contract.
- Union Types: Use when a field can return one of several distinct types that do not necessarily share any common fields. It's about 'either A or B or C'.
Interfaces vs. Unions Quiz
You are designing a GraphQL API. You need a field that can return either a Photo object or a Video object. These two types have completely different fields and do not share any common properties. Which GraphQL schema feature is best suited for this scenario?
Recap: Flexible Schemas
You've learned how GraphQL Interfaces and Union Types enable flexible and polymorphic schema designs. Interfaces define a contract for common fields, while Union Types allow a field to return one of several distinct types. These tools are crucial for building robust and adaptable GraphQL APIs.
Next, you'll explore Input Types to streamline mutation arguments.
Impara GraphQL APIs with Spring Boot con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 12
- Lezioni
- 48
Domande Frequenti
La lezione «Implementare interfacce e tipi union» è gratuita?
Sì — il testo completo di «Implementare interfacce e tipi union» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso GraphQL APIs with Spring Boot, passa a CoddyKit PRO. Il corso GraphQL APIs with Spring Boot include 4 lezioni in totale.
Cosa imparerò in «Implementare interfacce e tipi union»?
Utilizzi interfacce e tipi union per creare schemi flessibili e polimorfici. Eserciti GraphQL APIs with Spring Boot con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare GraphQL APIs with Spring Boot?
Non è richiesta alcuna esperienza precedente. GraphQL APIs with Spring Boot su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Implementare interfacce e tipi union»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione GraphQL APIs with Spring Boot?
Sì. Ogni lezione GraphQL APIs with Spring Boot include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Modellare oggetti annidati e relazioni
- Implementare interfacce e tipi union
- Sfruttare i tipi input per le mutation
- Enum e tipi scalari personalizzati