Introdução: Por que GraphQL e Swift?
O desenvolvimento moderno para iOS e macOS requer formas flexíveis e eficientes de interagir com o servidor. As APIs REST tradicionais frequentemente levam ao problema de over-fetching (obter dados desnecessários) ou under-fetching (falta de dados). O GraphQL resolve esses problemas, permitindo que o cliente solicite apenas os dados de que precisa, em uma única requisição.
Neste tutorial, criaremos um aplicativo completo em Swift que interagirá com uma API GraphQL. Você aprenderá como configurar o projeto, executar queries, mutations e tratar erros. Como cliente, usaremos o Apollo iOS — a biblioteca mais popular para trabalhar com GraphQL no ecossistema Apple.
Configuração do projeto e instalação do Apollo iOS
Criando um novo projeto
Abra o Xcode e crie um novo projeto de Aplicativo iOS ou macOS. Vamos nomeá-lo como GraphQLDemo.
Instalação do Apollo iOS via Swift Package Manager
- No Xcode, vá em File → Add Packages...
- Cole a URL do repositório do Apollo:
https://github.com/apollographql/apollo-ios.git - Selecione a versão estável mais recente e clique em Add Package.
- Certifique-se de que o pacote foi adicionado ao target do seu aplicativo.
Geração de código a partir do schema GraphQL
O Apollo usa geração de código para criar classes type-safe. Para isso, precisamos de um arquivo de schema (schema.graphqls) e arquivos com as queries (.graphql).
Crie uma pasta GraphQL no projeto e coloque lá:
schema.graphqls— baixe o schema da sua API ou use uma pública (por exemplo, Countries GraphQL API).Queries.graphql— arquivo com suas queries.
Exemplo de conteúdo do Queries.graphql:
query GetCountries { countries { code name capital currency }}Agora adicione uma Build Phase para gerar o código. No Xcode: Target → Build Phases → + → New Run Script Phase. Cole o script:
cd "${SRCROOT}/${TARGET_NAME}"./Pods/Apollo/scripts/run-bundled-codegen.sh codegen:generate --target=swift --includes=./**/*.graphql --localSchemaFile=./schema.graphqls ./GraphQL/API.swiftNota: Nas versões modernas do Apollo iOS, usa-se apollo-ios-cli. Recomendamos consultar a documentação oficial para instruções atualizadas.
Executando consultas GraphQL (Queries)
Inicialização do cliente Apollo
Vamos criar um gerenciador para trabalhar com o Apollo. Abra o arquivo NetworkManager.swift:
import Foundationimport Apollo
class NetworkManager { static let shared = NetworkManager() private(set) lazy var apollo: ApolloClient = { let url = URL(string: "https://countries.trevorblades.com/")! return ApolloClient(url: url) }()}Executando a consulta
Agora vamos executar a query GetCountries no nosso ViewController:
import UIKit
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() fetchCountries() } private func fetchCountries() { NetworkManager.shared.apollo.fetch(query: GetCountriesQuery()) { result in switch result { case .success(let graphQLResult): if let countries = graphQLResult.data?.countries { for country in countries { print("\\(country.name) - \\(country.capital ?? "N/A")") }