領先一步
VMware 提供培訓和認證,加速您的進展。
了解更多Spring GraphQL 團隊很高興宣布朝向 1.0.0 版本的第三個里程碑,這是在社群的大力協助下推動的。
第二個里程碑引入了帶有 @SchemaMapping
方法的 GraphQL 資料控制器的註解程式設計模型。第三個里程碑新增了一個新的 @BatchMapping
方法。
如果您熟悉 GraphQL,您會知道,如果我們沒有仔細映射物件關係,導覽物件圖可能會導致「N+1 查詢問題」。我們已經可以利用 GraphQL Java 的 批次處理功能來解決這個問題,但此版本引入了 專用支援,以及一個 @BatchMapping
註解,以提供更流暢的體驗
@Controller
public class BookController {
@BatchMapping
public Mono<Map<Book, Author>> author(List<Book> books) {
// ...
}
}
透過這個範例,我們使用 GraphQL 引擎機制,透過單一呼叫有效地載入許多 Book->Author
關係。
QuerydslDataFetcher 支援現在會檢查查詢的選取欄位,並且只提取底層網域實體的對應屬性。
現在 內建支援 GraphQL Unions 和介面的 TypeResolver。 預設情況下,它會嘗試將 Java 類別的簡單名稱與 GraphQL Object 類型進行比對,並且它會嘗試對類別階層中的超類型執行相同的操作。
還有其他選項可以自訂此行為,以提供足夠的提示,將具體的 Java 類別與 GraphQL Object 類型進行比對。 請嘗試這個功能,並告訴我們它的運作情況,或者您是否需要更進一步的彈性。
GraphQL Java 會將輸入引數剖析為一般資料 Map。Spring GraphQL 現在使用 Spring Framework DataBinder
機制,將這些 Map 轉換為在 @Argument
控制器方法參數上宣告的類型化物件。您可以連結 ConversionService
以在 DataBinder
中使用,以便在需要時轉換個別的輸入欄位。
現在有一個 WebSocketInterceptor
是 WebInterceptor
的子類型,它也可以處理 WebSocket 連線上的 CONNECTION_INIT
和 COMPLETE
訊息,包括存取 CONNECTION_INIT
酬載,以及拒絕連線的功能。 請試用此功能,並讓我們知道是否需要進一步的功能。
Spring GraphQL Boot starter 提供 spring.graphql.cors.*
屬性,可為公開的 GraphQL 端點設定 CORS。
此版本建立在 GraphQlTester
API 和測試自動設定之上,以協助您測試 Spring GraphQL 應用程式。
GraphQlTester
現在支援在測試中使用 *.graphql
查詢檔案,作為在 Java 測試類別中撰寫內嵌查詢的替代方法。假設您的測試資源中有一個 projectReleases.graphql
檔案
query projectReleases($slug: ID!) {
project(slug: $slug) {
releases {
version
}
}
}
您現在可以在測試中引用此查詢檔案
graphQlTester.queryName("projectReleases")
.variable("slug", "spring-framework")
.execute()
.path("project.releases[*].version")
.entityList(String.class)
.hasSizeGreaterThan(1);
適用於 IntelliJ 的「JS GraphQL」外掛程式支援具有程式碼完成功能的 GraphQL 查詢檔案。
最後但並非最不重要的一點是,我們現在提供一個新的 @GraphQlTest
測試工具,與 @WebMvcTest
和 @JsonTest
Spring Boot 註解非常相似。有了這個,您可以編寫整合測試,這些測試 依賴於應用程式的特定片段。無需載入整個應用程式上下文,僅考慮相關部分,這使得可以輕鬆地模擬和測試,而無需涉及太多的基礎架構。
在此範例中,我們正在測試我們的 BookController
,以確保它已正確實作 - 無需設定複雜的資料固件,因為我們可以模擬儲存庫。
@GraphQlTest(controllers = BookController.class)
public class BookControllerTests {
@Autowired
private GraphQlTester graphQlTester;
@MockBean
private BookRepository bookRepository;
@Test
void bookdByIdShouldReturnSpringBook() {
given(this.bookRepository.findById(42L)).willReturn(new Book(42L, "Spring GraphQL"));
String query = """
{
bookById(id: "42"){
id
name
}
}
""";
this.graphQlTester.query(query).execute()
.path("data.bookById.name").entity(String.class).isEqualTo("Spring GraphQL");
}
}
更多 改進和修正已納入此版本中,並且它們現在可以從 Spring Milestone 儲存庫中的新 Spring GraphQL 1.0.0-M3 中取得。
如果您有興趣提供協助,您可以開始使用 Spring GraphQL 並在我們的 GitHub 專案上提出問題。如果您有一般問題,請使用spring-graphql
標籤在stackoverflow.com 上提問。
專案頁面 | GitHub | 問題追蹤 | 文件 | Stack Overflow