Udostępnij przez


Obsługa typów zawartości w usłudze Azure Logic Apps

Dotyczy: Azure Logic Apps (Zużycie + Standardowa)

Usługa Azure Logic Apps obsługuje wszystkie typy zawartości, takie jak JSON, XML, pliki proste i dane binarne. Chociaż niektóre typy zawartości mają natywną obsługę, co oznacza, że nie wymagają rzutowania ani konwersji, inne typy zawartości wymagają pewnej pracy, aby zapewnić wymagany format.

Aby ułatwić określenie najlepszego sposobu obsługi zawartości lub danych w przepływach pracy, usługa Azure Logic Apps używa wartości nagłówka Content-Type w żądaniach HTTP, które przepływy pracy uzyskują od zewnętrznych wywołujących.

Poniższa lista zawiera kilka przykładowych Content-Type wartości, które mogą napotkać przepływ pracy:

W tym przewodniku opisano, jak usługa Azure Logic Apps obsługuje różne typy zawartości i pokazuje, jak poprawnie rzutować lub konwertować te typy w razie potrzeby.

application/json

W przypadku żądania HTTP, w którym wartość nagłówka Content-Type to application/json, usługa Azure Logic Apps przechowuje i obsługuje zawartość jako obiekt JavaScript Object Notation (JSON). Domyślnie można analizować zawartość JSON bez żadnego rzutu ani konwersji. Tę zawartość można również przeanalizować przy użyciu wyrażenia.

Na przykład następujące wyrażenie używa funkcji body() razem z My_action, która jest nazwą JSON dla akcji poprzednika w przepływie pracy.

body('My_action')['client']['animal-type'][0]

W poniższych krokach opisano sposób działania wyrażenia bez rzutu lub konwersji:

  1. Funkcja body() pobiera body obiekt wyjściowy z My_action akcji.

  2. Funkcja uzyskuje dostęp do obiektu body z zwróconego obiektu client.

    Obiekt client zawiera właściwość animal-type, która jest przypisana do tablicy.

  3. Funkcja uzyskuje dostęp do pierwszego elementu w tablicy i bezpośrednio zwraca wartość "dog" bez rzutowania lub konwersji.

Jeśli pracujesz z danymi JSON, które nie używają nagłówka Content-Type , możesz ręcznie przekonwertować te dane na format JSON przy użyciu funkcji json(), na przykład:

json(triggerBody())['client']['animal-type']

  1. Obiekt triggerBody() z wyjścia wyzwalacza przepływu pracy jest pobierany przez funkcję body. Ten obiekt jest zazwyczaj obiektem JSON.

    Źródło body obiektu pochodzi z przychodzącego żądania HTTP lub zdarzenia odebranego przez wyzwalacz przepływu pracy.

  2. Funkcja json() jawnie analizuje body obiekt zwrócony z triggerBody() funkcji jako obiekt JSON.

    To zachowanie jest przydatne, na przykład gdy treść wyzwalacza jest ciągiem, który wymaga obsługi w formacie JSON.

Pozostałe zachowanie wyrażenia jest podobne do poprzedniego przykładu.

Tworzenie tokenów dla właściwości JSON

W usłudze Azure Logic Apps można wygenerować przyjazne dla użytkownika tokeny reprezentujące właściwości w zawartości JSON. Następnie możesz użyć tych tokenów, aby łatwiej odwoływać się do tych właściwości i ich wartości w przepływie pracy.

Na poniższej liście opisano typowe operacje przepływu pracy oraz odpowiednie sposoby generowania tokenów dla właściwości w zawartości JSON:

  • Wyzwalacz zapytania o nazwie Kiedy zostanie odebrane żądanie HTTP

    Podczas pracy w projektancie z wyzwalaczem Żądania można opcjonalnie podać schemat JSON definiujący obiekty, właściwości i oczekiwane typy danych dla każdej wartości właściwości. Jeśli nie masz schematu JSON, możesz podać przykładowy ładunek w celu wygenerowania schematu JSON, którego można użyć.

    Wyzwalacz używa schematu do analizowania zawartości JSON z przychodzących żądań HTTP i generowania tokenów reprezentujących właściwości w zawartości JSON. Następnie można łatwo odwoływać się do tych właściwości i ich wartości w kolejnych akcjach w przepływie pracy.

    W poniższych krokach opisano sposób podawania przykładowego ładunku w celu wygenerowania schematu JSON:

    1. W projektancie wybierz wyzwalacz Żądanie, aby otworzyć panel informacyjny.

    2. Na karcie Parametry w polu Schemat JSON treści żądania wybierz pozycję Użyj przykładowego ładunku do wygenerowania schematu.

    3. W polu Wprowadź lub wklej przykładowy ładunek JSON wprowadź przykładowy ładunek , a następnie wybierz pozycję Gotowe.

      Zrzut ekranu przedstawiający wyzwalacz żądania o nazwie Po odebraniu żądania HTTP oraz przykładowy ładunek JSON.

      Wygenerowany schemat jest teraz wyświetlany w wyzwalaczu.

      Zrzut ekranu przedstawia schemat JSON wygenerowany na podstawie przykładowego ładunku JSON.

      W edytorze widoku kodu możesz przejrzeć podstawową definicję JSON wyzwalacza żądania :

      "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"
                           }
                        }
                     }
                  }
               }
            }
         }
      }
      
    4. Aby uruchomić przepływ pracy, uzyskaj URL przepływu pracy lub HTTP URL wyzwalacza, które są generowane po pierwszym zapisaniu przepływu pracy.

    5. Aby przetestować przepływ pracy, użyj narzędzia klienta lub aplikacji, z której można wysłać żądanie HTTP do adresu URL przepływu pracy lub adresu URL wyzwalacza. Upewnij się, że żądanie zawiera nagłówek o nazwie Content-Type oraz wartość nagłówka jest ustawiona na application/json.

  • Analizowanie akcji JSON

    Jeśli używasz tej akcji w projektancie, 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.

    Zrzut ekranu przedstawia akcję Analizowanie kodu JSON ze schematem wygenerowanym na podstawie przykładu.

