将GraphQL逐步引入本番API服务器

我是 @_nishisuke!

我是自由职业者!

我在一个项目中,为已经在生产环境中运行的 iOS API 服务器 (Rails) 引入了 GraphQL。

在这个案件中,我被授予了实施的全部权力。

我决定不突然改变客户端的实现,因为这个改动太大了。

作为第一步,我们尝试将服务器的序列化层仅替换为GraphQL。

API服务器上有请求规范(request spec)并且使用JSON模式(json-schema)确保了响应的JSON数据。

只针对一部分读取的查询进行操作,并没有将写入过程放入最初的范围内。

使用 Rails 进行 GraphQL

安装

gem 'graphql'

之前

class UsersController < ApplicationController
  def index
    user = User.where(適当なコンディション).includes(適当なアソシエーション)
    render json: UserSerializer(user)
  end
end

在此之后

class UsersController < ApplicationController
  USER_SCHEMA = <<~USER_SCHEMA
    {
      users { name }
    }
  USER_SCHEMA

  def index
    gql_res = MyApplicationSchema.execute(USER_SCHEMA).to_h

    raise SomeError unless gql_res['errors'].nil?

    render json: gql_res.to_json
  end
end

最终成果

我只想改变序列化器层,但不得不改变控制器层。
MVC -> M + graphql
的意思。

宝石的注意事项

    • graphql-rubyのqueryはdefaultでcamelcase

 

    graphql-rubyは200 statusでerror jsonを返そうとする

我所感受到的

做起来比我想象的要简单。实际情况和实施结构变得更加接近,修改变得容易了。

广告
将在 10 秒后关闭
bannerAds