Closed10

GraphQLのキャッチアップ

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

GraphQL入門の古典的ドキュメントとしてはこれがいいか

GraphQLとは

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

https://en-ambi.com/itcontents/entry/2018/12/26/103000

蔀

具体例

スキーマ

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
    • 全取得のクエリなので、不要なパラメーターは手動でコメントアウトしたものを書く必要アリ

https://www.apollographql.com/tutorials/apollo-ios-swift-part1/03-add-schema-codegen

蔀

自動生成されたものはこのように使う

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にクローズされました