本質上,graphql-java-servlet軟體子產品實作了一個Java Servlet,将GraphQL服務釋出為通過HTTP可通路的Web服務。目前,graphql-java-servlet軟體子產品隻支援GraphQL的Query和Mutation操作類型,還不支援subscription操作類型。
graphql-java-servlet軟體子產品的最新版本是2017.12釋出的4.7.0。
1. graphql-java-servlet依賴如下子產品
- javax.servlet:javax.servlet-api:3.0.1
- com.graphql-java:graphql-java:6.0
- com.fasterxml.jackson.core:jackson-*:2.8.4
2. 在Maven項目中使用graphql-java-servlet,隻要在pom.xml中如下引用
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java-servlet</artifactId>
<version>4.7.0</version>
</dependency>
3. graphql-java-servlet軟體子產品隻是一個Servlet,即隻提供了唯一的Web請求路徑
雖然隻是一個Servlet,但是同時支援HTTP GET/POST請求,而且根據請求參數的不同,可以有多種請求的方式。
1)内部結構查詢GET請求
http://localhost:8080/graphql/schema.json
2)GraphQL查詢GET請求
http://localhost:8080/graphql/?query={...}
3)GraphQL查詢 POST請求
http://localhost:8080/graphql/
{"query":"{hello}"}
4)GraphQL查詢(multipart/form-data)POST請求
http://localhost:8080/graphql/
{"graphql": {"query":"{hello}"}}
5)GraphQL查詢(multipart/form-data)POST請求
http://localhost:8080/graphql/
{"query": {"{hello}"}}
說明:對于每個請求(可能是query或mutation),可以帶參數的"operationName","variables",其中"operationName"是操作的對象,"variables"是操作對象的屬性集。
預設請求的HTTP Content-Type為application/json;charset=UTF-8。
4. 在Spring Web應用中使用graphql-java-servlet子產品
1)通過graphql-spring-boot子產品,間接使用graphql-java-servlet子產品,詳情請參考graphql-spring-boot,結合GraphQL的Spring Boot Starters類庫概述。
2)通過定義Spring bean如下
@Bean
ServletRegistrationBean graphQLServletRegistrationBean(GraphQLSchema schema, ExecutionStrategy executionStrategy, List<GraphQLOperationListener> operationListeners) {
return new ServletRegistrationBean(new SimpleGraphQLServlet(schema, executionStrategy, operationListeners), "/graphql");
}
預設Web請求路徑為/graphql。
參考連結:
https://github.com/graphql-java/graphql-java-servlet