Biblioteca compartilhada do Azure Core para Java – versão 1.45.0
O Azure Core fornece primitivos compartilhados, abstrações e auxiliares para bibliotecas de clientes modernas do SDK do Java do Azure.
Essas bibliotecas seguem as Diretrizes de Design do SDK do Azure para Java e podem ser facilmente identificadas por nomes de pacotes que começam com com.azure
e nomes de módulo começando com azure-
, por exemplo, com.azure.storage.blobs
seriam encontrados no /sdk/storage/azure-storage-blob
diretório. Uma lista mais completa de bibliotecas de clientes usando o Azure Core pode ser encontrada aqui.
O Azure Core permite que as bibliotecas de clientes exponham a funcionalidade comum de forma consistente, para que, depois de aprender a usar essas APIs em uma biblioteca de clientes, você saiba como usá-las em outras bibliotecas de clientes.
Introdução
Pré-requisitos
- Um Java Development Kit (JDK) versão 8 ou posterior.
Incluir o pacote
Incluir o arquivo da BOM
Inclua o azure-sdk-bom em seu projeto para assumir a dependência da versão ga (disponibilidade geral) da biblioteca. No trecho a seguir, substitua o espaço reservado {bom_version_to_target} pelo número de versão. Para saber mais sobre o BOM, consulte o BOM README do SDK do AZURE.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-sdk-bom</artifactId>
<version>{bom_version_to_target}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Depois, inclua a dependência direta na seção de dependências sem a marca de versão. Normalmente, você não precisará instalar ou depender do Azure Core, em vez disso, ele será baixado transitivamente pela ferramenta de build quando você depender das bibliotecas de clientes que a usam.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-core</artifactId>
</dependency>
</dependencies>
Incluir dependência direta
Se você quiser assumir a dependência de uma versão específica da biblioteca que não está presente no BOM, adicione a dependência direta ao seu projeto da seguinte maneira.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-core</artifactId>
<version>1.45.0</version>
</dependency>
Principais conceitos
Os principais conceitos do Azure Core (e, portanto, todas as bibliotecas de clientes do Azure usando o Azure Core) incluem:
- Configurando clientes de serviço, por exemplo, configurando repetições, registro em log etc. (
HttpTrait<T>
,ConfigurationTrait<T>
etc.) - Acessando detalhes da resposta HTTP (
Response<T>
). - Chamando operações de longa execução (
PollerFlux<T>
). - Paginação e fluxos assíncronos (
ContinuablePagedFlux<T>
). - Exceções para relatar erros de solicitações de serviço de forma consistente.
- Abstrações para representar credenciais do SDK do Azure.
- Tempos limite de operação
Eles serão introduzidos por meio dos exemplos apresentados abaixo.
Exemplos
Acessando detalhes de resposta HTTP usando Response<T>
Os clientes de serviço têm métodos que chamam os serviços do Azure, chamamos esses métodos de serviço de métodos.
Os métodos de serviço podem retornar um tipo Response<T>
compartilhado do Azure Core . Esse tipo fornece acesso ao resultado desserializado da chamada de serviço e aos detalhes da resposta HTTP retornada do servidor.
Pipelines HTTP com HttpPipeline
HttpPipeline
é um constructo que contém uma lista das HttpPipelinePolicy
quais são aplicadas a uma solicitação sequencialmente para prepará-la sendo enviada por um HttpClient
.
Hierarquia de exceção com AzureException
AzureException
é a exceção raiz na hierarquia usada no Azure Core. Exceções adicionais como HttpRequestException
e HttpResponseException
são usadas para reduzir o escopo dos motivos de exceção.
Paginação com ContinuablePagedFlux<T>
ContinuablePageFlux
gerencia o envio de uma solicitação de página inicial para um serviço e a recuperação de páginas adicionais à medida que o consumidor solicita mais dados até que o consumidor termine o processamento ou todas as páginas tenham sido consumidas.
Operações de execução prolongada com PollerFlux<T>
PollerFlux
gerencia o envio de uma solicitação de serviço inicial e a solicitação de atualizações de processamento em um intervalo de correção até que a sondagem seja cancelada ou atinja um estado terminal.
Configurando construtores
Os construtores são usados para criar clientes de serviço e algumas TokenCredential
implementações. Eles podem ser configurados com uma variedade de opções, incluindo HttpPipeline
e HttpClient
para clientes baseados em HTTP e opções mais gerais, como Configuration
eendpoint
. Para permitir uma integração mais simples em estruturas como o Spring e permitir que métodos genéricos sejam usados para todos os construtores azure-core
, fornece um conjunto de interfaces que podem ser implementadas para fornecer a funcionalidade necessária.
HttpTrait
HttpTrait<T>
contém métodos para definir configurações de chave para clientes baseados em HTTP. Essa interface permitirá que você configure o HttpClient
, HttpPipeline
, HttpPipelinePolicy
s, RetryOptions
, HttpLogOptions
e ClientOptions
(preferencialmente HttpClientOptions
, pois é mais específico para clientes de serviço baseados em HTTP).
Para construtores que expõem HttpTrait<T>
, se uma HttpPipeline
ou HttpClient
não estiver definida, uma instância padrão será criada com base nas configurações de classpath e na ClientOptions
baseada no construtor. Isso poderá causar confusão se você estiver esperando um comportamento específico para seu cliente, como o uso de um proxy que não foi carregado do ambiente. Para evitar isso, é recomendável sempre definir o HttpPipeline
ou HttpClient
em todos os clientes se você estiver criando se suas configurações não forem baseadas no ambiente que executa o aplicativo.
Características de credencial
O Azure Core fornece credenciais diferentes para autenticação com os serviços do Azure. Cada tipo de credencial tem uma característica correspondente que pode ser implementada para fornecer a credencial ao construtor de clientes. A tabela a seguir lista os traços de credencial e o tipo de credencial correspondente.
Característica de credencial | Tipo de Credencial |
---|---|
AzureKeyCredentialTrait |
AzureKeyCredential |
AzureNamedKeyCredentialTrait |
AzureNamedKeyCredential |
AzureSasCredentialTrait |
AzureSasCredential |
ConnectionStringCredentialTrait |
String (não há nenhum tipo formal para cadeias de conexão) |
KeyCredentialTrait |
KeyCredential |
TokenCredentialTrait |
TokenCredential |
ConfigurationTrait
ConfigurationTrait<T>
permite a configuração Configuration
em clientes de serviço. Configuration
pode ser usado para passar um conjunto de comportamentos de runtime para o construtor de clientes, como como ProxyOptions
são carregados do ambiente, passando implicitamente credenciais para alguns construtores de clientes que dão suporte a ele e muito mais.
EndpointTrait
EndpointTrait<T>
permite definir o ponto de extremidade de serviço em clientes de serviço.
Tempos limite de operação
Os SDKs do Azure fornecem algumas maneiras consistentes de configurar tempos limite em chamadas à API. Cada tempo limite afeta um escopo diferente dos SDKs do Azure e do aplicativo de chamada.
Tempos limite de HTTP
Os tempos limite HTTP são o nível mais baixo de tempo limite que os SDKs do Azure fornecem. Esses tempos limite podem ser configurados ao criar HttpClient
s ou usar HttpClientOptions
ao criar clientes de serviço sem configurar um HttpClient
por conta própria. A tabela a seguir lista o tempo limite HTTP, o método correspondente HttpClientOptions
que pode ser usado para defini-lo, a variável de ambiente para controlar o valor padrão, o valor padrão se o valor do ambiente não estiver definido e uma breve descrição dos efeitos do tempo limite.
Tempo limite HTTP | HttpClientOptions Método |
Variável de ambiente | Valor padrão | Descrição |
---|---|---|---|---|
Connect Timeout | setConnectTimeout(Duration) |
AZURE_REQUEST_CONNECT_TIMEOUT | 10 segundos | A quantidade de tempo para que uma conexão seja estabelecida antes de atingir o tempo limite. |
Tempo limite de gravação | setWriteTimeout(Duration) |
AZURE_REQUEST_WRITE_TIMEOUT | 60 segundos | A quantidade de tempo entre cada gravação de dados de solicitação na rede antes de atingir o tempo limite. |
Tempo limite de resposta | setResponseTimeout(Duration) |
AZURE_REQUEST_RESPONSE_TIMEOUT | 60 segundos | A quantidade de tempo entre terminar de enviar a solicitação para receber os primeiros bytes de resposta antes de atingir o tempo limite. |
Tempo limite de leitura | setReadTimeout(Duration) |
AZURE_REQUEST_READ_TIMEOUT | 60 segundos | A quantidade de tempo entre cada dado de resposta lido da rede antes de atingir o tempo limite. |
Como esses tempos limite estão mais próximos da rede, se eles dispararem, eles serão propagados novamente por meio do HttpPipeline
e geralmente deverão ser repetidos pelo RetryPolicy
.
Tempos limite de HttpPipeline
Os tempos limite do HttpPipeline são o próximo nível de tempo limite que os SDKs do Azure fornecem. Esses tempos limite são configurados usando um HttpPipelinePolicy
e configurando um tempo limite usando Mono.timeout
para solicitações assíncronas ou com um ExecutorService
tempo limite get(long, TimeUnit)
para solicitações síncronas.
Dependendo do local dentro do HttpPipeline
, esses tempos limite podem ser capturados pelo RetryPolicy
e repetidos.
Se a política de tempo limite for PER_RETRY
(HttpPipelinePolicy.getPipelinePosition()
) o tempo limite será capturado pelo RetryPolicy
, pois ele será posicionado após o RetryPolicy
, portanto, em seu escopo de captura, se ele estiver PER_CALL
repetindo a solicitação precisará ser tratado pela lógica do aplicativo.
Tempos limite do cliente de serviço
Os tempos limite do cliente de serviço são o nível mais alto de tempo limite fornecido pelos SDKs do Azure. Esses tempos limite são configurados passando Duration timeout
métodos de serviço síncronos que dão suporte a tempos limite ou usando Mono.timeout
ou Flux.timeout
em métodos de serviço assíncronos.
Como esses tempos limite estão na própria chamada à API, eles não podem ser capturados por nenhum mecanismo de repetição nos SDKs do Azure e devem ser tratados pela lógica do aplicativo.
Próximas etapas
Introdução às bibliotecas do Azure criadas usando o Azure Core.
Solução de problemas
Se você encontrar bugs, registre problemas por meio de Problemas do GitHub ou check-out do StackOverflow para o SDK do Java do Azure.
Habilitando o registro em log
Os SDKs do Azure para Java fornecem uma história de log consistente para ajudar a solucionar problemas de erros do aplicativo e agilizar a resolução. Os logs produzidos capturam o fluxo de um aplicativo antes que acessem o estado do terminal para ajudar a localizar o problema raiz. Veja a documentação de log para obter diretrizes sobre como habilitar o registro em log.
Registro em log de solicitação e resposta HTTP
O log de solicitação e resposta HTTP pode ser habilitado definindo HttpLogDetailLevel
no HttpLogOptions
usado para criar um cliente de serviço baseado em HTTP ou definindo a variável de ambiente ou a propriedade AZURE_HTTP_LOG_DETAIL_LEVEL
do sistema .
A tabela a seguir exibe as opções válidas para AZURE_HTTP_LOG_DETAIL_LEVEL
e a HttpLogDetailLevel
que ela se correlaciona (as opções válidas não diferenciam maiúsculas de minúsculas):
AZURE_HTTP_LOG_DETAIL_LEVEL valor |
HttpLogDetailLevel enum |
---|---|
basic |
HttpLogDetailLevel.BASIC |
headers |
HttpLogDetailLevel.HEADERS |
body |
HttpLogDetailLevel.BODY |
body_and_headers |
HttpLogDetailLevel.BODY_AND_HEADERS |
bodyandheaders |
HttpLogDetailLevel.BODY_AND_HEADERS |
Todos os outros valores, ou valores sem suporte, resultam em HttpLogDetailLevel.NONE
, ou desabilitado solicitação HTTP e log de resposta. O registro em log deve ser habilitado para registrar solicitações e respostas HTTP. O registro em log de cabeçalhos HTTP requer verbose
que o registro em log seja habilitado. A tabela a seguir explica o que o registro em log está habilitado para cada HttpLogDetailLevel
:
HttpLogDetailLevel valor |
Registro em log ativado |
---|---|
HttpLogDetailLevel.NONE |
Nenhuma solicitação HTTP ou registro em log de resposta |
HttpLogDetailLevel.BASIC |
Método de solicitação HTTP, código de status de resposta e URL de solicitação e resposta |
HttpLogDetailLevel.HEADERS |
Todos os cabeçalhos de HttpLogDetailLevel.BASIC solicitação e resposta e se o nível de log for verbose |
HttpLogDetailLevel.BODY |
Todo o corpo da solicitação e da resposta se ele tiver menos de HttpLogDetailLevel.BASIC 10 KB de tamanho |
HttpLogDetailLevel.BODY_AND_HEADERS |
Tudo de HttpLogDetailLevel.HEADERS e HttpLogDetailLevel.BODY |
Participante
Para obter detalhes sobre como contribuir para esse repositório, consulte o guia de contribuição.
- Bifurcar
- Criar seu branch de recurso (
git checkout -b my-new-feature
) - Confirmar suas alterações (
git commit -am 'Add some feature'
) - Enviar por push para o branch (
git push origin my-new-feature
) - Criar nova solicitação de pull