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ć 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

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.

    1. W wyzwalaczu Żądanie wybierz pozycję Użyj przykładowego ładunku, aby wygenerować schemat.

    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 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.

    Analizowanie kodu JSON

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-Typetext/plainwartość .

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-Typeapplication/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-typeelement , 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 do application/json
  • xml(): Rzutuje dane do application/xml
  • binary(): Rzutuje dane do application/octet-stream
  • string(): Rzutuje dane do 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 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.