gRPC pour Swift (iOS/macOS) : bibliothèques et exemples
gRPC est un framework moderne et 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. Dans l'écosystème Swift (iOS/macOS), gRPC est implémenté via la bibliothèque gRPC-Swift, construite sur le framework asynchrone SwiftNIO. Cela permet de créer des applications clientes et serveur en Swift avec prise en charge du streaming de données, des délais d'attente et de l'authentification.
Bibliothèques principales pour gRPC en Swift
- gRPC-Swift — bibliothèque officielle d'Apple et Google. Fournit une API pour créer des serveurs et clients gRPC. Prend en charge les flux unaires, serveur, client et bidirectionnels.
- SwiftNIO — framework asynchrone de bas niveau pour les communications réseau, sur lequel repose gRPC-Swift.
- protoc-gen-swiftgrpc — plugin pour le compilateur protoc, générant du code Swift à partir de fichiers .proto.
- SwiftProtobuf — bibliothèque pour travailler avec les messages protobuf en Swift (sérialisation/désérialisation).
Installation via Swift Package Manager
Ajoutez les dépendances dans Package.swift de votre projet :
// swift-tools-version:5.7import PackageDescription
let package = Package( name: "gRPCExample", platforms: [.macOS(.v12), .iOS(.v15)], dependencies: [ .package(url: "https://github.com/grpc/grpc-swift.git", from: "1.21.0"), .package(url: "https://github.com/apple/swift-protobuf.git", from: "1.21.0") ], targets: [ .executableTarget( name: "gRPCExample", dependencies: [ .product(name: "GRPC", package: "grpc-swift"), .product(name: "SwiftProtobuf", package: "swift-protobuf") ] ) ])Création d'un fichier .proto
Définissez le service et les messages. Exemple de fichier helloworld.proto :
syntax = "proto3";
service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {}}
message HelloRequest { string name = 1;}
message HelloReply { string message = 1;}Génération du code Swift
Installez protoc et les plugins :
brew install protobufbrew install swift-protobufbrew install grpc-swiftGénérez le code :
protoc helloworld.proto \ --proto_path=. \ --swift_out=. \ --grpc-swift_out=.Les fichiers helloworld.pb.swift et helloworld.grpc.swift seront créés.
Exemple de serveur en Swift (macOS)
import GRPCimport NIOimport HelloWorld // module généré
class GreeterProvider: Greeter_GreeterProvider { func sayHello(request: Greeter_HelloRequest, context: StatusOnlyCallContext) -> EventLoopFuture<Greeter_HelloReply> { var reply = Greeter_HelloReply() reply.message = "Bonjour, \\(request.name)!" return context.eventLoop.makeSucceededFuture(reply) }}
let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)defer { try! group.syncShutdownGracefully() }
let server = try Server.insecure(group: group) .withServiceProviders([GreeterProvider()]) .bind(host: "localhost", port: 50051) .wait()
print("Serveur démarré sur localhost:50051")try server.onClose.wait()Exemple de client en Swift (iOS/macOS)
import GRPCimport NIOimport HelloWorld
let group = PlatformSupport.makeEventLoopGroup(loopCount: 1)defer { try! group.syncShutdownGracefully() }
let channel = try GRPCChannelPool.with( target: .host("localhost", port: 50051), transportSecurity: .plaintext, eventLoopGroup: group)defe Aussi dans la bibliothèque
Journalisation en Go (Golang) : meilleures bibliothèques et solutions pour la production
Travail avec les dates en C++ : aperçu des bibliothèques de manipulation du temps
Travailler avec YAML en Java : bibliothèques SnakeYAML et Jackson