Соединитель API фабрики данных Azure

#api #azure-pipelines #azure-data-factory #azure-api-management #azure-devops-rest-api

Вопрос:

Я пытаюсь получить доступ к приложению через API REST, но я застрял в процессе, используя ADF. В основном этот процесс состоит из 2 этапов. 1 — Получение сеанса (https://horizon.akixi.com/CCS/API/v1/session) 2 — Аутентификация (https://horizon.akixi.com/CCS/API/v1/login?locale=en_GB»), используя имя пользователя и пароль.

Я создал связанную службу (Rest) и установил базовый URL-адрес как (https://horizon.akixi.com/CCS/API/v1/session) Аутентификация Анонимна.

Затем я создаю набор данных, чтобы указать этот API, и, наконец, я создаю «Копировать данные» и попытался установить в Дополнительном заголовке данные аутентификации, но это не работает, я получил ошибку 405.

В принципе, я могу запустить приведенный ниже сценарий с помощью Powershell, и он работает так, как ожидалось, но вместо этого требуется использовать его на ADF.

Сценарий в Powershell такой.

 $user = "xxxxxx@mail.com"
$pass = "123456789"
$secpasswd = ConvertTo-SecureString $pass -AsPlainText -Force
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$pass)))

#Get Session
$url = "https://horizon.akixi.com/CCS/API/v1/session"
$response = Invoke-RestMethod -uri $url -Method Post -SessionVariable se

#Authentication
Write-Host "Authenticating" -ForegroundColor Green
$headers = @{
    'Authorization' = "Basic $base64AuthInfo"
}
$headers
$url = "https://horizon.akixi.com/CCS/API/v1/login?locale=en_GB"
$response = Invoke-RestMethod -uri $url -Headers $headers -Method Get -WebSession $se

#List Reports
$url = "https://horizon.akixi.com/CCS/API/v1/report"
$response = Invoke-RestMethod -uri $url -Method Get -WebSession $se
$response
 

Спасибо вам всем.

Ответ №1:

Поскольку 3 шага являются отдельными, и только последний из них извлекает данные, вам следует разбить процесс на несколько действий.

Используйте веб — активность для первых двух шагов,

извлеките переменную сеанса или аутентификацию из веб-действий. Передайте его в действие копирования. Деятельность по копированию должна быть направлена

Комментарии:

1. Спасибо, МартинЬяффер-MSFT! Это сработало как заклинание!. Теперь я могу выполнить шаги 1 и 2. Что касается шага 3, если я использую действие копирования, что я могу добавить в «Исходный набор данных»? Поскольку я не использую никакой связанный сервис. Я создал третий шаг с помощью веб-активности и теперь могу просматривать данные из отчета в журнале отладки. Но мне нужно использовать действие копирования, чтобы каким-то образом сохранить эти данные отчета (или полученные данные журнала из предыдущего веб-действия) в таблицу SQL Server. С уважением,

2. Хотя веб-активность может использоваться для извлечения данных, существует ограничение полезной нагрузки. Веб-активность отличается от активности копирования тем, что ответ предоставляется конвейеру, а не записывается в приемник. Действием хранимой процедуры можно злоупотребить и превратить его в механизм записи. Деятельностью поиска также можно злоупотреблять с помощью опции «запрос», если в конце будут возвращены некоторые данные (инструкция insert инструкция select).

3. Я бы рекомендовал вам использовать либо REST, либо связанный с HTTP сервис и набор данных для источника шага 3. Если ваш api выполняет разбиение на страницы и возвращает форму JSON, REST connector полезен. Если нет разбивки на страницы или данные возвращаются в любом другом формате, следует использовать HTTP-соединитель.

4. Привет, Мартин, спасибо за твое объяснение. Я пытался использовать REST API и протестировать его с использованием различных параметров и конфигураций, но безуспешно. В основном на Связанной службе я устанавливаю базовый URL ( horizon.akixi.com/CCS/API/v1/report ) и тип аутентификации-анонимный.

5. В «Операции копирования данных» 1 — Я использую эту связанную службу Rest, созданную на предыдущем шаге с помощью метода запроса GET. 2 — Я создал 2 дополнительных заголовка «Авторизация»(Основной тип пользователя и пропуск) и «Cookie» (Сеанс). Я получаю сообщение об ошибке «Ресурс, к которому вы пытались получить доступ, требует, чтобы вы вошли в систему с действительным пользователем. Либо вы еще не вошли в систему…. » Вы хоть представляете, что я делаю не так?