gRPC pour Swift (iOS/macOS) : bibliothèques et exemples
\ngRPC est un framework haute performance pour l'appel de procédure à distance (RPC), développé par Google. Il utilise Protocol Buffers (protobuf) pour la sérialisation des données et HTTP/2 pour le transport. Pour les plateformes Apple (iOS, macOS), il existe un écosystème officiel Swift gRPC qui permet de créer des applications clientes et serveurs avec un support complet des fonctionnalités modernes de Swift, y compris async/await.
\n\nBibliothèques et outils principaux
\nPour travailler avec gRPC en Swift, les composants suivants sont utilisés :
\n- \n
- gRPC-Swift — le package officiel de Google. Il inclut le runtime, le générateur de code et le support de l'interaction client-serveur. \n
- Swift Protobuf — bibliothèque pour travailler avec les messages protobuf. Nécessaire pour générer des structures Swift à partir de fichiers .proto. \n
- protoc — le compilateur Protocol Buffers. Pour générer du code Swift, les plugins
protoc-gen-grpc-swiftetprotoc-gen-swiftsont requis. \n - Swift Package Manager (SPM) — le principal moyen d'intégrer les dépendances. \n
Installation et configuration
\nPour commencer, ajoutez les dépendances dans Package.swift :
// swift-tools-version:5.9\nimport PackageDescription\n\nlet package = Package(\n name: "GRPCExample",\n dependencies: [\n .package(url: "https://github.com/grpc/grpc-swift.git", from: "1.21.0"),\n .package(url: "https://github.com/apple/swift-protobuf.git", from: "1.26.0")\n ],\n targets: [\n .executableTarget(\n name: "GRPCExample",\n dependencies: [\n .product(name: "GRPC", package: "grpc-swift"),\n .product(name: "SwiftProtobuf", package: "swift-protobuf")\n ]\n )\n ]\n)\n\nIl est également nécessaire d'installer protoc et les plugins via Homebrew :
brew install protobuf\nbrew install grpc-swift\nbrew install swift-protobuf\n\nExemple de fichier .proto
\nCréons un service simple pour saluer. Fichier hello.proto :
syntax = "proto3";\n\nservice Greeter {\n rpc SayHello (HelloRequest) returns (HelloReply);\n}\n\nmessage HelloRequest {\n string name = 1;\n}\n\nmessage HelloReply {\n string message = 1;\n}\n\nGénérez le code Swift avec la commande :
\nprotoc --swift_out=. --grpc-swift_out=. hello.proto\n\nEn conséquence, les fichiers hello.pb.swift et hello.grpc.swift apparaîtront.
Partie serveur en Swift
\nCréons un serveur gRPC qui traitera les requêtes SayHello :
import GRPC\nimport NIO\nimport NIOPosix\n\nclass GreeterProvider: GreeterProvider {\n func sayHello(request: HelloRequest, context: StatusOnlyCallContext) -> EventLoopFuture<HelloReply> {\n var reply = HelloReply()\n reply.message = "Bonjour, \\(request.name)!"\n return context.eventLoop.makeSucceededFuture(reply)\n }\n}\n\nlet group = MultiThreadedEventLoopGroup(numberOfThreads: 1)\ndefer { try! group.syncShutdownGracefully() }\n\nlet server = try Server.insecure(group: group)\n .withServiceProviders([GreeterProvider()])\n .bind(host: "localhost", port: 50051)\n .wait()\n\nprint("Serveur démarré sur localhost:50051")\ntry server.onClose.wait()\n\nPartie cliente en Swift (avec async/await)
\nPour iOS/macOS, le client est facilement implémenté avec async/await. Assurez-vous d'utiliser Swift 5.5+ et une cible de déploiement minimale iOS 13.0 / macOS 10.15.
\nimport GRPC\nimport NIO\nimport NIOPosix\nimport SwiftProtobuf\n\nfunc greet(name: String) async throws -> String {\n let group = PlatformSupport.makeEventLoopGroup(loopCount: 1)\n defer { try? group.syncShutdownGracefully() }\n\ Aussi dans la bibliothèque
gRPC pour Rust : bibliothèques et exemples d'utilisation
Bibliothèque WebSocket Kotlin : ktor-client-websockets pour le temps réel
Autorisation et authentification en Kotlin : Ktor, JWT et Spring Security
Mise en cache en PHP : Redis, Memcached et APCu — guide complet
Migrations de bases de données en C++ : aperçu des outils et bibliothèques