在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称(OpenSource Name):devknoll/graphql-schema开源软件地址(OpenSource Url):https://github.com/devknoll/graphql-schema开源编程语言(OpenSource Language):JavaScript 97.4%开源软件介绍(OpenSource Introduction):graphql-schemaCreate GraphQL schemas with a fluent/chainable interface. Notice to <=0.3.0 users: The API has been changed significantly. Rather than hacking ES7 classes, Installation
Basic Usageconst rootQueryType = objectType('RootQueryType', 'TODO: Description')
.field('hello', GraphQLString, 'Say hello to someone')
.arg('name', GraphQLString, 'The name of the person to say hello to')
.resolve(root, {name} => `Hello, ${name}`)
.end(); becomes var rootQueryType = new GraphQLObjectType({
name: 'RootQueryType',
description: 'TODO: Description'
fields: {
hello: {
type: GraphQLString,
description: 'Say Hello to someone',
args: {
name: {
name: 'name',
type: GraphQLString,
description: 'The name of the person to say Hello to'
}
}
resolve: (root, {name}) => `Hello, ${name}`;
}
}
}); Full Exampleimport { interfaceType, objectType, enumType, schemaFrom, listOf, notNull } from 'graphql-schema';
const episodeEnum = enumType('Episode',
'One of the films in the Star Wars Trilogy')
.value('NEWHOPE', 4, 'Released in 1977.')
.value('EMPIRE', 5, 'Released in 1980.')
.value('JEDI', 6, 'Released in 1983.')
.end();
const characterInterface = interfaceType('Character',
'A character in the Star Wars Trilogy')
.field('id', notNull(GraphQLString), 'The id of the character.')
.field('name', GraphQLString, 'The name of the character.')
.field('friends', listOf(characterInterface),
'The friends of the character, or an empty list if they have none')
.field('appearsIn', listOf(episodeEnum), 'Which movies they appear in.')
.resolve((obj) => {
if (starWarsData.Humans[obj.id] !== undefined) {
return humanType;
}
if (starWarsData.Droids[obj.id] !== undefined) {
return droidType;
}
return null;
})
.end();
const humanType = objectType('Human', [characterInterface],
'A humanoid creature in the Star Wars universe.')
.field('id', notNull(GraphQLString), 'The id of the human.')
.field('name', GraphQLString, 'The name of the human.')
.field('friends', listOf(characterInterface),
'The friends of the human, or an empty list if they have none', (human) => {
return getFriends(human);
})
.field('appearsIn', listOf(episodeEnum), 'Which movies they appear in.')
.field('homePlanet', GraphQLString,
'The home planet of the human, or null if unknown.')
.end();
const droidType = objectType('Droid', [characterInterface],
'A mechanical creature in the Star Wars universe.')
.field('id', notNull(GraphQLString), 'The id of the droid.')
.field('name', GraphQLString, 'The name of the droid.')
.field('friends', listOf(characterInterface),
'The friends of the droid, or an empty list if they have none', (droid) => {
return getFriends(droid);
})
.field('appearsIn', listOf(episodeEnum), 'Which movies they appear in.')
.field('primaryFunction', GraphQLString, 'The primary function of the droid.')
.end();
const queryType = objectType('Query')
.field('hero', characterInterface, () => artoo)
.field('human', humanType)
.arg('id', notNull(GraphQLString))
.resolve((root, {id}) => starWarsData.Humans[id])
.field('droid', droidType)
.arg('id', notNull(GraphQLString))
.resolve((root, {id}) => starWarsData.Droids[id])
.end();
const mutationType = objectType('Mutation')
.field('updateCharacterName', characterInterface)
.arg('id', notNull(GraphQLString))
.arg('newName', notNull(GraphQLString))
.resolve((root, {id, newName}) => updateCharacterName(id, newName))
.end();
const starWarsSchema = schemaFrom(queryType, mutationType); Cyclic Types
const userType = objectType('User')
.field('friends', () => listOf(userType))
.end(); APIenumType(name, description)Define a new .value(name, value, description).deprecated(deprecationReason)interfaceType(name, description)Define a new .field(name, type, description).deprecated(deprecationReason).arg(name, type, defaultValue, description).resolve(fn)objectType(name, [interfaces], description)Define a new .field(name, type, description).deprecated(deprecationReason).arg(name, type, defaultValue, description).resolve(fn)schemaFrom(queryRootType, mutationRootType)Define a new listOf(type)Define a new notNull(type)Define a new ThanksThanks to Florent Cailhol for the chainable interface idea! |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论