ember-graphql-adapterGraphQL adapter for Ember Data

联合创作 · 2023-09-18 22:28

Ember Data GraphQL Adapter


Npm Version Code Climate Ember Observer Score Greenkeeper badge


A Ember CLI adapter for using GraphQL with Ember Data.


Installation


ember install ember-graphql-adapter


Usage


Create your adapter first



// app/adapters/post.js
import GraphQLAdapter from 'ember-graphql-adapter';

export default GraphQLAdapter.extend({
endpoint: 'http://localhost:3000/graph'
});


Now define your serializer



// app/serializers/post.js
import { Serializer } from 'ember-graphql-adapter';

export default Serializer.extend({});


And you're done!


Features



  • Queries and mutations are automatically generated for you

  • Field aliases are supported

  • Belongs to relationships are fully supported

  • Has many relationships are fully supported

  • Async relationships and request coalescing is supported with coalesceFindRequests: true


Rails Example


By using the fantastic graphql gem, you can expose your relational database as a GraphQL endpoint.


We start by creating a new type



# app/models/graph/post_type.rb
module Graph
PostType = GraphQL::ObjectType.define do
name "Post"
description "A post"

field :id, types.ID
field :name, types.String
end
end


Then we create the query type



# app/models/graph/query_type.rb
module Graph
QueryType = GraphQL::ObjectType.define do
name "Query"
description "The query root of this schema"

field :post, PostType do
argument :id, !types.ID, "The ID of the post"
resolve -> (_object, arguments, _context) do
Post.find(arguments[:id])
end
end
end
end


After that, it's time for the mutation type



# app/models/graph/mutation_type.rb
module Graph
MutationType = GraphQL::ObjectType.define do
name "Mutation"
description "Mutations"

field :postCreate, PostType do
argument :name, !types.String, "The post name"
resolve -> (_object, arguments, _context) do
Post.create(name: arguments[:name])
end
end
end
end


Now, we can build the whole schema



# app/models/graph/schema.rb
module Graph
Schema = GraphQL::Schema.define do
query Graph::QueryType
mutation Graph::MutationType
end
end


In the controller we just delegate to the GraphQL schema



# app/controllers/graph_controller.rb
class GraphController < ApplicationController
def execute
render json: ::Graph::Schema.execute(
params.fetch("query"),
context: {} # you can pass the current_user here
)
end
end


Finally, we just expose the GraphQL endpoint in the route



# config/routes.rb
get 'graph', to: 'graph#execute'


And that's it!


Developing


Installation



  • git clone https://github.com/alphasights/ember-graphql-adapter.git

  • yarn install


Running



  • yarn start


Running Tests



  • yarn run ember test -- --server


Building



  • yarn build

浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报