Rewrote sync_microsoft_skills.py (v4) to use each SKILL.md's frontmatter 'name' field as the flat directory name under skills/, replacing the nested skills/official/microsoft/<lang>/<category>/<service>/ hierarchy. This fixes CI failures caused by the indexing, validation, and catalog scripts expecting skills/<id>/SKILL.md (depth 1). Changes: - Rewrite scripts/sync_microsoft_skills.py for flat output with collision detection - Update scripts/tests/inspect_microsoft_repo.py for flat name mapping - Update scripts/tests/test_comprehensive_coverage.py for name uniqueness checks - Delete skills/official/ nested directory - Add 129 Microsoft skills as flat directories (e.g. skills/azure-mgmt-botservice-dotnet/) - Move attribution files to docs/ (LICENSE-MICROSOFT, microsoft-skills-attribution.json) - Rebuild skills_index.json, CATALOG.md, README.md (845 total skills)
243 lines
6.2 KiB
Markdown
243 lines
6.2 KiB
Markdown
---
|
|
name: azure-mgmt-apicenter-py
|
|
description: |
|
|
Azure API Center Management SDK for Python. Use for managing API inventory, metadata, and governance across your organization.
|
|
Triggers: "azure-mgmt-apicenter", "ApiCenterMgmtClient", "API Center", "API inventory", "API governance".
|
|
package: azure-mgmt-apicenter
|
|
---
|
|
|
|
# Azure API Center Management SDK for Python
|
|
|
|
Manage API inventory, metadata, and governance in Azure API Center.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
pip install azure-mgmt-apicenter
|
|
pip install azure-identity
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
```bash
|
|
AZURE_SUBSCRIPTION_ID=your-subscription-id
|
|
```
|
|
|
|
## Authentication
|
|
|
|
```python
|
|
from azure.identity import DefaultAzureCredential
|
|
from azure.mgmt.apicenter import ApiCenterMgmtClient
|
|
import os
|
|
|
|
client = ApiCenterMgmtClient(
|
|
credential=DefaultAzureCredential(),
|
|
subscription_id=os.environ["AZURE_SUBSCRIPTION_ID"]
|
|
)
|
|
```
|
|
|
|
## Create API Center
|
|
|
|
```python
|
|
from azure.mgmt.apicenter.models import Service
|
|
|
|
api_center = client.services.create_or_update(
|
|
resource_group_name="my-resource-group",
|
|
service_name="my-api-center",
|
|
resource=Service(
|
|
location="eastus",
|
|
tags={"environment": "production"}
|
|
)
|
|
)
|
|
|
|
print(f"Created API Center: {api_center.name}")
|
|
```
|
|
|
|
## List API Centers
|
|
|
|
```python
|
|
api_centers = client.services.list_by_subscription()
|
|
|
|
for api_center in api_centers:
|
|
print(f"{api_center.name} - {api_center.location}")
|
|
```
|
|
|
|
## Register an API
|
|
|
|
```python
|
|
from azure.mgmt.apicenter.models import Api, ApiKind, LifecycleStage
|
|
|
|
api = client.apis.create_or_update(
|
|
resource_group_name="my-resource-group",
|
|
service_name="my-api-center",
|
|
workspace_name="default",
|
|
api_name="my-api",
|
|
resource=Api(
|
|
title="My API",
|
|
description="A sample API for demonstration",
|
|
kind=ApiKind.REST,
|
|
lifecycle_stage=LifecycleStage.PRODUCTION,
|
|
terms_of_service={"url": "https://example.com/terms"},
|
|
contacts=[{"name": "API Team", "email": "api-team@example.com"}]
|
|
)
|
|
)
|
|
|
|
print(f"Registered API: {api.title}")
|
|
```
|
|
|
|
## Create API Version
|
|
|
|
```python
|
|
from azure.mgmt.apicenter.models import ApiVersion, LifecycleStage
|
|
|
|
version = client.api_versions.create_or_update(
|
|
resource_group_name="my-resource-group",
|
|
service_name="my-api-center",
|
|
workspace_name="default",
|
|
api_name="my-api",
|
|
version_name="v1",
|
|
resource=ApiVersion(
|
|
title="Version 1.0",
|
|
lifecycle_stage=LifecycleStage.PRODUCTION
|
|
)
|
|
)
|
|
|
|
print(f"Created version: {version.title}")
|
|
```
|
|
|
|
## Add API Definition
|
|
|
|
```python
|
|
from azure.mgmt.apicenter.models import ApiDefinition
|
|
|
|
definition = client.api_definitions.create_or_update(
|
|
resource_group_name="my-resource-group",
|
|
service_name="my-api-center",
|
|
workspace_name="default",
|
|
api_name="my-api",
|
|
version_name="v1",
|
|
definition_name="openapi",
|
|
resource=ApiDefinition(
|
|
title="OpenAPI Definition",
|
|
description="OpenAPI 3.0 specification"
|
|
)
|
|
)
|
|
```
|
|
|
|
## Import API Specification
|
|
|
|
```python
|
|
from azure.mgmt.apicenter.models import ApiSpecImportRequest, ApiSpecImportSourceFormat
|
|
|
|
# Import from inline content
|
|
client.api_definitions.import_specification(
|
|
resource_group_name="my-resource-group",
|
|
service_name="my-api-center",
|
|
workspace_name="default",
|
|
api_name="my-api",
|
|
version_name="v1",
|
|
definition_name="openapi",
|
|
body=ApiSpecImportRequest(
|
|
format=ApiSpecImportSourceFormat.INLINE,
|
|
value='{"openapi": "3.0.0", "info": {"title": "My API", "version": "1.0"}, "paths": {}}'
|
|
)
|
|
)
|
|
```
|
|
|
|
## List APIs
|
|
|
|
```python
|
|
apis = client.apis.list(
|
|
resource_group_name="my-resource-group",
|
|
service_name="my-api-center",
|
|
workspace_name="default"
|
|
)
|
|
|
|
for api in apis:
|
|
print(f"{api.name}: {api.title} ({api.kind})")
|
|
```
|
|
|
|
## Create Environment
|
|
|
|
```python
|
|
from azure.mgmt.apicenter.models import Environment, EnvironmentKind
|
|
|
|
environment = client.environments.create_or_update(
|
|
resource_group_name="my-resource-group",
|
|
service_name="my-api-center",
|
|
workspace_name="default",
|
|
environment_name="production",
|
|
resource=Environment(
|
|
title="Production",
|
|
description="Production environment",
|
|
kind=EnvironmentKind.PRODUCTION,
|
|
server={"type": "Azure API Management", "management_portal_uri": ["https://portal.azure.com"]}
|
|
)
|
|
)
|
|
```
|
|
|
|
## Create Deployment
|
|
|
|
```python
|
|
from azure.mgmt.apicenter.models import Deployment, DeploymentState
|
|
|
|
deployment = client.deployments.create_or_update(
|
|
resource_group_name="my-resource-group",
|
|
service_name="my-api-center",
|
|
workspace_name="default",
|
|
api_name="my-api",
|
|
deployment_name="prod-deployment",
|
|
resource=Deployment(
|
|
title="Production Deployment",
|
|
description="Deployed to production APIM",
|
|
environment_id="/workspaces/default/environments/production",
|
|
definition_id="/workspaces/default/apis/my-api/versions/v1/definitions/openapi",
|
|
state=DeploymentState.ACTIVE,
|
|
server={"runtime_uri": ["https://api.example.com"]}
|
|
)
|
|
)
|
|
```
|
|
|
|
## Define Custom Metadata
|
|
|
|
```python
|
|
from azure.mgmt.apicenter.models import MetadataSchema
|
|
|
|
metadata = client.metadata_schemas.create_or_update(
|
|
resource_group_name="my-resource-group",
|
|
service_name="my-api-center",
|
|
metadata_schema_name="data-classification",
|
|
resource=MetadataSchema(
|
|
schema='{"type": "string", "title": "Data Classification", "enum": ["public", "internal", "confidential"]}'
|
|
)
|
|
)
|
|
```
|
|
|
|
## Client Types
|
|
|
|
| Client | Purpose |
|
|
|--------|---------|
|
|
| `ApiCenterMgmtClient` | Main client for all operations |
|
|
|
|
## Operations
|
|
|
|
| Operation Group | Purpose |
|
|
|----------------|---------|
|
|
| `services` | API Center service management |
|
|
| `workspaces` | Workspace management |
|
|
| `apis` | API registration and management |
|
|
| `api_versions` | API version management |
|
|
| `api_definitions` | API definition management |
|
|
| `deployments` | Deployment tracking |
|
|
| `environments` | Environment management |
|
|
| `metadata_schemas` | Custom metadata definitions |
|
|
|
|
## Best Practices
|
|
|
|
1. **Use workspaces** to organize APIs by team or domain
|
|
2. **Define metadata schemas** for consistent governance
|
|
3. **Track deployments** to understand where APIs are running
|
|
4. **Import specifications** to enable API analysis and linting
|
|
5. **Use lifecycle stages** to track API maturity
|
|
6. **Add contacts** for API ownership and support
|