graphql java中文文档_GraphQL:如何使用graphQL-java实现分页?

这篇博客探讨了如何在GraphQL中使用Relay库进行分页操作。通过示例代码,解释了如何创建Book类型的连接,以及如何在服务端实现基于页码和大小的分页查询。同时,提到了如果不使用Relay,简单的limit/offset参数也能实现分页,且更简单直接。文章还推荐了一个简化GraphQL API开发的项目graphql-spqr。
摘要由CSDN通过智能技术生成

你甚至不需要中继连接,以支持分页。您的查询可以简单地接受页码和大小(或限制/偏移量)作为参数并返回列表 - 完成。 但是,如果您希望中继连接例如Book类型,你会做类似如下:

Relay relay = new Relay();

GraphQLOutputType book = ...; //build your normal Book object type

GraphQLObjectType bookEdge = relay.edgeType(book.getName(), book, null, Collections.emptyList());

GraphQLObjectType bookConnection = relay.connectionType(book.getName(), bookEdge, Collections.emptyList());

结果,你就会有一个BookConnection类型符合Relay connection spec。

为有基本GraphQL的例子,你有一个简单的Web应用程序here。

我还建议你看看我的项目,graphql-spqr,an example app,这使得开发GraphQL API简单。

例如,你需要创建一个分页的结果是这样的:

public class BookService {

@GraphQLQuery(name = "books")

//make sure the argument names and types match the Relay spec

public Page getBooks(@GraphQLArgument(name = "first") int first, @GraphQLArgument(name = "after") String after) {

//if you decide to fetch from a SQL DB, you need the limit and offset instead of a cursor

//so, you can treat "first" as count as "after" as offset

int offset = Integer.valueOf(after);

List books = getBooksFromDB(first, offset);

Page bookPage = PageFactory.createOffsetBasedPage(books, totalBookCount, offset);

return bookPage;

}

}

还有许多其他的方法来创建一个Page实例,这只是最直接的一个。如果你不使用继电器

ExecutionResult result = graphQL.execute("{books(first:10, after:\"20\") {" +

" pageInfo {" +

" hasNextPage" +

" }," +

" edges {" +

" cursor, node {" +

" title" +

"}}}}");

但同样,真的没有必要:

你会再生成Java类的模式: GraphQLSchema schema = new GraphQLSchemaGenerator()

.withOperationsFromSingleton(new BookService())

.generate();

GraphQL graphQL = GraphQLRuntime.newGraphQL(schema).build();

并执行一个查询过于复杂的东西。如果您的存储自然支持基于光标的分页,请继续。如果没有,只需使用简单的limit/offset参数并返回一个列表,并忘记连接规范。它是为了让Relay在各种情况下自动管理分页而创建的,所以如果你不使用Relay,它几乎总是矫枉过正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值