は、私は将来的にはこれで立ち往生し、より良い方向に指摘を取得したいと考えています誰のためにここに私の調査結果を残したいです。
まず、graphql-ruby
逸品リレー互換GraphQLのAPIを実装するために必要なすべてが含まれています。ここにはgraphql-relay
の宝石の中にあったものがすべて含まれています。あなたがグローバルIDとグローバルをデコードしますobject_from_id
方法に、うまく動作するリレー再フェッチ機能を作るために自分のスキーマにドメイン内のオブジェクトに変換id_from_object
方法を2つのことを提供する必要が
ApplicationSchema = GraphQL::Schema.define do
/* Create IDs by joining the type name & ID, then base64-encoding it */
id_from_object ->(object, type_definition, query_ctx) {
GraphQL::Schema::UniqueWithinType.encode(type_definition.name, object.id)
}
object_from_id ->(id, query_ctx) {
type_name, object_id = GraphQL::Schema::UniqueWithinType.decode(id)
# Now, based on `type_name` and `id`
# find an object in your application
# This will give the user access to all records in your db
# so you might want to restrict this properly
Object.const_get(type_name).find(object_id)
}
end
また、すべてのあなたのタイプはルビーの宝石によって提供さNodeInterface
を実装し、代わりにIDタイプのglobal_id_field
を公開する必要があります:
PostType = GraphQL::ObjectType.define do
name "Post"
# Implements the "Node" interface for Relay
interfaces [GraphQL::Relay::Node.interface]
# exposes the global id
global_id_field :id
field :name, types.String
end
アプリケーション内のオブジェクトへのidこれは、リレーは、このようなデータを再フェッチすることができます
:あなたがいないビューで分離されたAPIを構築している場合
query {
node(id: "RmFjdGlvbjox") {
id
... on Post {
name
}
}
}
リレーはまた、生成され、クライアントが利用できることをschema.jsonを必要とするbabel-relay-plugin
を使用していますレンダリング、進むべき道は、クライアントがスキーマを取得し、サーバにその仕事をしない、apollo-codegenのようなものが働くことができるようにすることです。あなたはレールのアプリを構築し、同じアプリ内のスキーマを必要としている場合は、あなたはインストロペクエリを実行し、rakeタスクを使用してJSONファイルに結果を保存することができます:
Schema.execute GraphQL::Introspection::INTROSPECTION_QUERY
最後に、あなた'LLリレー接続で1対多の関係発現することを理解しておく必要があります
PostType = GraphQL::ObjectType.define do
# default connection
# obj.comments by default
connection :comments, CommentType.connection_type
# custom connection
connection :featured_comments, CommentType.connection_type do
resolve ->(post, args, ctx) {
comments = post.comments.featured
if args[:since]
comments = comments.where("created_at >= ?", since)
end
comments
}
end
end
接続を箱から出して、いくつかの引数をサポートし、あなたの接続クエリでfirst
、last
、before
とafter
を使用することができます。
query {
posts(first: 5) {
edges {
node {
name
}
}
}
}
これはすべてRelay documentationに記載されていますので、graphql-rubyのドキュメントも必ずお読みください。
はい、動作しますが、古いバージョンの 'graphql'を使用しています。私は 'graphql-ruby'と' graphql-relay'がマージされていることを知りました。私はこの質問にもっと良い答えを与えるためにAPIを構築するのがより快適になるよう努めています。それを始めるには間違いなく苦痛です –