Melaksanakan Antara Muka dan Jenis Kesatuan
Gunakan antara muka dan jenis kesatuan untuk mencipta reka bentuk skema yang fleksibel dan polimorfik.
Melaksanakan Antara Muka dan Jenis Kesatuan ialah pelajaran API GraphQL dengan Spring Boot percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran API GraphQL dengan Spring Boot, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus API GraphQL dengan Spring Boot merangkumi sejumlah 4 pelajaran.
Skema Fleksibel dengan Polimorfisme
GraphQL membolehkan anda mereka bentuk API yang sangat fleksibel. Kadangkala, anda memerlukan medan yang boleh mengembalikan objek daripada jenis berbeza, atau anda ingin mentakrifkan set medan dikongsi yang mesti dilaksanakan oleh beberapa jenis. Di sinilah polimorfisme digunakan.
Kita akan meneroka dua konsep utama untuk mencapainya: Antara Muka dan Jenis Kesatuan.
Memahami Antara Muka GraphQL
Bayangkan anda mempunyai pelbagai jenis media, seperti Book dan Movie. Kedua-duanya mungkin mempunyai title dan releaseYear. Daripada mengulangi medan ini, anda boleh mentakrifkan Antara muka.
Antara muka ialah kontrak yang menentukan sekumpulan medan yang mesti disertakan oleh mana-mana jenis yang melaksanakannya. Ia umpama pelan tindakan untuk kefungsian yang dikongsi bersama.
Mentakrifkan Antara Muka dalam SDL
Dalam Bahasa Takrifan Skema (SDL) GraphQL, antara muka ditakrifkan menggunakan kata kunci interface. Di sini, kita mentakrifkan antara muka Media yang akan dikongsi oleh Book dan Movie.
interface Media {
id: ID!
title: String!
releaseYear: Int
}Jenis yang Melaksanakan Antara Muka
Sekarang, mari kita jadikan jenis Book dan Movie melaksanakan antara muka Media. Kedua-duanya mesti menyertakan semua medan yang ditakrifkan oleh Media, dan boleh menambah medan unik masing-masing. Perhatikan kata kunci implements.
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
}Penyelesai untuk Antara Muka
Apabila anda membuat pertanyaan terhadap medan yang mengembalikan jenis antara muka, Spring GraphQL akan menyelesaikan jenis konkrit secara automatik berdasarkan data tersebut. Biasanya, anda mencipta kelas data Java yang melaksanakan antara muka Java yang sama, kemudian Spring GraphQL mengendalikan selebihnya. Cuba jalankan contoh ini:
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;
}
}Meneroka Jenis Kesatuan GraphQL
Walaupun antara muka memastikan jenis berkongsi medan yang sama, Jenis Kesatuan membolehkan sesuatu medan mengembalikan salah satu daripada beberapa jenis berbeza tanpa menghendaki jenis tersebut berkongsi sebarang medan. Anggaplah ia sebagai situasi “sama ada ini atau itu”. Sebagai contoh, hasil carian mungkin berupa Product ATAU User.
Takrifan Skema untuk Kesatuan
Dalam SDL, jenis kesatuan ditakrifkan menggunakan kata kunci union, diikuti oleh jenis yang boleh diwakilinya dan dipisahkan dengan tanda bar menegak |. Berikut ialah kesatuan SearchResult yang boleh berupa Book atau Movie.
union SearchResult = Book | MoviePenyelesai untuk Jenis Kesatuan
Apabila sesuatu medan mengembalikan jenis kesatuan, Spring GraphQL perlu mengetahui jenis konkritnya. Dalam Java, anda hanya perlu mengembalikan tika bagi salah satu jenis yang ditakrifkan dalam kesatuan tersebut. Spring GraphQL menambah medan __typename secara automatik supaya pelanggan dapat membezakannya. Cuba jalankan contoh ini:
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;
}
}Memilih antara Antara Muka dan Kesatuan
Kedua-dua antara muka dan kesatuan menawarkan polimorfisme, tetapi tujuannya berbeza:
- Antara muka: Gunakannya apabila beberapa jenis berkongsi sekumpulan medan dan tingkah laku yang sama. Ia menguatkuasakan kontrak.
- Jenis Kesatuan: Gunakannya apabila sesuatu medan boleh mengembalikan salah satu daripada beberapa jenis berbeza yang tidak semestinya berkongsi sebarang medan. Konsepnya ialah “sama ada A, B atau C”.
Kuiz Antara Muka berbanding Kesatuan
Anda sedang mereka bentuk API GraphQL. Anda memerlukan medan yang boleh mengembalikan sama ada objek Photo atau objek Video. Kedua-dua jenis ini mempunyai medan yang sepenuhnya berbeza dan tidak berkongsi sebarang sifat. Ciri skema GraphQL yang manakah paling sesuai untuk situasi ini?
Ulang Kaji: Skema Fleksibel
Anda telah mempelajari cara Antara Muka dan Jenis Kesatuan GraphQL membolehkan reka bentuk skema yang fleksibel dan polimorfik. Antara muka mentakrifkan kontrak untuk medan yang sama, manakala Jenis Kesatuan membolehkan sesuatu medan mengembalikan salah satu daripada beberapa jenis berbeza. Alat ini penting untuk membina API GraphQL yang kukuh dan mudah disesuaikan.
Seterusnya, anda akan meneroka Jenis Input untuk memudahkan argumen mutasi.
Pelajari API GraphQL dengan Spring Boot dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Soalan Lazim
Adakah pelajaran “Melaksanakan Antara Muka dan Jenis Kesatuan” percuma?
Ya — teks penuh “Melaksanakan Antara Muka dan Jenis Kesatuan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus API GraphQL dengan Spring Boot, tingkat taraf kepada CoddyKit PRO. Kursus API GraphQL dengan Spring Boot merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Melaksanakan Antara Muka dan Jenis Kesatuan”?
Gunakan antara muka dan jenis kesatuan untuk mencipta reka bentuk skema yang fleksibel dan polimorfik. Anda berlatih API GraphQL dengan Spring Boot menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan API GraphQL dengan Spring Boot?
Tiada pengalaman terdahulu diperlukan. Pembelajaran API GraphQL dengan Spring Boot di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Melaksanakan Antara Muka dan Jenis Kesatuan” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran API GraphQL dengan Spring Boot ini?
Ya. Setiap pelajaran API GraphQL dengan Spring Boot menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Memodelkan Objek dan Hubungan Bersarang
- Melaksanakan Antara Muka dan Jenis Kesatuan
- Memanfaatkan Jenis Input untuk Mutasi
- Enum dan Jenis Skalar Tersuai