在Rails 6的API模式中使用GraphQL的方法(包括错误处理)

首先

我整理了一下使用Rails进行GraphQL的方法。

本文的目的是介绍仅仅实现必要的最低限功能,以及能够验证GraphQL的正常运行。(同时还附加了一些错误处理的方法。)
因此,没有进行查询的设置。

用Rails API模式开始构建GraphQL API,使用graphql-ruby库。

应用程序的制作

$ rails new demo-graphql --api       #オプションで--apiをつけるとAPIモードでappを作成

在Gemfile中添加graphql和graphiql-rails(仅在开发环境中使用)。

gem 'graphql'    #追加

group :development, :test do
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
  gem 'graphiql-rails'   #開発環境に追加
end

取消注释

require "sprockets/railtie"    #コメントアウトを外す

在终端中执行以下操作。

$ bundle install
$ rails generate graphql:install   #GraphQLに関するファイルが作成されます

在routes.rb文件中添加以下内容

Rails.application.routes.draw do
  if Rails.env.development?
    # add the url of your end-point to graphql_path.
    mount GraphiQL::Rails::Engine, at: "/graphiql", graphql_path: "/graphql" 
  end
  post '/graphql', to: 'graphql#execute'  #ここはrails generate graphql:installで自動生成される
end

确认动作

スクリーンショット 2020-06-03 19.59.07.png
スクリーンショット 2020-06-03 19.59.38.png

如果无法连接到GraphiQL(在GraphiQL::Rails::Editors#show中的Sprockets::Rails::Helper::AssetNotPrecompiled错误),

无论查看哪篇文章,只有上述设置被介绍,并且直接实施会出错,所以介绍解决方法。
由于在API模式下创建时不会生成assets,这似乎是原因。
[Rails6][sprockets4.0.0] 当删除app/assets文件夹及其子文件以禁用Sprockets时,将会出现Sprockets::Railtie::ManifestNeededError错误。

请根据您的开发环境选择任何一种方式,都可以保证正常进行开发。

スクリーンショット 2020-06-04 10.03.49.png

创建策略1:编写assets/config/manifest.js文件。

创建 assets/config/manifest.js 文件,并写入以下内容。

//= link graphiql/rails/application.css
//= link graphiql/rails/application.js

将‘sprocket’的版本降低到3.7.2这个补救措施2。

自从sprockets4.0.0版本开始,如果缺少assets文件会报错。

因此,只需降低版本即可解决该问题。

gem 'sprockets', '~> 3.7.2'  #追加する
$ bundle update

结束了

这次我们把重点放在了让rails6能够使用GraphQL上。
关于如何创建查询并接收数据的实际步骤,请参考其他文章。

广告
将在 10 秒后关闭
bannerAds