美文网首页
gqlgen初体验(三)

gqlgen初体验(三)

作者: 戈壁堂 | 来源:发表于2021-05-12 20:20 被阅读0次

继续Building a GraphQL API in Go using gqlgen中的第五步

接口定义与实现

  • 先定义接口interface,以及接口中可能用到的结构体。例如pkg/todo_service.go
type ToDoItem struct {
    Id        string
    Text      string
    IsDone    bool
    CreatedOn time.Time
    UpdatedOn *time.Time
}

type ToDo interface {
    Initialise() error
    Create(text string, isDone bool) (*string, error)
    Update(id string, text string, isDone bool) error
    List() ([]ToDoItem, error)
}
  • 定义接口的实现对象结构体。让此结构体实现上述所有的接口方法。go语言中任意实现了所有接口中定义的方法的对象,都默认实现了此接口。例如pkg/imp/todo_service.go

type ToDoImpl struct {
    DbUserName string
    DbPassword string
    DbURL      string
    DbName     string
}

func (t *ToDoImpl) Initialise() error {...}

func (t *ToDoImpl) Create(text string, isDone bool) (*string, error) {...}

func (t *ToDoImpl) Update(id string, text string, isDone bool) error {...}

func (t *ToDoImpl) List() ([]todo.ToDoItem, error) {...}

graphql请求与响应

  • 通常就两类主要的请求:一种为查询query;一种为变更mutation。通常在在schema.graphl文件中定义
schema {
    query: MyQuery
    mutation: MyMutation
}

type MyQuery {
    todos: [Todo!]!
}

type MyMutation {
    createTodo(todo: TodoInput!): Todo!
}
  • 响应会在对应的schema.resolver.go文件中实现。默认有一个resolver.go文件,可以一行实现type Resolver struct{}。关键的是对请求和响应的声明:
// MyMutation returns generated.MyMutationResolver implementation.
func (r *Resolver) MyMutation() generated.MyMutationResolver { return &myMutationResolver{r} }

// MyQuery returns generated.MyQueryResolver implementation.
func (r *Resolver) MyQuery() generated.MyQueryResolver { return &myQueryResolver{r} }

type myMutationResolver struct{ *Resolver }
type myQueryResolver struct{ *Resolver }

  • 然后在对应的resolver中实现graphql文件中的各种查询和变更的方法,gqlgen默认实现的方法只包含一句panic(fmt.Errorf("not implemented"))
func (r *myQueryResolver) Todo(ctx context.Context, id string) (*model.Todo, error) {...}
func (r *myMutationResolver) CreateTodo(ctx context.Context, todo model.TodoInput) (*model.Todo, error) {...}

在对应resolver具体的方法实现中调用上述“接口方法”。完成对请求的最终响应。

最终对graphql的请求处理,gqlgen会最终生成generated.go(具体名称有配置文件定义)作为运行时响应

相关文章

网友评论

      本文标题:gqlgen初体验(三)

      本文链接:https://www.haomeiwen.com/subject/mocndltx.html