Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le linee guida per la progettazione del linguaggio di Azure SDK sono standard completi che garantiscono coerenza, prevedibilità e facilità d'uso in tutti gli SDK di Azure. Queste linee guida consentono agli sviluppatori di lavorare in modo efficiente con i servizi di Azure fornendo modelli e comportamenti familiari in diversi servizi e linguaggi di programmazione.
Le linee guida sono costituite da due categorie:
- Linee guida generali: principi di base applicabili a tutti gli SDK di Azure indipendentemente dal linguaggio di programmazione.
- linee guidaLanguage-Specific: dettagli di implementazione ottimizzati per ogni linguaggio supportato, tra cui Python, .NET, Java, TypeScript e molti altri ancora. Per altre informazioni, vedere sommario a partire dalla pagina Linee guida generali: Introduzione .
Queste linee guida vengono sviluppate apertamente su GitHub, che consente la revisione e il contributo della community.
Principi di progettazione generali
Tutti gli SDK di Azure seguono questi principi fondamentali:
| Principio | Description |
|---|---|
| Utilizzo idiotico | Gli SDK seguono convenzioni e modelli specifici del linguaggio. |
| Coerenza | I comportamenti sono uniformi in diversi servizi di Azure. |
| Semplicità | Le attività comuni richiedono codice minimo. |
| Divulgazione progressiva | Le funzionalità avanzate sono disponibili, ma non complicano l'utilizzo di base. |
| Robustezza | La gestione è incorporata per errori, ritentativi e timeout. |
Linee guida specifiche di Python
Il resto di questo documento è incentrato sulle linee guida di Python.
Convenzioni di denominazione
Gli SDK di Azure per Python seguono le convenzioni di denominazione Standard di Python:
Metodi: usare
snake_case.list_containers() get_secret() create_database()Variabili: usare
snake_case.connection_string = "..." retry_count = 3Classi: usare
PascalCase.BlobServiceClient SecretClient CosmosClientCostanti: usare
UPPER_CASE.DEFAULT_CHUNK_SIZE MAX_RETRIES
Struttura del pacchetto
I pacchetti di Azure SDK seguono una struttura coerente:
azure-<service>-<feature>
├── azure/
│ └── <service>/
│ ├── __init__.py
│ ├── _client.py
│ ├── _models.py
│ └── aio/ # Async implementations
│ └── __init__.py
Creazione di istanze client
I client forniscono più metodi di creazione di istanze:
from azure.storage.blob import BlobServiceClient
from azure.identity import DefaultAzureCredential
# Note: Do not use connection string if you can possibly avoid it!
# Using account URL and credential
credential = DefaultAzureCredential()
client = BlobServiceClient(account_url="https://account.blob.core.windows.net",
credential=credential)
Authentication
Gli SDK di Azure usano modelli di autenticazione coerenti:
from azure.identity import DefaultAzureCredential, ClientSecretCredential
# Default credential chain
credential = DefaultAzureCredential()
# Explicit credential
credential = ClientSecretCredential(
tenant_id="tenant-id",
client_id="client-id",
client_secret="secret"
)
Gestioni contesti
La maggior parte dei client Azure SDK implementa protocolli di gestione del contesto per la pulizia automatica delle risorse:
from azure.storage.blob import BlobServiceClient
# Automatic cleanup with context manager
with BlobServiceClient.from_connection_string(conn_str) as client:
container_client = client.get_container_client("mycontainer")
blob_list = container_client.list_blobs()
Annotazioni
Anche se la maggior parte dei client supporta i gestori di contesto, verificare la documentazione specifica del client per la disponibilità.
Operazioni asincrone
I client asincroni vengono forniti in moduli separati .aio :
from azure.storage.blob.aio import BlobServiceClient
import asyncio
async def list_blobs_async():
async with BlobServiceClient.from_connection_string(conn_str) as client:
container_client = client.get_container_client("mycontainer")
async for blob in container_client.list_blobs():
print(blob.name)
# Run async function
asyncio.run(list_blobs_async())
Operazioni a esecuzione prolungata
Le operazioni a esecuzione prolungata usano il prefisso begin_ e restituiscono oggetti poller:
from azure.storage.blob import BlobServiceClient
client = BlobServiceClient.from_connection_string(conn_str)
container_client = client.get_container_client("mycontainer")
# Start long-running operation
poller = container_client.begin_copy_blob_from_url(source_url)
# Wait for completion
result = poller.result()
# Or check status
if poller.done():
result = poller.result()
Impaginazione
Le operazioni di elenco restituiscono iterabili che gestiscono automaticamente la paginazione:
from azure.storage.blob import BlobServiceClient
client = BlobServiceClient.from_connection_string(conn_str)
# Automatic pagination
for container in client.list_containers():
print(container.name)
# Manual pagination control
containers = client.list_containers(results_per_page=10).by_page()
for page in containers:
for container in page:
print(container.name)
Tipi restituiti
I metodi restituiscono oggetti modello fortemente tipizzati anziché dizionari:
from azure.keyvault.secrets import SecretClient
client = SecretClient(vault_url="...", credential=credential)
# Returns KeyVaultSecret object, not dict
secret = client.get_secret("my-secret")
print(secret.value)
print(secret.properties.created_on)
Gestione degli errori
Le eccezioni di Azure SDK ereditano da AzureError e forniscono tipi di eccezione specifici:
from azure.core.exceptions import (
AzureError,
ResourceNotFoundError,
ResourceExistsError,
ClientAuthenticationError,
HttpResponseError
)
try:
blob_client.download_blob()
except ResourceNotFoundError:
# Handle missing resource
print("Blob not found")
except ClientAuthenticationError:
# Handle authentication failure
print("Authentication failed")
except HttpResponseError as e:
# Handle HTTP errors
print(f"HTTP {e.status_code}: {e.message}")
except AzureError as e:
# Handle any other Azure SDK error
print(f"Azure SDK error: {e}")
Opzioni di configurazione
I client accettano la configurazione tramite argomenti di parole chiave:
from azure.storage.blob import BlobServiceClient
client = BlobServiceClient(
account_url="...",
credential=credential,
# Configuration options
max_single_put_size=64 * 1024 * 1024,
max_block_size=4 * 1024 * 1024,
retry_total=3,
logging_enable=True
)
Modelli SDK comuni
Gerarchia client del servizio
Gli SDK di Azure seguono in genere una gerarchia a tre livelli:
Client del servizio: punto di ingresso per operazioni di servizio:
service_client = BlobServiceClient(...)Client delle risorse: Operazioni su risorse specifiche:
container_client = service_client.get_container_client("container")Metodi operativi: azioni sulle risorse:
blob_client = container_client.get_blob_client("blob.txt") blob_client.upload_blob(data)
Denominazione coerente dei metodi
I nomi dei metodi seguono modelli prevedibili:
| Operation | Modello di metodo | Example |
|---|---|---|
| Creazione | create_<resource> |
create_container() |
| Leggi | get_<resource> |
get_blob() |
| Update | update_<resource> |
update_secret() |
| Delete | delete_<resource> |
delete_container() |
| Elenco | list_<resources> |
list_blobs() |
| Exists | exists() |
blob_client.exists() |
Usare gli SDK di Azure
L'esempio seguente illustra come le linee guida di progettazione creano coerenza tra diversi servizi di Azure:
from azure.storage.blob import BlobServiceClient
from azure.keyvault.secrets import SecretClient
from azure.cosmos import CosmosClient
from azure.identity import DefaultAzureCredential
# Consistent authentication
credential = DefaultAzureCredential()
# Consistent client instantiation
blob_service = BlobServiceClient(
account_url="https://account.blob.core.windows.net",
credential=credential
)
secret_client = SecretClient(
vault_url="https://vault.vault.azure.net",
credential=credential
)
cosmos_client = CosmosClient(
url="https://account.documents.azure.com",
credential=credential
)
# Consistent method patterns
containers = blob_service.list_containers()
secrets = secret_client.list_properties_of_secrets()
databases = cosmos_client.list_databases()
# Consistent error handling
from azure.core.exceptions import ResourceNotFoundError
try:
blob_service.get_container_client("container").get_container_properties()
secret_client.get_secret("secret")
cosmos_client.get_database_client("database").read()
except ResourceNotFoundError as e:
print(f"Resource not found: {e}")
Contribuire agli SDK di Azure
Quando si estende o si contribuisce agli SDK di Azure:
- Seguire i linguaggi Python: Usare modelli e convenzioni pythonici.
- Mantenere la coerenza: Allinearsi ai modelli SDK esistenti.
- Scrivere test completi: Includere i test unitari e i test di integrazione.
- Documentare in modo completo: Fornisci docstring ed esempi.
- Rivedere le linee guida: Consultare la Guida ai contributi di Azure SDK.
Ecco un esempio di implementazione di un metodo client personalizzato che segue le linee guida per la progettazione del linguaggio:
def list_items_with_prefix(self, prefix: str, **kwargs) -> ItemPaged[ItemProperties]:
"""List items that start with the specified prefix.
:param str prefix: The prefix to filter items
:return: An iterable of ItemProperties
:rtype: ~azure.core.paging.ItemPaged[ItemProperties]
:example:
items = client.list_items_with_prefix("test-")
for item in items:
print(item.name)
"""
return self.list_items(name_starts_with=prefix, **kwargs)
Contenuti correlati
- Esaminare le linee guida complete per la progettazione di Azure SDK.
- Leggi la pagina Versioni di Azure SDK.