Azure REST API'ye Özel Eylemler Ekleme

Bu makale, özel eylemler uygulayan Azure Özel Kaynak Sağlayıcısı uç noktaları oluşturmaya yönelik gereksinimleri ve en iyi yöntemleri gözden geçirecektir. Azure Özel Kaynak Sağlayıcıları hakkında bilginiz yoksa özel kaynak sağlayıcılarına genel bakışa bakın.

Eylem Uç Noktası tanımlama

Uç nokta, bir hizmeti işaret eden ve azure ile arasındaki temel sözleşmeyi uygulayan BIR URL'dir. Uç nokta özel kaynak sağlayıcısında tanımlanır ve genel olarak erişilebilen herhangi bir URL olabilir. Aşağıdaki örnekte tarafından endpointURLuygulanan adlı myCustomAction bir eylem vardır.

Örnek ResourceProvider:

{
  "properties": {
    "actions": [
      {
        "name": "myCustomAction",
        "routingType": "Proxy",
        "endpoint": "https://{endpointURL}/"
      }
    ]
  },
  "location": "eastus",
  "type": "Microsoft.CustomProviders/resourceProviders",
  "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}",
  "name": "{resourceProviderName}"
}

Eylem uç noktası oluşturma

Eylem uygulayan bir uç nokta, Azure'da yeni API'nin isteğini ve yanıtını işlemelidir. Eylem içeren bir özel kaynak sağlayıcısı oluşturulduğunda Azure'da yeni bir API kümesi oluşturur. Bu durumda eylem, çağrılar için POST yeni bir Azure eylem API'sini oluşturur:

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomAction

Azure API Gelen İsteği:

POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomAction?api-version=2018-09-01-preview
Authorization: Bearer eyJ0e...
Content-Type: application/json

{
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3" : "myPropertyValue3"
    }
}

Bu istek daha sonra şu şekilde uç noktaya iletilir:

POST https://{endpointURL}/?api-version=2018-09-01-preview
Content-Type: application/json
X-MS-CustomProviders-RequestPath: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomAction

{
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3" : "myPropertyValue3"
    }
}

Benzer şekilde, uç noktadan gelen yanıt müşteriye geri iletilir. Uç noktadan gelen yanıt şu değeri döndürmelidir:

  • Geçerli bir JSON nesne belgesi. Tüm diziler ve dizeler üst nesnenin altına yerleştirilmelidir.
  • Üst Content-Type bilgi "application/json; charset=utf-8".
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3" : "myPropertyValue3"
    }
}

Azure Özel Kaynak Sağlayıcısı Yanıtı:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3" : "myPropertyValue3"
    }
}

Özel Eylem Çağırma

Özel bir kaynak sağlayıcısından özel eylem çağırmanın iki ana yolu vardır:

  • Azure CLI
  • Azure Resource Manager Şablonları

Azure CLI

az resource invoke-action --action {actionName} \
                          --ids /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName} \
                          --request-body \
                            '{
                                "myProperty1": "myPropertyValue1",
                                "myProperty2": {
                                    "myProperty3": "myPropertyValue3"
                                }
                            }'
Parametre Gerekli Açıklama
action Evet ResourceProvider'da tanımlanan eylemin adı.
Kimlik Evet ResourceProvider'ın kaynak kimliği.
istek gövdesi No Uç noktaya gönderilecek istek gövdesi.

Azure Resource Manager Şablonu

Not

Eylemlerin Azure Resource Manager Şablonlarında sınırlı desteği vardır. Eylemin bir şablonun içinde çağrılabilmesi için, adında öneki list içermesi gerekir.

Liste Eylemi ile Örnek ResourceProvider :

{
  "properties": {
    "actions": [
      {
        "name": "listMyCustomAction",
        "routingType": "Proxy",
        "endpoint": "https://{endpointURL}/"
      }
    ]
  },
  "location": "eastus"
}

Örnek Azure Resource Manager Şablonu:

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "variables": {
        "resourceIdentifier": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}",
        "apiVersion": "2018-09-01-preview",
        "functionValues": {
            "myProperty1": "myPropertyValue1",
            "myProperty2": {
                "myProperty3": "myPropertyValue3"
            }
        }
    },
    "resources": [],
    "outputs": {
        "myCustomActionOutput": {
            "type": "object",
            "value": "[listMyCustomAction(variables('resourceIdentifier'), variables('apiVersion'), variables('functionValues'))]"
        }
    }
}
Parametre Gerekli Açıklama
resourceIdentifier Evet ResourceProvider'ın kaynak kimliği.
apiVersion Evet Kaynak çalışma zamanının API sürümü. Bu her zaman "2018-09-01-preview" olmalıdır.
functionValues No Uç noktaya gönderilecek istek gövdesi.

Sonraki adımlar