Udostępnij za pośrednictwem


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ć przez aplikację logiki, na przykład dane JSON, XML, pliki proste i dane binarne. 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

Usługa Logic Apps przechowuje i obsługuje dowolne żądanie z typem zawartości application/json jako obiekt JavaScript Object 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żna użyć wyrażenia. Ten przykład zwraca wartość dog z tablicy animal-type bez rzutu:

@body('myAction')['client']['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())['client']['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ć tych właściwości w przepływie pracy aplikacji logiki.

  • Wyzwalacz żądania

    Jeśli używasz tego wyzwalacza w Projektancie 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żna ł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.

    1. W wyzwalaczu Żądanie wybierz pozycję Użyj przykładowego ładunku do wygenerowania schematu.

    2. W obszarze Wprowadź lub wklej przykładowy ładunek JSON podaj przykładowy ładunek, a następnie wybierz pozycję Gotowe. Na przykład:

      Zrzut ekranu przedstawiający akcję

      Wygenerowany schemat jest teraz wyświetlany w wyzwalaczu.

      Podaj przykładowy ładunek JSON

      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"
                           }
                        }
                     }
                  }
               }
            }
         }
      }
      
    3. 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 Projektancie aplikacji logiki, możesz przeanalizować dane wyjściowe JSON i wygenerować przyjazne dla użytkownika tokeny reprezentujące właściwości zawartości JSON. Następnie można ł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 usług Azure Service Bus, Azure Cosmos DB itd.

    Przeanalizuj dane JSON

text/plain

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 są uwzględniane w kolejnych akcjach bez rzutowania, żądania wyjdą z nagłówkiem ustawionym Content-Type na text/plainwartość .

Na przykład podczas pracy z plikiem płaskim możesz uzyskać żą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/plainwartość . Jeśli pracujesz z danymi, które są zwykłym tekstem, ale nie określono nagłówka, możesz ręcznie rzutować te dane na tekst przy użyciu funkcji string(), takiej jak to wyrażenie:

@string(triggerBody())

application/xml i application/octet-stream

Usługa Logic Apps zawsze zachowuje Content-Type odebrane żądanie HTTP lub odpowiedź. Jeśli więc aplikacja logiki odbiera zawartość z ustawioną wartością Content-Typeapplication/octet-stream, a zawartość zostanie uwzględnina w późniejszej akcji bez rzutowania, żądanie wychodzące ma Content-Type również 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 binarny ciąg zakodowany w formacie base64 z odpowiednimi metadanymi, które zachowują zarówno $content ładunek, jak i $content-type, które są automatycznie konwertowane.

Ta lista zawiera opis sposobu konwertowania zawartości przez usługę Logic Apps podczas korzystania z tych funkcji:

  • json(): Rzutuje dane na application/json
  • xml(): Rzutuje dane na application/xml
  • binary(): Rzutuje dane na application/octet-stream
  • string(): Rzutuje dane na text/plain
  • base64(): konwertuje zawartość na ciąg zakodowany w formacie base64
  • base64toString(): konwertuje ciąg zakodowany w formacie base64 na text/plain
  • base64toBinary(): konwertuje ciąg zakodowany w formacie base64 na application/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 Content-Type ustawiono application/xmlwartość , na przykład następującą 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 je, 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 natywne funkcje do obsługi danych formularza, 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 żądaniu application/json , zostanie wyświetlony błąd środowiska uruchomieniowego, ponieważ treść jest wysyłana jako kodowana.