Google App Engine (GAE) suggère d'utiliser un context.Context limité à la requête HTTP pour chaque bibliothèque cliente. Cela garantit que le client est lié à la demande spécifique, fournissant des données spécifiques au contexte pour les opérations de base de données.
Approche par demande :
Dans l'exemple fourni, un nouveau client Firestore est créé dans la fonction de gestionnaire pour chaque request :
func (s *server) person(ctx context.Context, id int) { _, err := s.db.Client.Collection("people").Doc(uid).Set(ctx, p) }
Bien que cette approche garantisse que le client est isolé de la requête en cours, elle peut être inefficace et introduire une surcharge inutile, en particulier pour les requêtes de longue durée ou les opérations à haute fréquence.
Approche client globale :
Une approche alternative consiste à créer un seul client Firestore global et à le réutiliser pour plusieurs requêtes. Cependant, cela n'était pas réalisable dans l'ancien runtime Go dans GAE.
Avec l'introduction du runtime Go 1.11 pour la norme GAE, les restrictions de portée contextuelle ont été assouplies. Cela vous permet désormais d'utiliser le contexte de votre choix.
Dans le nouveau runtime standard GAE, il est recommandé de :
Initialisez le client Firestore dans la fonction main() ou init() en utilisant l'arrière-plan context :
func init() { var err error client, err = firestore.NewClient(context.Background()) }
Dans les gestionnaires de requêtes, utilisez le contexte de requête pour les appels d'API :
func handleRequest(w http.ResponseWriter, r *http.Request) { doc := client.Collection("cities").Doc("Mountain View") doc.Set(r.Context(), someData) }
En suivant ces bonnes pratiques, vous pouvez profiter des gains d'efficacité fournis en réutilisant un client Firestore global tout en conservant le contexte spécifique à la demande dans vos opérations de base de données.
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!