"google/protobuf/struct.proto" est-il la méthode optimale pour transmettre du JSON dynamique via GRPC ?
Utiliser google/protobuf/struct .proto peut être une méthode efficace pour transmettre des objets JSON dynamiques via GRPC.
Utilisation de google/protobuf/struct
Le google/protobuf/struct.proto fournit une structure de données à usage général pour représenter les objets JSON dans les messages Protobuf. Il comprend deux types de messages clés :
JSON dynamique
Dynamique JSON fait référence à des données non structurées ou flexibles stockées sous forme de chaîne. Si vos données suivent un schéma prédéfini, définir un type de message Protobuf personnalisé peut être plus efficace.
Fichier Proto
Votre fichier proto (User.proto) utilise google/ protobuf/struct.proto pour déclarer un message SendJsonRequest. Le champ Détails est de type Struct, permettant de transmettre des données JSON dynamiques.
Code client
Votre code client crée une instance de structpb.Struct en utilisant structpb .NewStruct(), qui convertit une map[string]interface{} en Struct objet.
Solutions alternatives
Solution d'Anuj
Cette solution est plus complexe et implique la conversion manuelle de chaque entrée de carte en un structpb.Value, nécessitant plus de code que nécessaire.
Luke's Solution
Bien que plus concise, cette solution implique toujours la conversion de map en octets puis en structpb.Struct.
Solution d'une approche différente
La solution suggérée utilise structpb.NewStruct() directement pour créer un objet Struct à partir d'une carte, éliminant ainsi le besoin de procédures intermédiaires conversion.
Conclusion
L'utilisation de google/protobuf/struct.proto peut être une option appropriée pour transmettre du JSON dynamique sur GRPC lorsque vous travaillez avec des données non structurées ou flexibles. Cependant, si vos données suivent un schéma spécifique, la définition d'un message Protobuf personnalisé peut offrir une efficacité et une sécurité de type accrues.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!