자바를 사용하여 graphql 클라이언트

면책 조항 :이 문서는 블로거 원본입니다, 추적 에 의해-SA의 CC 4.0 저작권 계약, 복제, 원본 소스 링크이 문을 첨부 해주세요.
이 링크 : https://blog.csdn.net/zhanghaishan/article/details/79845594

프로젝트의 Graphql 클라이언트 참조

이 graphql 클라이언트는 현재 graphql 서버의 게시물을 지원합니다

사용 Maven은 의존성을 구축

<dependency>
  <groupId>org.mountcloud</groupId>
  <artifactId>graphql-client</artifactId>
  <version>1.2</version>
</dependency>

프로젝트 주소 : GitHub의

업데이트 로그 1.2

사용자 정의 매개 변수 요청 및 복합 형 열거 유형을 지원합니다.

용례

질문

graphql 클라이언트의 건설

//graphql服务器地址
String serverUrl = "http://localhost:8080/graphql";
//build一个新的graphqlclient
GraphqlClient graphqlClient = GraphqlClient.buildGraphqlClient(serverUrl);

//如果说graphql需要健全信息我们可以用map来进行传递
Map<String,String> httpHeaders = new HashMap<>();
httpHeaders.put("token","graphqltesttoken");
//设置http请求的头
graphqlClient.setHttpHeaders(httpHeaders);

간단한 쿼리 쿼리 출시

//创建一个Query并设置query的名字为findUser
//如果有特殊需要可以自己继承GraphqlQuery,DefaultGraphqlQuery已经可以满足所有请求了
GraphqlQuery query = new DefaultGraphqlQuery("findUser");

//我们需要查询user的名字,性别还有年龄,设置需要查询的这三个属性。
query.addResultAttributes("name","sex","age");

try {
    //执行query
    GraphqlResponse response = graphqlClient.doQuery(query);
    //获取数据,数据为map类型
    Map result = response.getData();
} catch (IOException e) {
    e.printStackTrace();
}

에 해당하는 graphql 문 :

query{
	findUser{
		name
		sex
		age
	}
}

 

복잡한 쿼리의 결과를 설정

 

//创建一个Query并设置query的名字为findUser
//如果有特殊需要可以自己继承GraphqlQuery,DefaultGraphqlQuery已经可以满足所有请求了
GraphqlQuery query = new DefaultGraphqlQuery("findUser");

//------------------------------------------------------------------------
//查询名字为张三,年龄为23岁的人,这里的参数类型一定要与query的参数类型一致
query.addParameter("name","张三").addParameter("age",23);

//------------------------------------------------------------------------
//我们需要查询user的名字,性别还有年龄,设置需要查询的这三个属性。
query.addResultAttributes("name","sex","age");

//------------------------------------------------------------------------
//查询用户的部门
ResultAttributtes departmentAttr = new ResultAttributtes("department");
//查询部门的名字和编号
departmentAttr.addResultAttributes("name","code");

//查询部门所属的公司
ResultAttributtes companyAttr = new ResultAttributtes("company");
//查询部门所属公司的名字
companyAttr.addResultAttributes("name");

//将部门和公司两者关联起来
departmentAttr.addResultAttributes(companyAttr);

//将需要查询的这个语句放到query里
query.addResultAttributes(departmentAttr);

//------------------------------------------------------------------------
try {
    //执行query
    GraphqlResponse response = graphqlClient.doQuery(query);
    //获取数据,数据为map类型
    Map result = response.getData();
} catch (IOException e) {
    e.printStackTrace();
}

에 해당하는 graphql 문 :

query{
	findUser(name:"张三",age:23){
		name
		sex
		age
		department{
			name
			code
			company{
				name
			}
		}
	}
}

 

 

 

돌연 변이

다음은 같은 쿼리, 사실, 복잡한 mutaion를 작성하는

//创建一个mutation并设置名字为updateUser
GraphqlMutation mutation = new DefaultGraphqlMutation("updateUser");

//设置参数,用户id为12,名字为张三,年龄为24
mutation.addParameter("id",12).addParameter("name","张三").addParameter("age",24);

//获取修改的结果
mutation.addResultAttributes("code");

//获取结果里的数据:data对象昂
ResultAttributtes dataAttr = new ResultAttributtes("data");
//获取data里的消息、修改执行状态与时间戳
dataAttr.addResultAttributes("message","state","date");

//将data与mutation关联起来
mutation.addResultAttributes(dataAttr);

//执行mutation
try {
    GraphqlResponse mutationResponse = graphqlClient.doMutation(mutation);
    //同样返回的数据也是map的
    Map mutationResult = mutationResponse.getData();
} catch (IOException e) {
    e.printStackTrace();
}

 

복잡한 요청을 구현하는 방법

돌연변이, 쿼리 및 돌연변이 같은 원리 프리젠 테이션 작업을 수행합니다.

    @Test
    public void testObjectParameter() throws IOException {


        
        String serverUrl = "http://localhost:8080/graphql";
        
        GraphqlClient graphqlClient = GraphqlClient.buildGraphqlClient(serverUrl);

        
        Map<String,String> httpHeaders = new HashMap<>();
        httpHeaders.put("token","graphqltesttoken");
        
        graphqlClient.setHttpHeaders(httpHeaders);

        GraphqlMutation mutation = new DefaultGraphqlMutation("addUser");

        List<User> users = new ArrayList<>();
        users.add(new User("tim",SexEnum.M));
        users.add(new User("sdf",SexEnum.F));
        mutation.getRequestParameter().addParameter("classId","123").addObjectParameter("users",users);

        mutation.addResultAttributes("code");

        System.out.println(mutation.toString());

    }

    /**
     * test user
     */
    class User{
        public User(String name, SexEnum sexEnum) {
            this.name = name;
            this.sexEnum = sexEnum;
        }

        private String name;
        private SexEnum sexEnum;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public SexEnum getSexEnum() {
            return sexEnum;
        }

        public void setSexEnum(SexEnum sexEnum) {
            this.sexEnum = sexEnum;
        }
    }

    /**
     * test user sex
     */
    enum SexEnum{
        M,
        F
    }

돌연변이 문을 해당 :

mutation{
  addUser(classId:"123",users:[{name:"tim",sexEnum:M},{name:"sdf",sexEnum:F}]){
    code
  }
}

댓글 환영 논의합니다.

 

추천

출처blog.csdn.net/zhanghaishan/article/details/79845594