学习GraphQL语法规范
GraphQL请求语法简单,无非就是query
和mutation
两个关键字。
官方学习地址:https://graphql.cn/learn/
Query
例如:
query{
hero {
name
# 查询可以有备注!
friends {
name
}
}
}
以上查询语句将返回:
{
"data": {
"hero": {
"name": "R2-D2",
"friends": [
{
"name": "Luke Skywalker"
},
{
"name": "Han Solo"
},
{
"name": "Leia Organa"
}
]
}
}
}
Mutation
mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
createReview(episode: $ep, review: $review) {
stars
commentary
}
}
variables:
{
"ep": "JEDI",
"review": {
"stars": 5,
"commentary": "This is a great movie!"
}
}
响应的结果:
{
"data": {
"createReview": {
"stars": 5,
"commentary": "This is a great movie!"
}
}
}
其他的语法在官网自行学习。
利用Java代码实现GraphQL发送
导入依赖
<dependency>
<groupId>org.mountcloud</groupId>
<artifactId>graphql-client</artifactId>
<version>1.2</version>
</dependency>
构建工具类
import org.mountcloud.graphql.GraphqlClient;
import org.mountcloud.graphql.request.mutation.GraphqlMutation;
import org.mountcloud.graphql.request.query.GraphqlQuery;
import org.mountcloud.graphql.response.GraphqlResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class GraphQLClientUtil {
private static String Cookie = "pamirs_uc_session_id=c3cf72d35db24bba9";
private static String ServerUrl = "http://localhost:88";
private static String CONTENT_TYPE = "application/json";
public static GraphqlResponse GraphqlQueryClient(GraphqlQuery query) throws IOException {
//创建客户端
GraphqlClient graphqlClient = GraphqlClient.buildGraphqlClient(ServerUrl);
//用map来进行传递
Map<String,String> httpHeaders = new HashMap<>();
httpHeaders.put("Content-Type",CONTENT_TYPE);
httpHeaders.put("Cookie",Cookie);
//设置http请求的头
graphqlClient.setHttpHeaders(httpHeaders);
//执行查询
GraphqlResponse graphqlResponse = graphqlClient.doQuery(query);
return graphqlResponse;
}
public static GraphqlResponse GraphqlMutationClient(GraphqlMutation mutation) throws IOException {
//创建客户端
GraphqlClient graphqlClient = GraphqlClient.buildGraphqlClient(ServerUrl);
//用map来进行传递
Map<String,String> httpHeaders = new HashMap<>();
httpHeaders.put("Content-Type",CONTENT_TYPE);
httpHeaders.put("Cookie",Cookie);
//设置http请求的头
graphqlClient.setHttpHeaders(httpHeaders);
//执行查询
GraphqlResponse graphqlResponse = graphqlClient.doMutation(mutation);
return graphqlResponse;
}
}
拼接语法,模拟请求
import com.fasterxml.jackson.databind.ObjectMapper;
import org.mountcloud.graphql.request.mutation.DefaultGraphqlMutation;
import org.mountcloud.graphql.request.mutation.GraphqlMutation;
import org.mountcloud.graphql.request.result.ResultAttributtes;
import org.mountcloud.graphql.response.GraphqlResponse;
import pro.shushi.pamirs.grraphQL.util.GraphQLClientUtil;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static pro.shushi.pamirs.grraphQL.enums.ModelTypeEnum.STORE;
public class GraphQLMutationTest {
public static void main(String[] args) {
/**
* 创建并配置GraphQL突变(mutation)对象。
* 此代码段不涉及任何参数传递或返回值,
* 主要目的是初始化一个GraphQL突变对象,并设置其结果属性。
*/
GraphqlMutation mutation = new DefaultGraphqlMutation("designerModelDefinitionMutation{createOrUpdate");
/**
* 创建并配置结果属性对象,用于指定突变操作后希望获取的结果字段。
* 这里特别指定了"login"作为基础属性,并添加了"dsModule"作为其结果属性之一。
*/
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("module", "resource");
paramMap.put("displayName", "代码模型1");
paramMap.put("type", STORE);
paramMap.put("summary", "代码模型1");
mutation.getRequestParameter().addObjectParameter("data", paramMap);
mutation.addResultAttributes("id}");
// System.out.println(mutation);
try {
//执行mutation
GraphqlResponse response = GraphQLClientUtil.GraphqlMutationClient(mutation);
//获取数据,数据为map类型
Map result = response.getData();
// System.out.println(result);
// 创建一个ObjectMapper实例
ObjectMapper objectMapper = new ObjectMapper();
// 将Map转换为JSON字符串
String jsonResult = objectMapper.writeValueAsString(result);
// 输出JSON字符串
System.out.println(jsonResult);
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上就可以发送请求啦
注意⚠️
构建语法时需要特别注意小细节,防止出错