Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Azure SDK-Sprachdesignrichtlinien sind umfassende Standards, die Konsistenz, Vorhersagbarkeit und Benutzerfreundlichkeit für alle Azure SDKs gewährleisten. Diese Richtlinien helfen Entwicklern, effizient mit Azure-Diensten zu arbeiten, indem sie vertraute Muster und Verhaltensweisen in verschiedenen Diensten und Programmiersprachen bereitstellen.
Die Richtlinien bestehen aus zwei Kategorien:
- Allgemeine Richtlinien: Kernprinzipien, die für alle Azure-SDKs gelten, unabhängig von der Programmiersprache.
- Language-Specific Richtlinien: Implementierungsdetails, die für jede unterstützte Sprache optimiert sind, einschließlich Python, .NET, Java, TypeScript und viele mehr. Weitere Informationen finden Sie im Inhaltsverzeichnis beginnend auf der Seite Allgemeine Richtlinien: Einführung.
Diese Richtlinien werden offen auf GitHub entwickelt, was die Überprüfung und den Beitrag der Community ermöglicht.
Allgemeine Designprinzipien
Alle Azure-SDKs folgen den folgenden Grundprinzipien:
| Prinzip | Description |
|---|---|
| Idiomatische Verwendung | SDKs folgen sprachspezifischen Konventionen und Mustern. |
| Konsistenz | Verhaltensweisen sind in verschiedenen Azure-Diensten einheitlich. |
| Einfachheit | Allgemeine Aufgaben erfordern minimalen Code. |
| Progressive Offenlegung | Erweiterte Features sind verfügbar, erschweren jedoch keine grundlegende Verwendung. |
| Robustheit | Die Verarbeitung ist für Fehler, Wiederholungen und Timeouts integriert. |
Python-spezifische Richtlinien
Der Rest dieses Dokuments konzentriert sich auf die Python-Richtlinien.
Benennungskonventionen
Azure SDKs für Python folgen standardmäßigen Python-Benennungskonventionen:
Methoden: Verwenden Sie
snake_case.list_containers() get_secret() create_database()Variablen: Verwenden Sie
snake_case.connection_string = "..." retry_count = 3Klassen: Verwenden Sie
PascalCase.BlobServiceClient SecretClient CosmosClientKonstanten: Verwenden Sie
UPPER_CASE.DEFAULT_CHUNK_SIZE MAX_RETRIES
Paketstruktur
Azure SDK-Pakete folgen einer konsistenten Struktur:
azure-<service>-<feature>
├── azure/
│ └── <service>/
│ ├── __init__.py
│ ├── _client.py
│ ├── _models.py
│ └── aio/ # Async implementations
│ └── __init__.py
Clientinstanziierung
Clients bieten mehrere Instanziierungsmethoden:
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)
Authentifizierung
Azure SDKs verwenden konsistente Authentifizierungsmuster:
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"
)
Kontextmanager
Die meisten Azure SDK-Clients implementieren Kontext-Manager-Protokolle für die automatische Ressourcenbereinigung:
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()
Hinweis
Obwohl die meisten Clients Kontextmanager unterstützen, überprüfen Sie die spezifische Clientdokumentation auf Verfügbarkeit.
Asynchrone Vorgänge
Asynchrone Clients werden in separaten .aio Modulen bereitgestellt:
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())
Lange ausgeführte Vorgänge
Lang ausgeführte Vorgänge verwenden das begin_-Präfix und geben Poller-Objekte zurück.
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()
Paginierung
Listenvorgänge geben Iterables zurück, die die Paginierung automatisch behandeln:
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)
Rückgabetypen
Methoden geben stark typierte Modellobjekte anstelle von Wörterbüchern zurück:
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)
Fehlerbehandlung
Azure SDK-Ausnahmen erben von AzureError und bieten spezifische Ausnahmetypen an:
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}")
Konfigurationsoptionen
Clients akzeptieren die Konfiguration über Schlüsselwortargumente:
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
)
Allgemeine SDK-Muster
Dienstclienthierarchie
Azure SDKs folgen in der Regel einer Hierarchie mit drei Ebenen:
Dienstclient: Einstiegspunkt für Dienstoperationen:
service_client = BlobServiceClient(...)Ressourcenclient: Vorgänge für bestimmte Ressourcen:
container_client = service_client.get_container_client("container")Vorgangsmethoden: Aktionen für Ressourcen:
blob_client = container_client.get_blob_client("blob.txt") blob_client.upload_blob(data)
Einheitliche Methodenbenennung
Methodennamen folgen vorhersagbaren Mustern:
| Operation | Methodenmuster | Example |
|---|---|---|
| Create | create_<resource> |
create_container() |
| Lesen Sie | get_<resource> |
get_blob() |
| Update | update_<resource> |
update_secret() |
| Löschen | delete_<resource> |
delete_container() |
| List | list_<resources> |
list_blobs() |
| Existiert | exists() |
blob_client.exists() |
Arbeiten mit Azure SDKs
Im folgenden Beispiel wird veranschaulicht, wie Entwurfsrichtlinien Konsistenz in verschiedenen Azure-Diensten schaffen:
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}")
Mitwirken zu Azure SDKs
Wenn Sie Azure SDKs erweitern oder mitwirken:
- Folgen Sie Python-Idiome: Verwenden Sie Python-Muster und -Konventionen.
- Konsistenz beibehalten: Richten Sie sich an vorhandenen SDK-Mustern aus.
- Schreiben Sie umfassende Tests: Schließen Sie Komponenten- und Integrationstests ein.
- Dokumentieren Sie gründlich: Stellen Sie Docstrings und Beispiele bereit.
- Richtlinien überprüfen: Lesen Sie den Azure SDK-Beitragsleitfaden.
Nachfolgend finden Sie ein Beispiel für die Implementierung einer benutzerdefinierten Clientmethode, die den Richtlinien für das Sprachdesign folgt:
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)
Verwandte Inhalte
- Überprüfen Sie die vollständigen Azure SDK-Entwurfsrichtlinien.
- Lesen Sie die Seite "Azure SDK-Versionen".