type Query { shows: [Show]}type Show { # The showId may or may not be there, depending on the scenario. showId: ID title: String reviews: [Review]}type Review { starRating: Int}
假设我们的后端已经有了从数据存储获取 Shows 和 Reviews 的方法。注意这个例子,getShows 这个方法并不返回 reviews。getReviewsForShow 这个方法通过 show id 为一个 show 加载 reviews。
interfaceShowsService{List<Show>getShows();//Does not include reviewsList<Review>getReviewsForShow(intshowId);}
@DgsData(parentType = "Query", field = "shows")
List<Show> shows() {
return showsService.getShows();
}
@DgsData(parentType = "Show", field = "reviews")
List<Review> reviews(DgsDataFetchingEnvironment dfe) {
Show show = dfe.getSource();
return showsService.getReviewsForShow(show.getShowId());
}
interface ShowsService {
List<InternalShow> getShows(); //Does not include reviews
List<Review> getReviewsForShow(int showId);
}
class InternalShow {
int showId;
Sring title;
// getters and setters
}
type Show {
title: String
reviews: [Review]
}
class ShowWithId {
String showId;
Show show;
//Delegate all show fields
String getTitle() {
return show.getTitle();
}
static ShowWithId fromInternalShow(InternalShow internal) {
//Create Show instance and store id.
}
....
}