Client Firestore par requête dans Google App Engine
La question tourne autour de l'approche appropriée pour gérer les clients Firestore dans Google App Engine (GAE ). Le problème vient de l'exigence de GAE pour les bibliothèques clientes d'utiliser un contexte. Le contexte est limité à une requête HTTP.
Le problème
Traditionnellement, les clients Firestore sont créés dans le de la manière suivante :
type server struct { db *firestore.Client } func main() { s := &server{db: NewFirestoreClient()} // Setup Router http.HandleFunc("/people", s.peopleHandler()) // Starts the server to receive requests appengine.Main() }
Cependant, cette approche entre en conflit avec l'exigence de GAE en matière de contexte. Le contexte doit hériter de la portée de la demande.
La solution
La solution dans le nouveau runtime Go 1.11 de GAE consiste à réutiliser l'instance firestore.Client pour plusieurs invocations. Cela n'était pas possible dans l'ancien runtime Go, d'où la nécessité de créer un nouveau client par requête.
Implémentation
Dans le runtime Go 1.11, vous pouvez initialiser le client dans main() ou init().
package main var client *firestore.Client func init() { var err error client, err = firestore.NewClient(context.Background()) // handle errors as needed } func handleRequest(w http.ResponseWriter, r *http.Request) { doc := client.Collection("cities").Doc("Mountain View") doc.Set(r.Context(), someData) // rest of the handler logic }
En utilisant le contexte de requête dans les fonctions de gestionnaire, vous pouvez éliminer le besoin de transmettre la variable ctx de main aux gestionnaires, simplifier l'injection de dépendances et améliorer clarté du code.
Ressources
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!