GraphQL APIs with Spring Boot · Ders

Arayüzleri ve Birleşim Türlerini Uygulama

Esnek ve çok biçimli şema tasarımları oluşturmak için arayüzlerden ve birleşim türlerinden yararlanın.

2. ders / 411 adım

Arayüzleri ve Birleşim Türlerini Uygulama, CoddyKit'te ücretsiz bir GraphQL APIs with Spring Boot dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, GraphQL APIs with Spring Boot öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. GraphQL APIs with Spring Boot kursu toplamda 4 dersten oluşur.

Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.

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

Resolvers 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.

Başlamak ücretsiz

Yapay zeka eğitmeniyle GraphQL APIs with Spring Boot öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
12
Dersler
48

Sıkça Sorulan Sorular

“Arayüzleri ve Birleşim Türlerini Uygulama” dersi ücretsiz mi?

Evet — “Arayüzleri ve Birleşim Türlerini Uygulama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve GraphQL APIs with Spring Boot kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. GraphQL APIs with Spring Boot kursu toplamda 4 dersten oluşur.

“Arayüzleri ve Birleşim Türlerini Uygulama” dersinde ne öğreneceğim?

Esnek ve çok biçimli şema tasarımları oluşturmak için arayüzlerden ve birleşim türlerinden yararlanın. GraphQL APIs with Spring Boot ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

GraphQL APIs with Spring Boot öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te GraphQL APIs with Spring Boot, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Arayüzleri ve Birleşim Türlerini Uygulama” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu GraphQL APIs with Spring Boot dersinde kod yazıp çalıştırabilir miyim?

Evet. Her GraphQL APIs with Spring Boot dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İç İçe Nesneleri ve İlişkileri Modelleme
  2. Arayüzleri ve Birleşim Türlerini Uygulama
  3. Değişiklikler için Girdi Türlerinden Yararlanma
  4. Numaralandırmalar ve Özel Skaler Türler
← GraphQL APIs with Spring Boot Sayfasına Dön