Bibliotecas GraphQL para Swift (iOS/macOS): guia completo
GraphQL é uma linguagem de consulta moderna para APIs que permite que os clientes solicitem apenas os dados de que precisam. Para desenvolvedores Swift que criam aplicativos para iOS e macOS, existem bibliotecas poderosas que simplificam a integração com servidores GraphQL. Neste artigo, veremos duas bibliotecas principais: Apollo iOS e Relay (através de wrappers Swift), além de fornecer exemplos práticos de código.
O que é GraphQL e por que é importante para Swift?
GraphQL resolve o problema de overfetching e underfetching de dados, que ocorrem frequentemente ao usar APIs REST. Em Swift, isso é especialmente relevante para aplicativos móveis, onde cada kilobyte extra de dados pode afetar o desempenho e o tempo de carregamento. As principais vantagens do GraphQL para iOS/macOS:
- Consultas flexíveis — o cliente decide quais campos receber
- Tipagem forte — esquemas GraphQL geram automaticamente tipos Swift
- Suporte a assinaturas — atualizações em tempo real via WebSocket
- Ponto de entrada único — um endpoint para todas as consultas
Biblioteca Apollo iOS
Apollo iOS é a biblioteca GraphQL mais popular para Swift, desenvolvida pela Apollo GraphQL. Ela fornece um conjunto completo de ferramentas para trabalhar com GraphQL: desde geração de código até cache e tratamento de erros.
Instalação do Apollo iOS
Para instalar, use o Swift Package Manager. Adicione a dependência ao seu Package.swift:
// swift-tools-version:5.7import PackageDescription
let package = Package( name: "MyApp", dependencies: [ .package(url: "https://github.com/apollographql/apollo-ios.git", from: "1.0.0") ], targets: [ .target(name: "MyApp", dependencies: [ .product(name: "Apollo", package: "apollo-ios") ]) ])Também pode ser instalado via CocoaPods ou Carthage, mas o SPM é o método recomendado.
Configuração do cliente Apollo
Crie uma instância de ApolloClient com a URL do seu servidor GraphQL:
import Apollo
class NetworkManager { static let shared = NetworkManager() private(set) lazy var apollo: ApolloClient = { let url = URL(string: "https://api.example.com/graphql")! return ApolloClient(url: url) }()}Exemplo de consulta usando Apollo iOS
Suponha que você tenha um esquema com o tipo User e os campos id, name, email. Vamos criar uma consulta:
import Apollo
// Define a consulta GraphQL (geralmente em um arquivo .graphql)let query = """ query GetUser($id: ID!) { user(id: $id) { id name email } }"""
// Executa a consultaNetworkManager.shared.apollo.fetch(query: query, variables: ["id": "123"]) { result in switch result { case .success(let graphQLResult): if let user = graphQLResult.data?.user { print("User: \\(user.name), Email: \\(user.email)") } case .failure(let error): print("Error: \\(error)") }}Observe: o Apollo gera automaticamente tipos Swift para suas consultas (por exemplo, GetUserQuery), se você usar sua ferramenta de geração de código. Para isso, execute apollo-ios-cli com seu esquema.
Mutações e assinaturas
O Apollo suporta mutações (alteração de dados) e assinaturas (tempo real). Exemplo de mutação:
let mutation = """ mutation UpdateUser($id: ID!, $name: String!) { updateUser(id: $id, name: $name) { id name } }"""
NetworkManager.shared.apollo.pe Também na biblioteca
Processamento JSON em Rust: serde_json, simd-json, json5 e outras bibliotecas
Testes em Kotlin: frameworks e ferramentas para código de qualidade
Guia completo do Twilio para JavaScript (Node.js) com exemplos
Trabalho com Markdown em C++: bibliotecas, parsers e ferramentas
Gerador de QR Code em Go (Golang) com a biblioteca go-qrcode