現在、graphql-javaライブラリのページングのサポートはありません。いくつかの基本的なリレーサポートを持っています。ここでは、connection
、Facebookが推奨するページ設定の実装方法を作成することができます。
Thisは、これを達成するのに役立つ方法です。しかし、ドキュメントがないと、この関数の仕組みを理解するのが難しいと感じています。 Add
、delete
、fetch
などの基本クエリを可能にする既存のモデルが既にgraphql-javaライブラリを使用している場合、ページングのサポートを追加するための手順を細かく分けることはできますか?GraphQL:graphQL-javaでページ区切りを実装する方法は?
2
A
答えて
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-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<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を使用していない場合はほとんど常に過剰です。
関連する問題
- 1. AndroidのListViewでページ区切りを実装する
- 2. 実装方法角2を使用したサーバー側のページ区切り
- 3. Wicketでは、Ajaxページ区切りチェックボックスのリストをフォームに実装する方法は?
- 4. Laravel 4ページ区切り方法
- 5. フィルタパラメータの保持方法。ページ区切り
- 6. LINQページ区切りのページ全体を取得する方法
- 7. String.split() - タブ区切り値とコンマ区切り値を区別する方法は?
- 8. RxSwiftでページ区切りページの全ページURLを取得する方法
- 9. scalikejdbcページ区切り
- 10. Wordpress - ページ区切り
- 11. cakephpページ区切り
- 12. Struts2ページ区切り
- 13. Magentoページ区切り
- 14. SOLRページ区切り
- 15. CodeIgniterページ区切り
- 16. パイプ文字区切り文字でフィールドを区切る方法
- 17. 区切り文字でテキストファイルのフィールドを区切る方法
- 18. PHP - テキストでページ区切り
- 19. Googleマップでページ区切り
- 20. laravelから#symbolを削除する方法ページ区切りurl
- 21. RDLC:テーブルにページ区切りを追加する方法
- 22. ページ区切りでフィルタリングするコンテンツ
- 23. 複数の単語を1つのセルに区切る方法区切りなしで区切る方法
- 24. Socrata - $ページでのページ区切り
- 25. ページ区切りを整列する
- 26. ページ区切りをズームアウトするとき
- 27. ページ区切りのhtmlページを印刷
- 28. JSF、RichFaces、ページ区切り
- 29. Codeigniter検索ページ区切り
- 30. JavaScriptのページ区切り
ワンダフルな回答! – Scrotch
@ user3728233喜んでください:) – kaqqao