Closed10
GraphQLのキャッチアップ

- GraphQLのキャッチアップ
- 最終的にはiOS開発でGraphQLを使えるレベルになりたい
- 筆者はREST APIしか経験ない
- もともとFacebookで開発された、社内のクエリ言語が起源、というのは知ってる
- 「フロントエンドがSQLみたいなの書いてデータをfetchする」「柔軟性高いけどその分呼び出しが煩雑」みたいなイメージ
- あとApolloってやつがGraphQLクライアント?としてよく使われてるイメージ

iOS向けのチュートリアル

GraphQLそのものに対する解説がチュートリアルになかったので、補完

Apolloクライアント以外の選択肢

GraphQL入門の古典的ドキュメントとしてはこれがいいか
GraphQLとは
- RESTを代替するAPI規格
- RESTはリソースに対するCRUD操作全てにエンドポイントを切る必要がある
- またフロントとバックエンドで型の認識が合っている必要がある
- GraphQLはスキーマ言語とクエリ言語を提供する
- バックエンドはスキーマ言語によってデータ構造を記述する
- フロントエンド(Web/モバイル)はクエリ言語を用いて、APIを叩く。クエリ言語は3種類ある
- データ取得系のquery
- データ更新系のmutation
- サーバーサイドからのイベントの通知であるsubscription

具体例
スキーマ
type Query {
currentUser: User!
}
type User {
id: ID!
name: String!
}
クエリ
query GetCurrentUser {
currentUser {
id
name
}
}

↑を見たらGraphQLそのものはよくわかった
自動生成が入るとよくわからなくなる

自動生成の手順
- apollo-ios-cliのインストール
- チュートリアルではXcode操作でやることになっている
- ローカルのスキーマファイルの初期化
./apollo-ios-cli init --schema-namespace RocketReserverAPI --module-type swiftPackageManager
-
apollo-codegen-config.json
ができる - ↑このjsonの中に自動生成のインプット/アウトプットについて記述する
- スキーマのインストール
/apollo-ios-cli fetch-schema
- クエリの自動生成
./apollo-ios-cli generate
- 全取得のクエリなので、不要なパラメーターは手動でコメントアウトしたものを書く必要アリ

雑にGraphQL試したいなら、sandboxが一番早そう

自動生成されたものはこのように使う
class Network {
static let shared = Network()
private(set) lazy var apollo = ApolloClient(url: URL(string: "https://apollo-fullstack-tutorial.herokuapp.com/graphql")!)
}
import SwiftUI
import Apollo
import RocketReserverAPI
// ...class initialization
init() {
// TODO (later in the tutorial)
Network.shared.apollo.fetch(query: LaunchListQuery()) { result in
switch result {
case .success(let graphQLResult):
print("Success! Result: \(graphQLResult)")
case .failure(let error):
print("Failure! Error: \(error)")
}
}
}
このスクラップは2025/01/15にクローズされました