gRPC pour Swift (iOS/macOS) : bibliothèques, configuration et exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

gRPC pour Swift (iOS/macOS) : bibliothèques et exemples

\n

gRPC 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\n

Bibliothèques et outils principaux

\n

Pour 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-swift et protoc-gen-swift sont requis.
  • \n
  • Swift Package Manager (SPM) — le principal moyen d'intégrer les dépendances.
  • \n
\n\n

Installation et configuration

\n

Pour commencer, ajoutez les dépendances dans Package.swift :

\n
// 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\n

Il est également nécessaire d'installer protoc et les plugins via Homebrew :

\n
brew install protobuf\nbrew install grpc-swift\nbrew install swift-protobuf
\n\n

Exemple de fichier .proto

\n

Créons un service simple pour saluer. Fichier hello.proto :

\n
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\n

Générez le code Swift avec la commande :

\n
protoc --swift_out=. --grpc-swift_out=. hello.proto
\n\n

En conséquence, les fichiers hello.pb.swift et hello.grpc.swift apparaîtront.

\n\n

Partie serveur en Swift

\n

Créons un serveur gRPC qui traitera les requêtes SayHello :

\n
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\n

Partie cliente en Swift (avec async/await)

\n

Pour 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.

\n
import 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\                    

Recommendations