接口就是一个约定,方便数据的约定,union 可以实现数据类型的共享,减少代码量
基本项目
参考
- 项目结构
├── Jenkinsfile├── README.md├── app.js├── docker-compose.yml├── dockerfile├── package.json├── schema.graphql└── yarn.lock
interface && union 使用
- interface app.js
const { GraphQLServer } = require('graphql-yoga')const typeDefs = `schema.graphql`const resolvers = {Applogin:{__resolveType(obj) {if (obj.type==1) {return 'MobileApplogin'} else {return 'DesktopApplogin'}}},SearchResult:{__resolveType(obj) {if (obj.type) {return 'App'} else {return 'LocalUser'}}},Query: {hello: function(_,name){return {name:`${name.name}`,age:33}},localtype:function(parent,ob){return {name:`${ob.name}`,age: ob.name.length}},login:function(parent,ob){if (ob.name=="dalong"){return {name:"dalong",account:"app mobile info"}}else {return {name:"dalong",type:44,account:"app mobile info"}}},appsearch:function(parent,ob){return {name:"demoaopp",age:333,type:55}},appinfo:function(parent,ob){console.log(ob,parent)return {name:ob.name,type:3}},listOfStrings:function(parent){return ["dalong","demoapp","rong"]}},Mutation:{addUser:function(parent,ob){console.log(ob)return JSON.stringify(ob)}}}const options = {port: 8000,endpoint: '/graphql',subscriptions: '/subscriptions',playground: '/playground',}const server = new GraphQLServer({ typeDefs, resolvers })server.start(() => console.log('Server is running on localhost:4000'))
- schema
type LocalUser {name: Stringage: Int}interface Applogin {name:Stringaccount:String}type MobileApplogin implements Applogin{type:Intname:Stringaccount:String}type DesktopApplogin implements Applogin{type:Intname:Stringaccount:String}union SearchResult = App|LocalUserinput MyUser {name:Stringage:Int}type Query {hello(name: String): User!localtype(name:String):LocalUser!listOfStrings: [String]!# interface demologin(name:String):Applogin# for directive demoappinfo(name:String,flag:Boolean):App# union demoappsearch(name:String):SearchResult}# app infotype App {# app namename:String# app typetype:Int}type Mutation{addUser(input:MyUser):String}scalar User {name: Stringage: Int}
参考效果
- interface
- union
参考资料