2017-06-15 23 views
2

現在、graphql-javaライブラリのページングのサポートはありません。いくつかの基本的なリレーサポートを持っています。ここでは、connection、Facebookが推奨するページ設定の実装方法を作成することができます。
Thisは、これを達成するのに役立つ方法です。しかし、ドキュメントがないと、この関数の仕組みを理解するのが難しいと感じています。 Adddeletefetchなどの基本クエリを可能にする既存のモデルが既にgraphql-javaライブラリを使用している場合、ページングのサポートを追加するための手順を細かく分けることはできますか?GraphQL:graphQL-javaでページ区切りを実装する方法は?

答えて

3

ページリレーをサポートするためにリレー接続は必要ありません。あなたのクエリは単に引数としてページ番号とサイズ(または制限/オフセット)を受け入れ、リストを返すことができます。 しかし、例えば、 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()); 

を、あなたはRelay connection specに準拠BookConnectionタイプを持っていると思います。

基本的なGraphQLの例では、簡単なWebアプリケーションhereがあります。

私のプロジェクトgraphql-spqran example appで見て、GraphQL APIの開発を簡単にすることをお勧めします。

たとえば、次のようなページ分割結果を作成したい:

public class BookService { 
    @GraphQLQuery(name = "books") 
    //make sure the argument names and types match the Relay spec 
    public Page<Book> 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<Book> books = getBooksFromDB(first, offset); 
     Page<Book> 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

ワンダフルな回答! – Scrotch

+0

@ user3728233喜んでください:) – kaqqao

関連する問題