text/plain

Jeśli przepływ pracy odbiera żądania HTTP, w których wartość nagłówka Content-Type to text/plain. Usługa Azure Logic Apps przechowuje i obsługuje zawartość w postaci nieprzetworzonej. Jeśli odwołujesz się do tej zawartości lub używasz jej w dalszych działaniach przepływu pracy bez rzutowania lub konwersji, żądania wychodzące również mają wartość nagłówka ustawioną na Content-Type.

Załóżmy na przykład, że pracujesz z plikiem płaskim, a przychodzące żądanie HTTP ma wartość nagłówka ustawioną Content-Type na :text/plain

Date,Name,Address
Oct-1,Frank,123 Ave

Jeśli wyślesz to żądanie do kolejnej akcji, która używa treści żądania do wysłania innego żądania, drugie żądanie ma również wartość nagłówka ustawioną Content-Type na text/plain. Jeśli pracujesz z danymi w postaci zwykłego tekstu, ale nie określono nagłówka, możesz ręcznie rzutować te dane na tekst przy użyciu string() funkcji, na przykład:

string(triggerBody())

application/xml i application/octet-stream

Usługa Azure Logic Apps zawsze zachowuje wartość nagłówka Content-Type w przychodzącym żądaniu HTTP lub odpowiedzi. Jeśli przepływ pracy odbiera zawartość z ustawioną wartością Content-Typeapplication/octet-stream i dołączasz tę zawartość do kolejnej akcji bez rzutowania, żądanie wychodzące również ustawia Content-Type na application/octet-stream. Takie podejście zapewnia, że dane nie zostaną utracone podczas przechodzenia przez przepływ pracy. W stanowych przepływach pracy stan kolejnej akcji, 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 Azure Logic Apps konwertuje zawartość na binarny ciąg zakodowany w formacie base64. Ten ciąg zawiera odpowiednie metadane, które zachowują zarówno zawartość $content, jak i $content-type, i są automatycznie konwertowane.

Poniższa lista zawiera opis sposobu konwertowania zawartości przez usługę Azure Logic Apps podczas korzystania z określonych 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 typu data.
  • dataUriToBinary(): konwertuje URI danych na ciąg znaków binarnych.
  • dataUriToString(): Konwertuje URI danych na ciąg znaków.

Załóżmy na przykład, że wyzwalacz przepływu pracy odbiera żądanie HTTP, w którym Content-Type ustawiono application/xml, a zawartość wygląda jak w poniższym przykładzie:

<?xml version="1.0" encoding="UTF-8" ?>
<CustomerName>Frank</CustomerName>

Tę zawartość można rzutować przy użyciu następującego wyrażenia, które używa funkcji xml() i funkcji triggerBody().

xml(triggerBody())

Następnie możesz użyć wynikowej zawartości w kolejnych krokach w przebiegu pracy. Możesz też użyć następującego wyrażenia, które używa funkcji xpath() i xml().

xpath(xml(triggerBody()), '/CustomerName')

Inne typy zawartości

Usługa Azure Logic Apps obsługuje inne typy zawartości, ale może wymagać ręcznego pobrania treści komunikatu z żądania HTTP przez dekodowanie zmiennej $content .

Załóżmy na przykład, że przepływ pracy odbiera żądanie HTTP, w którym wartość Content-Type jest ustawiona na application/x-www-url-formencoded. Aby zachować wszystkie dane, treść żądania zawiera $content zmienną, w której ładunek jest zakodowany jako ciąg base64:

CustomerName=Frank&Address=123+Avenue

Ten typ zawartości nie jest w formacie zwykłego tekstu ani w formacie JSON, dlatego Azure Logic Apps przechowuje te dane przy użyciu następujących zmiennych: CustomerName=Frank&Address=123+Avenue, $content-type oraz $content.

"body": {
   "$content-type": "application/x-www-url-formencoded",
   "$content": "AAB1241BACDFA=="
}

Usługa Azure Logic Apps obejmuje również 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 poniższy przykład:

string(body('formdataAction'))

Aby złożyć żądanie wychodzące, użyj application/x-www-url-formencoded jako wartości nagłówka Content-Type, dodaj zawartość żądania do treści akcji bez rzutowania, korzystając z wyrażenia takiego jak body('formdataAction'). Ta metoda działa tylko wtedy, gdy treść akcji jest jedynym parametrem body w obiekcie inputs. Jeśli używasz body('formdataAction') wyrażenia w żądaniu, w którym typ zawartości to application/json, zostanie wyświetlony błąd środowiska uruchomieniowego, ponieważ treść jest wysyłana zakodowana.