Bagikan melalui


Menangani jenis konten di Azure Logic Apps

Berlaku untuk: Azure Logic Apps (Konsumsi + Standar)

Berbagai jenis konten dapat mengalir melalui aplikasi logika seperti JSON, XML, file flat, dan data biner. Meskipun Logic Apps mendukung semua jenis konten, beberapa di antaranya memiliki dukungan asli dan tidak memerlukan transmisi atau konversi di aplikasi logika Anda. Jenis lainnya mungkin memerlukan transmisi atau konversi jika diperlukan. Artikel ini menjelaskan cara Logic Apps menangani jenis konten dan bagaimana Anda dapat membuat atau mengonversi jenis ini dengan benar jika diperlukan.

Untuk menentukan cara yang sesuai untuk menangani jenis konten, Logic Apps bergantung pada nilai header Content-Type dalam panggilan HTTP, seperti:

application/json

Logic Apps menyimpan dan menangani permintaan apa pun dengan jenis konten application/json sebagai objek JavaScript Notation (JSON). Secara default, Anda dapat mengurai konten JSON tanpa transmisi apa pun. Untuk mengurai permintaan yang memiliki header dengan jenis konten "application/json", Anda dapat menggunakan ekspresi. Contoh ini mengembalikan nilai dog dari array animal-type tanpa transmisi:

@body('myAction')['animal-type'][0]

{
  "client": {
     "name": "Fido",
     "animal-type": [ "dog", "cat", "rabbit", "snake" ]
  }
}

Jika Anda bekerja dengan data JSON yang tidak menentukan header, Anda dapat mentransmisikan data tersebut ke JSON secara manual dengan menggunakan fungsi json(), seperti:

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

Membuat token untuk properti JSON

Logic Apps memberikan kemampuan bagi Anda untuk menghasilkan token yang mudah digunakan yang mewakili properti dalam konten JSON, sehingga Anda dapat mereferensikan dan menggunakan properti tersebut dengan lebih mudah dalam alur kerja aplikasi logika Anda.

  • Pemicu permintaan

    Saat Anda menggunakan pemicu ini di Perancang Aplikasi Logika, Anda dapat memberikan skema JSON yang menjelaskan payload yang anda harapkan untuk diterima. Perancang tersebut menguraikan konten JSON dengan menggunakan skema ini dan menghasilkan token yang mudah digunakan yang mewakili properti dalam konten JSON Anda. Kemudian, Anda dapat dengan mudah mereferensikan dan menggunakan properti tersebut di seluruh alur kerja aplikasi logika Anda.

    Jika Anda tidak memiliki skema, Anda dapat menghasilkannya.

    1. Di Pemicu permintaan, pilih Gunakan payload sampel untuk menghasilkan skema.

    2. Di bawah Masukkan atau tempel payload sampel JSON, berikan payload sampel lalu pilih Selesai. Contohnya:

      Cuplikan layar yang memperlihatkan tindakan

      Skema yang dihasilkan sekarang muncul dalam pemicu Anda.

      Memberikan payload sampel JSON

      Berikut adalah definisi yang mendasari Pemicu permintaan Anda di editor tampilan kode:

      "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. Dalam permintaan HTTP yang dikirim aplikasi klien Anda ke Azure Logic Apps, pastikan Anda menyertakan header bernama Content-Type, dan atur nilai header ke application/json.

  • Mengurai tindakan JSON

    Saat Anda menggunakan tindakan ini di Perancang Aplikasi Logika, Anda dapat mengurai output JSON dan menghasilkan token yang mudah digunakan yang mewakili properti dalam konten JSON Anda. Kemudian, Anda dapat dengan mudah mereferensikan dan menggunakan properti tersebut di seluruh alur kerja aplikasi logika Anda. Mirip dengan Pemicu permintaan, Anda dapat menyediakan atau menghasilkan skema JSON yang menjelaskan konten JSON yang ingin Anda uraikan. Dengan demikian, Anda dapat lebih mudah mengonsumsi data dari Azure Service Bus, Azure Cosmos DB, dan sebagainya.

    Menguraikan JSON

text/plain

Jika aplikasi logika Anda menerima pesan HTTP dengan header Content-Type yang diatur ke text/plain, aplikasi logika Anda menyimpan pesan tersebut dalam bentuk mentah. Jika Anda menyertakan pesan ini dalam tindakan berikutnya tanpa transmisi, permintaan keluar dengan header Content-Type yang diatur ke text/plain.

