Introdução ao GraphQL e Swift
\nGraphQL é uma linguagem de consulta para APIs que permite aos clientes obter exatamente os dados de que precisam, sem excessos. Para desenvolvedores iOS e macOS, a integração com GraphQL abre novas possibilidades para criar aplicativos móveis eficientes e flexíveis. Neste tutorial, vamos abordar na prática como conectar uma GraphQL API a um projeto Swift, executar consultas e mutações básicas, além de tratar possíveis erros.
\nAo contrário do REST tradicional, o GraphQL permite solicitar vários recursos em uma única requisição, o que é especialmente importante para dispositivos móveis com tráfego limitado. Usaremos a biblioteca popular Apollo iOS — a solução mais estável e documentada para trabalhar com GraphQL em Swift.
\n\nPreparação do projeto e instalação do Apollo iOS
\nPasso 1: Criar o projeto e instalar dependências
\nAbra o Xcode e crie um novo projeto iOS (ou macOS). Para trabalhar com GraphQL, instalaremos o Apollo iOS via Swift Package Manager (SPM).
\n- \n
- No Xcode, selecione
File → Add Packages\li>Insira a URL do repositório:
https://github.com/apollographql/apollo-ios.git\li>Escolha a versão estável mais recente (no momento da escrita — 1.15+)\li>Adicione o pacote ao seu target
Passo 2: Geração de código a partir do esquema GraphQL
\nO Apollo iOS usa geração de código: você descreve as consultas em arquivos .graphql, e a ferramenta cria código Swift tipado. Para isso, é necessário:
- \n
- Crie uma pasta
GraphQLno projeto \li>Coloque lá o arquivo
schema.graphqls (esquema da sua API) — geralmente pode ser obtido via introspecção\li>Crie um arquivo de consulta, por exemplo GetUser.graphql:
query GetUser($id: ID!) {\n user(id: $id) {\n id\n name\n email\n posts {\n title\n }\n }\n}\n\nEm seguida, adicione uma Build Phase com a execução do gerador de código. A maneira mais fácil é instalar o Apollo CLI via Homebrew:
\nbrew install apollo-ios-cli\n\nE execute o comando na raiz do projeto:
\n./apollo-ios-cli generate\n\nDepois disso, na pasta Sources/API, aparecerão os arquivos Swift gerados com os modelos de dados.
Executando consultas GraphQL básicas
\nConfiguração do cliente Apollo
\nCrie uma instância do cliente Apollo, informando a URL do seu endpoint GraphQL. Geralmente, isso é feito no AppDelegate ou em uma classe de serviço separada:
\n\nimport Apollo\n\nclass NetworkService {\n static let shared = NetworkService()\n private(set) lazy var apollo: ApolloClient = {\n let url = URL(string: "https://your-api.com/graphql")!\n return ApolloClient(url: url)\n }()\n}\n\nConsulta de dados (Query)
\nAgora, vamos executar uma consulta para obter um usuário. O código gerado criará a estrutura GetUserQuery:
import Foundation\n\nclass UserViewModel: ObservableObject {\n @Published var user: User?\n @Published var errorMessage: String?\n \n func fetchUser(id: String) {\n NetworkService.shared.apollo.fetch(query: GetUserQuery(id: id)) { [weak self] result in\n DispatchQueue.main.async {\n switch result {\n case .success(let graphQLResult):\n if let userData = graphQLResult.data?.user {\n self?.user = User(\n id: userData.id,\n name: userData.name,\n email: userData.email\n )\n }\n case .failure(let error):\n self?.errorMessage = "Erro: \\(error.localizedDescription)"\n }\n }\n }\n }\n}\n\nObserve: usamos @Published para atualização reativa da UI em