利用GraphQL- Client发送GraphQL请求

本文介绍了GraphQL的基本语法,包括query和mutation的使用示例,并展示了如何在Java中利用`graphql-client`库发送GraphQL请求。文章详细讲解了如何构造查询和突变,以及如何处理响应结果。
摘要由CSDN通过智能技术生成

学习GraphQL语法规范

GraphQL请求语法简单,无非就是querymutation两个关键字。
官方学习地址: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();
        }
    }
}

以上就可以发送请求啦

注意⚠️
构建语法时需要特别注意小细节,防止出错

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值