API Capabilities para serviços agrupados legados

Com a API Capabilities, é possível detectar interrupções e uma inatividade programada de determinados recursos da API. É possível usar essa API para reduzir a inatividade no aplicativo detectando quando um recurso está indisponível e pode ser ignorado. Para ver o conteúdo do pacote capability, consulte as referências do pacote capability. .

Por exemplo, se você usa a Datastore API, pode usar a Capabilities API para detectar a indisponibilidade dela e reportar um erro ao usuário:

func handler(w http.ResponseWriter, r *http.Request) {
	ctx := appengine.NewContext(r)
	// Check if the Datastore API is available
	if !capability.Enabled(ctx, "datastore_v3", "*") {
		http.Error(w, "This service is currently unavailable.", 503)
		return
	}
	// do Datastore lookup ...
}

Você pode consultar separadamente a disponibilidade de leituras e gravações do Datastore. O exemplo a seguir mostra como detectar a disponibilidade das gravações do Datastore e, durante a inatividade, fornecer uma mensagem aos usuários:

func checkDatastoreMode(w http.ResponseWriter, r *http.Request) {
	ctx := appengine.NewContext(r)
	// Check if the Datastore service is in read-only mode.
	if !capability.Enabled(ctx, "datastore_v3", "write") {
		// Datastore is in read-only mode.
	}

}

Como usar a API Capabilities em Go 1.11

A função capability.Enabled retornará "true" se a API e o recurso fornecidos estiverem disponíveis. Você precisa passar um nome de recurso (como "write") ou o caractere curinga "*" para consultar todos os recursos da API.

Recursos compatíveis

No momento, a API oferece suporte aos seguintes recursos:

Recurso Argumentos para Enabled
Disponibilidade do blobstore "blobstore", "*"
Leituras do Datastore "datastore_v3", "*"
Gravações do Datastore "datastore_v3", "write"
Disponibilidade do serviço de e-mail "mail", "*"
Disponibilidade do serviço de memcache "memcache", "*"
Disponibilidade do serviço de fila de tarefas "taskqueue", "*"
Disponibilidade do serviço de Busca de URL "urlfetch", "*"