Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Рекомендации по проектированию языков azure SDK — это комплексные стандарты, обеспечивающие согласованность, прогнозируемость и простоту использования во всех пакетах SDK Azure. Эти рекомендации помогают разработчикам эффективно работать со службами Azure, предоставляя знакомые шаблоны и поведение в разных службах и языках программирования.
Рекомендации состоят из двух категорий:
- Общие рекомендации. Основные принципы, которые применяются ко всем пакетам SDK Azure независимо от языка программирования.
- Руководства, специфичные для языков: Детали реализации оптимизированы для каждого поддерживаемого языка, включая Python, .NET, Java, TypeScript и многое другое. Дополнительные сведения см. в статье "Оглавление" на странице "Общие рекомендации: введение ".
Эти рекомендации разработаны открыто на сайте GitHub, что позволяет просматривать и внести вклад сообщества.
Общие принципы проектирования
Все пакеты SDK Azure следуют этим основным принципам:
| Принцип | Description |
|---|---|
| Идиоматическая использование | Пакеты SDK соответствуют соглашениям и шаблонам, зависящим от языка. |
| Согласованность | Поведение единообразно в разных службах Azure. |
| Простота | Для распространенных задач требуется минимальный код. |
| Прогрессивное раскрытие информации | Дополнительные функции доступны, но не усложняют базовое использование. |
| Робастность | Встроена поддержка для обработки ошибок, повторных попыток и тайм-аутов. |
Рекомендации, относящиеся к Python
Остальная часть этого документа посвящена рекомендациям Python.
Соглашения об именах
Пакеты SDK Azure для Python соответствуют стандартным соглашениям об именовании Python:
Методы: использование
snake_case.list_containers() get_secret() create_database()Переменные: используйте
snake_case.connection_string = "..." retry_count = 3Классы: Используйте
PascalCase.BlobServiceClient SecretClient CosmosClientКонстанты: используйте
UPPER_CASE.DEFAULT_CHUNK_SIZE MAX_RETRIES
Структура пакета
Пакеты ПАКЕТА SDK Azure соответствуют согласованной структуре:
azure-<service>-<feature>
├── azure/
│ └── <service>/
│ ├── __init__.py
│ ├── _client.py
│ ├── _models.py
│ └── aio/ # Async implementations
│ └── __init__.py
Создание экземпляра клиента
Клиенты предоставляют несколько методов создания экземпляров:
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
Пакеты SDK Azure используют согласованные шаблоны проверки подлинности:
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"
)
Диспетчеры контекстов
Большинство клиентов Пакета SDK Azure реализуют протоколы диспетчера контекстов для автоматической очистки ресурсов:
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()
Замечание
Хотя большинство клиентов поддерживают диспетчеры контекстов, проверьте документацию конкретного клиента на наличие.
Асинхронные операции
Асинхронные клиенты предоставляются в отдельных .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())
Длительные операции
Длительные операции используют begin_ префикс и объекты опросчика:
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()
Постраничная разбивка
Операции списка возвращают итерации, которые автоматически обрабатывают разбиение на страницы:
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)
Типы возвращаемых данных
Методы возвращают строго типизированные объекты модели, а не словари:
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)
Обработка ошибок
Исключения SDK Azure наследуются от AzureError и предоставляют определенные типы исключений:
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}")
Параметры конфигурации
Клиенты принимают конфигурацию с помощью аргументов ключевых слов:
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
)
Общие шаблоны пакета SDK
Иерархия клиента службы
Пакеты SDK Azure обычно следуют трехуровневой иерархии:
Клиент службы: точка входа для операций службы:
service_client = BlobServiceClient(...)Клиент ресурсов: операции с определенными ресурсами:
container_client = service_client.get_container_client("container")Методы операций: действия по ресурсам:
blob_client = container_client.get_blob_client("blob.txt") blob_client.upload_blob(data)
Согласованное именование методов
Имена методов соответствуют прогнозируемым шаблонам:
| Операция | Паттерн метода | Example |
|---|---|---|
| Create | create_<resource> |
create_container() |
| Читайте | get_<resource> |
get_blob() |
| Update | update_<resource> |
update_secret() |
| Delete | delete_<resource> |
delete_container() |
| List | list_<resources> |
list_blobs() |
| Exists | exists() |
blob_client.exists() |
Работа с SDK Azure
В следующем примере показано, как рекомендации по проектированию создают согласованность между различными службами 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}")
Внесите вклад в пакеты SDK для Azure
Когда вы расширяете или вносите свой вклад в пакеты SDK Azure, выполните следующие действия.
- Следуйте идиомам Python: Используйте шаблоны и соглашения Python.
- Обеспечение согласованности: Выравнивайте существующие шаблоны пакета SDK.
- Написание комплексных тестов: Включите модульные тесты и тесты интеграции.
- Документируйте тщательно: Предоставьте docstring-и и примеры.
- Руководство по работе: Ознакомьтесь с Руководством по внесению изменений в SDK Azure.
Ниже приведен пример реализации пользовательского метода клиента, следующего рекомендациям по проектированию языка.
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)
Связанный контент
- Ознакомьтесь с полными рекомендациями по проектированию пакета SDK Для Azure.
- Ознакомьтесь со страницей релизов Azure SDK.