I_Want_To_Check_The_Type_Of_A_Query_Before_Executing_It_With_Graphql-Client
背景
- 弊社にはバックエンドのアプリケーションが2つある
- バックエンド間の通信にGraphQLを採用している
flowchart LR
App <-- GraphQL --> バックエンドアプリケーション <-- GraphQL --> 検査専用アプリケーション
抱えている課題
- GitHub社のライブラリである graphql-client を利用している
- 以下のような実装ミスをしてしまったが、リリースするまで気づかなかった
- テスト側でもモックする際に同じように実装ミスをしていたため、リリース後にエラーが発生して初めて発覚した
module UpdateProfileCommand
class << self
def call(user_id)
GRAPHQL_QUERY = <<~GRAPHQL.freeze
mutaiton ($input: updateProfileInput!) {
updateProfileInput(input: $input) {
profile {
name
}
}
}
GRAPHQL
response = ::GraphqlClient.query(
GRAPHQL_QUERY,
variables: {
input: {
# ↓ キーはキャメルケース(userId )で実装する必要があった
user_id: user_id,
}
}
}
).data
end
end
end
原因
- 実装時に気づきにくい
- TypeScript のような型がある言語であれば実装時点で気づくことができるが、Ruby には型がないため気づきにくい
- テスト時に気づきにくい
- 統合テストでも通信部分はモックしているため、モックでミスするとテストで気づけない
やりたいこと
- サーバー側のスキーマを持っている
- リクエスト実行前にそのクエリの型が正しいかをどうか検証したい
調べたいこと or 調べたこと
graphql-client に機能がないか?
代替ライブラリがないか?