Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Riktlinjer för språkdesign i Azure SDK är omfattande standarder som säkerställer konsekvens, förutsägbarhet och användarvänlighet för alla Azure SDK:er. De här riktlinjerna hjälper utvecklare att arbeta effektivt med Azure-tjänster genom att tillhandahålla välbekanta mönster och beteenden i olika tjänster och programmeringsspråk.
Riktlinjerna består av två kategorier:
- Allmänna riktlinjer: Grundläggande principer som gäller för alla Azure SDK:er oavsett programmeringsspråk.
- Language-Specific Riktlinjer: Implementeringsinformation optimerad för varje språk som stöds, inklusive Python, .NET, Java, TypeScript och många fler. Mer information finns i innehållsförteckningen som börjar på sidan Allmänna riktlinjer: Introduktion .
Dessa riktlinjer utvecklas öppet på GitHub, vilket möjliggör communitygranskning och bidrag.
Allmänna designprinciper
Alla Azure SDK:er följer dessa grundläggande principer:
| Princip | Description |
|---|---|
| Idiomatisk användning | SDK:er följer språkspecifika konventioner och mönster. |
| Consistency | Beteenden är enhetliga för olika Azure-tjänster. |
| Enkelhet | Vanliga uppgifter kräver minimal kod. |
| Progressivt avslöjande | Avancerade funktioner är tillgängliga men komplicerar inte grundläggande användning. |
| Robusthet | Hantering är inbyggd för fel, återförsök och tidsbegränsningar. |
Python-specifika riktlinjer
Resten av det här dokumentet fokuserar på Python-riktlinjerna.
Namngivningskonventioner
Azure SDK:er för Python följer vanliga Namngivningskonventioner för Python:
Metoder: Använd
snake_case.list_containers() get_secret() create_database()Variabler: Använd
snake_case.connection_string = "..." retry_count = 3Klasser: Använd
PascalCase.BlobServiceClient SecretClient CosmosClientKonstanter: Använd
UPPER_CASE.DEFAULT_CHUNK_SIZE MAX_RETRIES
Paketstruktur
Azure SDK-paket följer en konsekvent struktur:
azure-<service>-<feature>
├── azure/
│ └── <service>/
│ ├── __init__.py
│ ├── _client.py
│ ├── _models.py
│ └── aio/ # Async implementations
│ └── __init__.py
Klient-instansiering
Klienter tillhandahåller flera instansieringsmetoder:
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
Azure SDK:er använder konsekventa autentiseringsmönster:
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"
)
Kontexthanterare
De flesta Azure SDK-klienter implementerar context manager-protokoll för automatisk resursrensning:
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()
Anmärkning
Även om de flesta klienter har stöd för kontexthanterare kontrollerar du specifik klientdokumentation för tillgänglighet.
Asynkrona åtgärder
Asynkrona klienter tillhandahålls i separata .aio moduler:
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())
Tidskrävande åtgärder
Långvariga åtgärder använder prefixet begin_ och returnerar pollerobjekt:
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()
Paginering
Liståtgärder returnerar iterabler som hanterar sidnumrering automatiskt:
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)
Returtyper
Metoder returnerar starkt typerade modellobjekt i stället för ordlistor:
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)
Felhantering
Azure SDK-undantag ärver från AzureError och tillhandahåller specifika undantagstyper:
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}")
Konfigurationsalternativ
Klienter accepterar konfiguration via nyckelordsargument:
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
)
Vanliga SDK-mönster
Tjänstklienthierarki
Azure SDK:er följer vanligtvis en hierarki på tre nivåer:
Tjänstklient: Startpunkt för tjänståtgärder:
service_client = BlobServiceClient(...)Resursklient: Åtgärder för specifika resurser:
container_client = service_client.get_container_client("container")Åtgärdsmetoder: Åtgärder för resurser:
blob_client = container_client.get_blob_client("blob.txt") blob_client.upload_blob(data)
Namngivning av konsekvent metod
Metodnamn följer förutsägbara mönster:
| Verksamhet | Metodmönster | Example |
|---|---|---|
| Create | create_<resource> |
create_container() |
| Läs | get_<resource> |
get_blob() |
| Update | update_<resource> |
update_secret() |
| Ta bort | delete_<resource> |
delete_container() |
| List | list_<resources> |
list_blobs() |
| Exists | exists() |
blob_client.exists() |
Arbeta med Azure SDK:er
I följande exempel visas hur designriktlinjer skapar konsekvens mellan olika Azure-tjänster:
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}")
Bidra till Azure SDK:er
När du utökar eller bidrar till Azure SDK:er:
- Följ Python-idiom: Använd Python-mönster och -konventioner.
- Bibehåll konsekvens: Justera med befintliga SDK-mönster.
- Skriva omfattande tester: Inkludera enhets- och integreringstester.
- Dokumentera noggrant: Tillhandahåll docstrings och ge exempel.
- Granska riktlinjer: Läs bidragsguiden för Azure SDK.
Här är ett exempel på hur du implementerar en anpassad klientmetod som följer riktlinjerna för språkdesign:
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)
Relaterat innehåll
- Granska de fullständiga designriktlinjerna för Azure SDK.
- Läs på sidan för Azure SDK-versioner.