Misalnya, saat Anda bekerja dengan file flat, Anda mungkin mendapatkan permintaan HTTP dengan header Content-Type yang diatur ke jenis konten text/plain:

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

Jika Anda kemudian mengirim permintaan ini dalam tindakan selanjutnya sebagai isi untuk permintaan lain, seperti @body('flatfile'), permintaan kedua tersebut juga memiliki header Content-Type yang diatur ke text/plain. Jika Anda bekerja dengan data yang merupakan teks plain tetapi tidak menentukan header, Anda dapat mentransmisikan data tersebut ke teks secara manual dengan menggunakan fungsi string() seperti ekspresi ini:

@string(triggerBody())

application/xml dan application/octet-stream

Logic Apps selalu mempertahankan Content-Type di permintaan atau respons HTTP yang diterima. Jadi, jika aplikasi logika Anda menerima konten dengan Content-Type yang diatur ke application/octet-stream, dan Anda menyertakan konten tersebut dalam tindakan selanjutnya tanpa transmisi, permintaan keluar telah mengatur Content-Type ke application/octet-stream. Dengan demikian, Logic Apps dapat menjamin bahwa data tidak hilang saat bergerak melalui alur kerja. Namun, status tindakan, atau input dan output, disimpan dalam objek JSON saat statusnya bergerak melalui alur kerja.

Fungsi pengonversi

Untuk mempertahankan beberapa jenis data, Logic Apps mengonversi konten ke string base64 dikodekan biner dengan metadata yang sesuai. Metadata ini mempertahankan payload $content dan $content-type, yang dikonversi secara otomatis.

Daftar ini menjelaskan bagaimana Logic Apps mengonversi konten saat Anda menggunakan fungsi-fungsi ini:

  • json(): Mentransmisikan data ke application/json
  • xml(): Mentransmisikan data ke application/xml
  • binary(): Mentransmisikan data ke application/octet-stream
  • string(): Mentransmisikan data ke text/plain
  • base64(): Mengonversi konten menjadi string base64 dikodekan
  • base64toString(): Mengonversi string base64 dienkode ke text/plain
  • base64toBinary(): Mengonversi string base64 dienkode ke application/octet-stream
  • dataUri(): Mengonversi string menjadi URI data
  • dataUriToBinary(): Mengonversi URI data ke string biner
  • dataUriToString(): Mengonversi URI data ke string

Misalnya, jika Anda menerima permintaan HTTP dengan Content-Type yang diatur ke application/xml, seperti konten ini:

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

Anda dapat mentransmisikan konten ini menggunakan ekspresi @xml(triggerBody()) dengan fungsi xml() dan triggerBody(), lalu menggunakan konten ini di lain waktu. Atau, Anda dapat menggunakan ekspresi @xpath(xml(triggerBody()), '/CustomerName') dengan fungsi xpath() dan xml().

Jenis konten lainnya

Logic Apps berfungsi dengan dan mendukung jenis konten lainnya, tetapi mungkin mengharuskan Anda mendapatkan isi pesan secara manual dengan mendekode variabel $content.

Misalnya, anggaplah aplikasi logika Anda dipicu oleh permintaan dengan jenis konten application/x-www-url-formencoded. Untuk mempertahankan semua datanya, variabel $content dalam isi permintaan tersebut memiliki payload yang dienkode sebagai string base64:

CustomerName=Frank&Address=123+Avenue

Karena permintaan tersebut bukan teks plain atau JSON, permintaan disimpan dalam tindakan sebagai berikut:

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

Logic Apps menyediakan fungsi asli untuk menangani data formulir, seperti:

Atau, Anda dapat mengakses datanya secara manual dengan menggunakan ekspresi seperti contoh ini:

@string(body('formdataAction'))

Jika Anda ingin agar permintaan keluar memilik header jenis konten application/x-www-url-formencoded yang sama, Anda dapat menambahkan permintaan tersebut ke isi tindakan tanpa transmisi apa pun menggunakan salah satu ekspresi seperti @body('formdataAction'). Namun, metode ini hanya berfungsi ketika isinya adalah satu-satunya parameter dalam input body. Jika Anda mencoba menggunakan ekspresi @body('formdataAction') dalam permintaan application/json, Anda akan menerima kesalahan runtime karena isinya dikirim dengan dienkode.