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 (jenis asli)
- text/plain (jenis asli)
- application/xml dan application/octet-stream
- Jenis konten lainnya
application/json
Logic Apps menyimpan dan menangani permintaan apa pun dengan jenis konten aplikasi/json sebagai objek JavaScript Object 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')['client']['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())['client']['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.
Di Pemicu permintaan, pilih Gunakan contoh payload untuk membuat skema.
Di bawah Masukkan atau tempel payload sampel JSON, berikan payload sampel lalu pilih Selesai. Contohnya:
Skema yang dihasilkan sekarang muncul dalam pemicu Anda.
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" } } } } } } } }
Dalam permintaan HTTP yang dikirim aplikasi klien Anda ke Azure Logic Apps, pastikan Anda menyertakan header bernama Content-Type, dan atur nilai header ke aplikasi/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.
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 keapplication/json
-
xml()
: Mentransmisikan data keapplication/xml
-
binary()
: Mentransmisikan data keapplication/octet-stream
-
string()
: Mentransmisikan data ketext/plain
-
base64()
: Mengonversi konten menjadi string base64 dikodekan -
base64toString()
: Mengonversi string base64 dienkode ketext/plain
-
base64toBinary()
: Mengonversi string base64 dienkode keapplication/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.