Справочник по прокси-серверу пользовательских ресурсов

В этой статье рассматриваются требования к конечным точкам для применения прокси-сервера настраиваемых ресурсов. Для ознакомления с поставщиками настраиваемых ресурсов Azure см. статью Общие сведения о поставщиках настраиваемых ресурсов.

Определение конечной точки ресурса прокси-сервера

Ресурс прокси-сервера можно создать, указав для routingType значение Proxy (Прокси-сервер).

Пример поставщика настраиваемого ресурса:

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

Создание конечной точки ресурса прокси-сервера

Конечная точка, реализующая конечную точку ресурса "Прокси-сервер", должна поддерживать запрос и ответ для нового API в Azure. В этом случае resourceType создаст новый API ресурсов Azure для PUT, GET и DELETE для выполнения CRUD в одном ресурсе, а также GET, чтобы получить все существующие ресурсы.

Примечание

Поля id, name и type не обязательны, но необходимы для интеграции настраиваемого ресурса с существующей экосистемой Azure.

Пример ресурса:

{
    "name": "{myCustomResourceName}",
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResources/{myCustomResourceName}",
    "type": "Microsoft.CustomProviders/resourceProviders/myCustomResources",
    "properties": {
        "myProperty1": "myPropertyValue1",
        "myProperty2": {
            "myProperty3" : "myPropertyValue3"
        }
    }
}

Справка по параметрам:

Свойство Образец Описание
name {myCustomResourceName} Название настраиваемого ресурса.
тип Microsoft.CustomProviders/resourceProviders/{имя типа ресурса} Пространство имен типа ресурса.
идентификатор /subscriptions/{ИД подписки}/resourceGroups/{имя группы ресурсов}/
providers/Microsoft.CustomProviders/resourceProviders/{имя поставщика ресурсов}/
myCustomResources/{имя_настраиваемого_ресурса}'
Идентификатор ресурса.

Создание настраиваемого ресурса

Входящий запрос API Azure:

PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resource-provider-name}/myCustomResources/{myCustomResourceName}?api-version=2018-09-01-preview
Authorization: Bearer eyJ0e...
Content-Type: application/json

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

Этот запрос в дальнейшем будет направлен в конечную точку в формате:

PUT 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}/myCustomResources/{myCustomResourceName}

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

Ответ от конечной точки в дальнейшем перенаправляется обратно клиенту. Ответ должен быть следующим:

  • Допустимый документ объекта JSON. Все массивы и строки должны быть вложены в объект верхнего уровня.
  • У заголовка Content-Type должно быть значение "application/json; charset=utf-8".

Ответ конечной точки:

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

{
    "name": "{myCustomResourceName}",
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResources/{myCustomResourceName}",
    "type": "Microsoft.CustomProviders/resourceProviders/myCustomResources",
    "properties": {
        "myProperty1": "myPropertyValue1",
        "myProperty2": {
            "myProperty3" : "myPropertyValue3"
        }
    }
}

Ответ поставщика настраиваемых ресурсов Azure:

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

{
    "name": "{myCustomResourceName}",
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResources/{myCustomResourceName}",
    "type": "Microsoft.CustomProviders/resourceProviders/myCustomResources",
    "properties": {
        "myProperty1": "myPropertyValue1",
        "myProperty2": {
            "myProperty3" : "myPropertyValue3"
        }
    }
}

Удаление настраиваемого ресурса

Входящий запрос API Azure:

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

Этот запрос в дальнейшем будет направлен в конечную точку в формате:

Delete 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}/myCustomResources/{myCustomResourceName}

Ответ от конечной точки в дальнейшем перенаправляется обратно клиенту. Ответ должен быть следующим:

  • Допустимый документ объекта JSON. Все массивы и строки должны быть вложены в объект верхнего уровня.
  • У заголовка Content-Type должно быть значение "application/json; charset=utf-8".

Ответ конечной точки:

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

Ответ поставщика настраиваемых ресурсов Azure:

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

Извлечение настраиваемого ресурса

Входящий запрос API Azure:

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

Этот запрос в дальнейшем будет направлен в конечную точку в формате:

GET 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}/myCustomResources/{myCustomResourceName}

Ответ от конечной точки в дальнейшем перенаправляется обратно клиенту. Ответ должен быть следующим:

  • Допустимый документ объекта JSON. Все массивы и строки должны быть вложены в объект верхнего уровня.
  • У заголовка Content-Type должно быть значение "application/json; charset=utf-8".

Ответ конечной точки:

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

{
    "name": "{myCustomResourceName}",
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResources/{myCustomResourceName}",
    "type": "Microsoft.CustomProviders/resourceProviders/myCustomResources",
    "properties": {
        "myProperty1": "myPropertyValue1",
        "myProperty2": {
            "myProperty3" : "myPropertyValue3"
        }
    }
}

Ответ поставщика настраиваемых ресурсов Azure:

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

{
    "name": "{myCustomResourceName}",
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResources/{myCustomResourceName}",
    "type": "Microsoft.CustomProviders/resourceProviders/myCustomResources",
    "properties": {
        "myProperty1": "myPropertyValue1",
        "myProperty2": {
            "myProperty3" : "myPropertyValue3"
        }
    }
}

Перечисление всех настраиваемых ресурсов

Входящий запрос API Azure:

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

Этот запрос в дальнейшем будет направлен в конечную точку в формате:

GET 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}/myCustomResources

Ответ от конечной точки в дальнейшем перенаправляется обратно клиенту. Ответ должен быть следующим:

  • Допустимый документ объекта JSON. Все массивы и строки должны быть вложены в объект верхнего уровня.
  • У заголовка Content-Type должно быть значение "application/json; charset=utf-8".
  • Список ресурсов должен размещаться в свойстве верхнего уровня value.

Ответ конечной точки:

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

{
    "value" : [
        {
            "name": "{myCustomResourceName}",
            "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResources/{myCustomResourceName}",
            "type": "Microsoft.CustomProviders/resourceProviders/myCustomResources",
            "properties": {
                "myProperty1": "myPropertyValue1",
                "myProperty2": {
                    "myProperty3" : "myPropertyValue3"
                }
            }
        }
    ]
}

Ответ поставщика настраиваемых ресурсов Azure:

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

{
    "value" : [
        {
            "name": "{myCustomResourceName}",
            "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResources/{myCustomResourceName}",
            "type": "Microsoft.CustomProviders/resourceProviders/myCustomResources",
            "properties": {
                "myProperty1": "myPropertyValue1",
                "myProperty2": {
                    "myProperty3" : "myPropertyValue3"
                }
            }
        }
    ]
}

Дальнейшие действия