적용 대상: Azure Logic Apps(사용량 + 표준)
Azure Logic Apps는 JSON, XML, 플랫 파일 및 이진 데이터와 같은 모든 콘텐츠 형식을 지원합니다. 일부 콘텐츠 형식에는 기본 지원이 있지만, 이는 캐스팅 또는 변환이 필요하지 않음을 의미하지만, 다른 콘텐츠 형식은 필요한 형식을 제공하기 위해 몇 가지 작업이 필요합니다.
워크플로에서 콘텐츠 또는 데이터를 처리하는 가장 좋은 방법을 결정하기 위해 Azure Logic Apps는 워크플로가 외부 호출자로부터 가져오는 HTTP 요청의 헤더 값을 사용합니다 Content-Type .
다음 목록에는 워크플로에서 발생할 수 있는 몇 가지 예제 Content-Type 값이 포함되어 있습니다.
이 가이드에서는 Azure Logic Apps가 다양한 콘텐츠 형식을 처리하는 방법을 설명하고 필요한 경우 이러한 형식을 올바르게 캐스팅하거나 변환하는 방법을 보여 줍니다.
application/json
헤더 값이 Content-Type인 HTTP 요청의 경우 Azure Logic Apps는 콘텐츠를 JSON(JavaScript Object Notation) 개체로 저장하고 처리합니다. 기본적으로 캐스팅 또는 변환 없이 JSON 콘텐츠를 구문 분석할 수 있습니다.
식을 사용하여 이 콘텐츠를 구문 분석할 수도 있습니다.
예를 들어, 다음 식은 워크플로에서 선행 작업의 JSON 이름인 body() 함수를 My_action와 함께 사용합니다.
body('My_action')['client']['animal-type'][0]
다음 단계에서는 캐스팅 또는 변환 없이 식이 작동하는 방식을 설명합니다.
body()함수는body작업에서My_action출력 개체를 가져옵니다.반환된
body개체에서 함수는client개체에 액세스합니다.client개체에는 배열로 설정된animal-type속성이 포함되어 있습니다.함수는 배열의 첫 번째 항목에 액세스하고 캐스팅 또는 변환 없이 값 dog를 직접 반환합니다.
헤더를 사용하지 않는 JSON 데이터를 사용하는 Content-Type 경우 json() 함수를 사용하여 해당 데이터를 JSON으로 수동으로 변환할 수 있습니다. 예를 들면 다음과 같습니다.
json(triggerBody())['client']['animal-type']
함수는
triggerBody()워크플로의 트리거 출력에서body개체를 가져옵니다. 이 개체는 일반적으로 JSON 개체입니다.개체의
body원본은 워크플로 트리거에서 받은 인바운드 HTTP 요청 또는 이벤트에서 시작됩니다.json()함수는body함수에서 반환된triggerBody()개체를 명시적으로 JSON 개체로 구문 분석합니다.예를 들어 트리거 본문이 JSON으로 처리해야 하는 문자열인 경우 이 동작이 유용합니다.
나머지 식 표현은 이전 예제와 유사합니다.
JSON 속성에 대한 토큰 만들기
Azure Logic Apps에서 JSON 콘텐츠의 속성을 나타내는 사용자 친화적인 토큰을 생성할 수 있습니다. 그런 다음 이러한 토큰을 사용하여 워크플로에서 이러한 속성 및 해당 값을 보다 쉽게 참조할 수 있습니다.
다음 목록에서는 일반적인 워크플로 작업과 JSON 콘텐츠의 속성에 대한 토큰을 생성할 수 있는 해당 방법을 설명합니다.
HTTP 요청이 수신될 때라는 요청 트리거
요청 트리거를 사용하여 디자이너에서 작업하는 경우 필요에 따라 각 속성 값에 대한 JSON 개체, 속성 및 예상 데이터 형식을 정의하는 JSON 스키마를 제공할 수 있습니다. JSON 스키마가 없는 경우 사용할 수 있는 JSON 스키마를 생성하는 예제 페이로드를 제공할 수 있습니다.
트리거는 스키마를 사용하여 들어오는 HTTP 요청에서 JSON 콘텐츠를 구문 분석하고 JSON 콘텐츠의 속성을 나타내는 토큰을 생성합니다. 그런 다음 워크플로의 후속 작업에서 이러한 속성 및 해당 값을 쉽게 참조하고 사용할 수 있습니다.
다음 단계에서는 예제 페이로드를 제공하여 JSON 스키마를 생성하는 방법을 설명합니다.
디자이너에서 요청 트리거를 선택하여 정보 창을 엽니다.
매개 변수 탭의 요청 본문 JSON 스키마 상자에서 샘플 페이로드 사용을 선택하여 스키마를 생성합니다.
샘플 JSON 페이로드 상자를 입력하거나 붙여넣고 샘플 페이로드를 입력한 다음 완료를 선택합니다.
생성된 스키마가 트리거에 나타납니다.
코드 뷰 편집기에서 요청 트리거에 대한 기본 JSON 정의를 검토할 수 있습니다.
"triggers": { "When_an_HTTP_request_is_received": { "type": "Request", "kind": "Http", "inputs": { "schema": { "type": "object", "properties": { "client": { "type": "object", "properties": { "animal-type": { "type": "array", "items": { "type": "string" }, }, "name": { "type": "string" } } } } } } } }워크플로를 트리거하려면 워크플로를 처음 저장한 후 생성되는 워크플로 URL 또는 트리거의 HTTP URL을 가져옵니다.
워크플로를 테스트하려면 HTTP 요청을 워크플로 URL 또는 트리거 URL로 보낼 수 있는 클라이언트 도구 또는 앱을 사용합니다. 요청에 Content-Type 이라는 헤더가 포함되어 있고 헤더 값이 application/json으로 설정되어 있는지 확인합니다.
JSON 구문 분석 작업
디자이너에서 이 작업을 사용하는 경우 JSON 출력을 구문 분석하고 JSON 콘텐츠의 속성을 나타내는 사용자에게 친숙한 토큰을 생성할 수 있습니다. 그 후 이러한 속성을 논리 앱 워크플로 전체에서 간편하게 참조하고 사용할 수 있습니다.
요청 트리거와 마찬가지로, 구문 분석할 JSON 콘텐츠를 설명하는 JSON 스키마를 입력하거나 생성할 수 있습니다. 이 방법으로 Azure Service Bus, Azure Cosmos DB 등의 데이터를 보다 쉽게 사용할 수 있습니다.
텍스트/일반
워크플로에서 헤더 값이 Content-Type인 HTTP 요청을 수신하는 경우 Azure Logic Apps는 원시 형식으로 콘텐츠를 저장하고 처리합니다. 캐스팅 또는 변환 없이 후속 워크플로 작업에서 이 콘텐츠를 참조하거나 사용하는 경우 아웃바운드 요청에는 헤더 값도 Content-Type 설정됩니다 text/plain.
예를 들어 플랫 파일로 작업 중이고 인바운드 HTTP 요청에 헤더 값이 Content-Type 다음과 같이 설정되어 있다고 가정합니다 text/plain.
Date,Name,Address
Oct-1,Frank,123 Ave
요청 본문을 사용하여 다른 요청을 보내는 후속 작업으로 이 요청을 보내는 경우 두 번째 요청에는 Content-Type 헤더 값도 설정됩니다 text/plain. 일반 텍스트로 데이터를 사용하지만 헤더를 지정하지 않은 경우 함수를 사용하여 string()이 데이터를 텍스트로 수동으로 캐스팅할 수 있습니다. 예를 들면 다음과 같습니다.
string(triggerBody())
application/xml 및 application/octet-stream
Azure Logic Apps는 항상 인바운드 HTTP 요청 또는 응답에서 헤더 값을 유지합니다 Content-Type . 워크플로가 Content-Type으로 설정된 콘텐츠를 수신하고, 그리고 캐스팅하지 않고 후속 작업에 해당 콘텐츠를 포함하는 경우, 아웃바운드 요청도 Content-Type을 application/octet-stream로 설정합니다. 이 방법을 사용하면 워크플로를 진행하는 동안 데이터가 손실되지 않습니다. 상태 저장 워크플로에서는 상태가 워크플로를 통해 이동하는 동안 후속 작업의 상태, 입력 및 출력이 JSON 개체에 저장됩니다.
변환기 함수
일부 데이터 형식을 유지하기 위해 Azure Logic Apps는 콘텐츠를 이진 base64로 인코딩된 문자열로 변환합니다. 이 문자열에는 $content 페이로드와 $content-type를 모두 보존하는 적절한 메타데이터가 있으며, 이 메타데이터는 자동으로 변환됩니다.
다음 목록에서는 특정 함수를 사용할 때 Azure Logic Apps가 콘텐츠를 변환하는 방법을 설명합니다.
-
json(): 데이터를application/json로 변환합니다. -
xml(): 데이터를application/xml로 변환합니다. -
binary(): 데이터를application/octet-stream로 변환합니다. -
string(): 데이터를text/plain로 변환합니다. -
base64(): 콘텐츠를 base64로 인코딩된 문자열로 변환합니다. -
base64toString(): base64로 인코딩된 문자열을 .로text/plain변환합니다. -
base64toBinary(): base64로 인코딩된 문자열을 .로application/octet-stream변환합니다. -
dataUri(): 문자열을 데이터 URI로 변환합니다. -
dataUriToBinary(): 데이터 URI를 이진 문자열로 변환합니다. -
dataUriToString(): 데이터 URI를 문자열로 변환합니다.
예를 들어 HTTP 요청에서 콘텐츠가 다음 샘플과 같이 나타날 때, 워크플로 트리거가 Content-Type 위치에서 application/xml으로 설정된 상태로 이를 수신한다고 가정합니다.
<?xml version="1.0" encoding="UTF-8" ?>
<CustomerName>Frank</CustomerName>
다음 식과 xml() 및 triggerBody() 함수를 사용하여 이 콘텐츠를 캐스팅합니다.
xml(triggerBody())
그런 다음 워크플로의 후속 작업과 함께 결과 콘텐츠를 사용할 수 있습니다. 대신 xpath() 함수와 xml() 함수를 사용하는 다음 식을 사용할 수 있습니다.
xpath(xml(triggerBody()), '/CustomerName')
다른 콘텐츠 형식
Azure Logic Apps는 다른 콘텐츠 형식을 지원하지만 변수를 디코딩 $content 하여 HTTP 요청에서 메시지 본문을 수동으로 가져와야 할 수 있습니다.
예를 들어, Content-Type가 application/x-www-url-formencoded로 설정된 HTTP 요청을 워크플로가 수신한다고 생각해 보세요. 모든 데이터를 유지하기 위해 요청 본문에는 페이로드가 base64 문자열로 인코딩되는 변수가 포함됩니다 $content .
CustomerName=Frank&Address=123+Avenue
이 콘텐츠 형식은 일반 텍스트 또는 JSON 형식이 아니므로 Azure Logic Apps는 다음과 CustomerName=Frank&Address=123+Avenue$content-type 변수를 사용하여 저장 $content 합니다.
"body": {
"$content-type": "application/x-www-url-formencoded",
"$content": "AAB1241BACDFA=="
}
Azure Logic Apps에는 양식 데이터를 처리하는 네이티브 함수도 포함되어 있습니다. 예를 들면 다음과 같습니다.
또는 다음 예제와 같은 식을 사용하여 데이터에 수동으로 액세스할 수 있습니다.
string(body('formdataAction'))
아웃바운드 요청을 하려면 application/x-www-url-formencoded를 Content-Type 헤더 값으로 사용하고, body('formdataAction')와 같은 표현을 사용하여 요청 콘텐츠를 작업 본문에 그대로 추가합니다. 이 메서드는 작업 본문이 입력 개체의 유일한 매개 변수인 body 경우에만 작동합니다. 콘텐츠 형식이 body('formdataAction') 있는 요청에서 식을 사용하는 경우 본문이 application/json인코딩되어 전송되므로 런타임 오류가 발생합니다.