将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を返そうとする
我所感受到的
做起来比我想象的要简单。实际情况和实施结构变得更加接近,修改变得容易了。