Obsługa typów zawartości w usłudze Azure Logic Apps
Dotyczy: Azure Logic Apps (Zużycie + Standardowa)
Różne typy zawartości mogą przepływać za pośrednictwem aplikacji logiki, na przykład JSON, XML, plików prostych i danych binarnych. Chociaż usługa Logic Apps obsługuje wszystkie typy zawartości, niektóre mają natywną obsługę i nie wymagają rzutu ani konwersji w aplikacjach logiki. W razie potrzeby inne typy mogą wymagać rzutu lub konwersji. W tym artykule opisano, jak usługa Logic Apps obsługuje typy zawartości i jak można poprawnie rzutować lub konwertować te typy w razie potrzeby.
Aby określić odpowiedni sposób obsługi typów zawartości, usługa Logic Apps opiera się na wartości nagłówka Content-Type
w wywołaniach HTTP, na przykład:
- application/json (typ natywny)
- tekst/zwykły (typ natywny )
- application/xml i application/octet-stream
- Inne typy zawartości
application/json
Usługa Logic Apps przechowuje i obsługuje wszelkie żądania z typem zawartości application/json jako obiektem JavaScript Notation (JSON).
Domyślnie można analizować zawartość JSON bez żadnego rzutu.
Aby przeanalizować żądanie, które ma nagłówek z typem zawartości "application/json", możesz użyć wyrażenia. W tym przykładzie animal-type
zwraca wartość dog
z tablicy bez rzutu:
@body('myAction')['animal-type'][0]
{
"client": {
"name": "Fido",
"animal-type": [ "dog", "cat", "rabbit", "snake" ]
}
}
Jeśli pracujesz z danymi JSON, które nie określają nagłówka, możesz ręcznie rzutować te dane do formatu JSON przy użyciu funkcji json(), na przykład:
@json(triggerBody())['animal-type']
Tworzenie tokenów dla właściwości JSON
Usługa Logic Apps umożliwia generowanie przyjaznych dla użytkownika tokenów reprezentujących właściwości w zawartości JSON, dzięki czemu można odwoływać się do tych właściwości i używać ich łatwiej w przepływie pracy aplikacji logiki.
Wyzwalacz żądania
Jeśli używasz tego wyzwalacza w Projektant aplikacji logiki, możesz podać schemat JSON opisujący ładunek, który ma zostać odebrany. Projektant analizuje zawartość JSON przy użyciu tego schematu i generuje przyjazne dla użytkownika tokeny reprezentujące właściwości w zawartości JSON. Następnie możesz łatwo odwoływać się do tych właściwości i używać ich w przepływie pracy aplikacji logiki.
Jeśli nie masz schematu, możesz wygenerować schemat.
W wyzwalaczu Żądanie wybierz pozycję Użyj przykładowego ładunku, aby wygenerować schemat.
W obszarze Wprowadź lub wklej przykładowy ładunek JSON podaj przykładowy ładunek, a następnie wybierz pozycję Gotowe. Na przykład:
Wygenerowany schemat jest teraz wyświetlany w wyzwalaczu.
Oto podstawowa definicja wyzwalacza żądania w edytorze widoku kodu:
"triggers": { "manual": { "type": "Request", "kind": "Http", "inputs": { "schema": { "type": "object", "properties": { "client": { "type": "object", "properties": { "animal-type": { "type": "array", "items": { "type": "string" }, }, "name": { "type": "string" } } } } } } } }
W żądaniu HTTP, które aplikacja kliencka wysyła do usługi Azure Logic Apps, upewnij się, że dołączysz nagłówek o nazwie Content-Type i ustaw wartość nagłówka na wartość application/json.
Analizowanie akcji JSON
Jeśli używasz tej akcji w Projektant aplikacji logiki, możesz przeanalizować dane wyjściowe JSON i wygenerować przyjazne dla użytkownika tokeny reprezentujące właściwości w zawartości JSON. Następnie możesz łatwo odwoływać się do tych właściwości i używać ich w przepływie pracy aplikacji logiki. Podobnie jak w przypadku wyzwalacza żądania, można podać lub wygenerować schemat JSON opisujący zawartość JSON, którą chcesz przeanalizować. Dzięki temu można łatwiej korzystać z danych z Azure Service Bus, azure Cosmos DB itd.
tekst/zwykły
Gdy aplikacja logiki odbiera komunikaty HTTP, które mają Content-Type
nagłówek ustawiony na text/plain
, aplikacja logiki przechowuje te komunikaty w postaci nieprzetworzonej.
Jeśli te komunikaty będą uwzględniane w kolejnych akcjach bez rzutowania, żądania wyjdą z nagłówkiem ustawionym na Content-Type
text/plain
wartość .
Na przykład podczas pracy z plikiem płaskim może zostać wyświetlone żądanie HTTP z nagłówkiem ustawionym Content-Type
na text/plain
typ zawartości:
Date,Name,Address
Oct-1,Frank,123 Ave
Jeśli następnie wyślesz to żądanie w późniejszej akcji jako treść innego żądania, na przykład , @body('flatfile')
to drugie żądanie ma Content-Type
również nagłówek ustawiony na text/plain
. Jeśli pracujesz z danymi, które są zwykłym tekstem, ale nie określono nagłówka, możesz ręcznie rzutować te dane do tekstu przy użyciu funkcji string(), takiej jak to wyrażenie:
@string(triggerBody())
application/xml i application/octet-stream
Usługa Logic Apps zawsze zachowuje wartość Content-Type
w odebranym żądaniu HTTP lub odpowiedzi.
Jeśli więc aplikacja logiki odbiera zawartość z ustawioną wartością Content-Type
application/octet-stream
, a zawartość zostanie uwzględnina w późniejszej akcji bez rzutowania, żądanie wychodzące również ma Content-Type
wartość application/octet-stream
.
Dzięki temu usługa Logic Apps może zagwarantować, że dane nie zostaną utracone podczas przechodzenia przez przepływ pracy.
Jednak stan akcji lub dane wejściowe i wyjściowe są przechowywane w obiekcie JSON, podczas gdy stan przechodzi przez przepływ pracy.
Funkcje konwertera
Aby zachować niektóre typy danych, usługa Logic Apps konwertuje zawartość na ciąg zakodowany w formacie base64 z odpowiednimi metadanymi, które zachowują zarówno $content
ładunek, jak i $content-type
element , który jest automatycznie konwertowany.
Ta lista zawiera opis sposobu konwertowania zawartości w usłudze Logic Apps podczas korzystania z tych funkcji:
-
json()
: Rzutuje dane doapplication/json
-
xml()
: Rzutuje dane doapplication/xml
-
binary()
: Rzutuje dane doapplication/octet-stream
-
string()
: Rzutuje dane dotext/plain
-
base64()
: konwertuje zawartość na ciąg zakodowany w formacie base64 -
base64toString()
: konwertuje ciąg zakodowany w formacie base64 natext/plain
-
base64toBinary()
: konwertuje ciąg zakodowany w formacie base64 naapplication/octet-stream
-
dataUri()
: konwertuje ciąg na identyfikator URI danych -
dataUriToBinary()
: konwertuje identyfikator URI danych na ciąg binarny -
dataUriToString()
: konwertuje identyfikator URI danych na ciąg
Jeśli na przykład otrzymasz żądanie HTTP, w którym ustawiono Content-Type
wartość application/xml
, takie jak ta zawartość:
<?xml version="1.0" encoding="UTF-8" ?>
<CustomerName>Frank</CustomerName>
Tę zawartość można rzutować przy użyciu @xml(triggerBody())
wyrażenia z funkcjami xml()
i, triggerBody()
a następnie użyć tej zawartości później. Możesz też użyć @xpath(xml(triggerBody()), '/CustomerName')
wyrażenia z funkcjami xpath()
i xml()
.
Inne typy zawartości
Usługa Logic Apps współpracuje z innymi typami zawartości i obsługuje inne typy zawartości, ale może wymagać ręcznego pobrania treści komunikatu przez dekodowanie zmiennej $content
.
Załóżmy na przykład, że aplikacja logiki jest wyzwalana przez żądanie z typem application/x-www-url-formencoded
zawartości.
Aby zachować wszystkie dane, zmienna $content
w treści żądania ma ładunek zakodowany jako ciąg base64:
CustomerName=Frank&Address=123+Avenue
Ponieważ żądanie nie jest zwykłym tekstem ani plikiem JSON, żądanie jest przechowywane w akcji w następujący sposób:
"body": {
"$content-type": "application/x-www-url-formencoded",
"$content": "AAB1241BACDFA=="
}
Usługa Logic Apps udostępnia funkcje natywne do obsługi danych formularzy, na przykład:
Możesz też ręcznie uzyskać dostęp do danych przy użyciu wyrażenia, takiego jak w tym przykładzie:
@string(body('formdataAction'))
Jeśli żądanie wychodzące ma mieć ten sam application/x-www-url-formencoded
nagłówek typu zawartości, możesz dodać żądanie do treści akcji bez rzutowania przy użyciu wyrażenia takiego jak @body('formdataAction')
.
Jednak ta metoda działa tylko wtedy, gdy treść jest jedynym parametrem w danych wejściowych body
. Jeśli spróbujesz użyć @body('formdataAction')
wyrażenia w application/json
żądaniu, zostanie wyświetlony błąd środowiska uruchomieniowego, ponieważ treść jest wysyłana.