Pipedream Üzerinde XML-JSON İşlemleri
Bir önceki yazıda Pipedream adında bir entegrasyon platformundan ve bu platformun ne tür amaçlarla, nasıl kullanılanıbileceğinden bahsetmiştim. Daha önce PHP ile gerçekleştirilen XML dosyası okuma ve sonucu bir uç noktaya iletme sürecini daha sonra Node.js ile yeniden ele aldık.
Bu örnek içerisinde xml2js ve express.js modüllerini kullanılmıştı. Bu yazıda tüm bu süreci farklı modüllerle pipedream üzerinden gerçekleştireceğiz.
Pipedream
Pipedream ile ilgili yazıyı okumayan ve doğrudan bu yazıya ulaşanlar için pipedream hakkında kısa bir açıklama düşelim. Pipedream, iş akışı oluşturarak sunucu ve altyapı sınırlandırmaları olmaksızın uygulamalar ve API‘ler arasında entegrasyonlar gerçekleştirebilmemizi sağlayan bir entegrasyon platformu. Pek çok hazır uygulama bağlantılar aracılığıyla bu iş akışına dahil edilebilmekte. Ek olarak, uygulamalar arasındaki işlemler kod müdahaleleri ile özelleştirilebilmekte. Kodlama işlemi Node.js temelinde JavaScript kodları ile gerçekleştirilmekte ve modüller kolaylıkla iş akışlarına eklenebilmekte.
Pipedream Üzerinden XML-JSON İşlemi
Node.js İle XML-JSON İşlemleri başlıklı yazıda bir XML kaynağını (URL ve/veya dosya) JSON çıktısı haline getirmiştik. Dolayısıyla aynı işlemi tekrarlamak yerine süreci farklı bir şekilde ele alalım. İlk olarak kullandığımız modülleri değiştirelim. Ardındaın, bu işlemi komut satırı üzerinden yürütelim.
İhtiyacımız olan kullanım şu olsun.
curl -d '{
"xml": "<xml-url>",
"to": "<target-url>"
}' \
-H "Content-Type: application/json" \
<pipedream-url>
Bu komut satırında curl ile bir hedefe: <pipedream-url>
2 değer iletmekteyiz; "xml": "<xml-url>"
ve "to": "<target-url>
. xml
bizim sahip olduğumuz bir XML yolunu (dosya da olabilirdi) to
ise XML’in dönüştürüleceği JSON çıktısının hangi URL’e iletileceğini belirtmekte.
XML örneklerinde daha önce node tanımlarını kullanmıştık. Bu defa attr tanımlarının olduğu bir örnek üzerinden ilerleyeceğim. xml-url
için bulduğum bir XML kaynağını kullanacağım. Websayfasındaki dükkan ID’lerini kullanarak farklı XML içeriklerini üretmek mümkün.
target-url
için ise webhook.site sitesinden faydalanacağım.
Sırada pipedream iş akışının oluşturulması var. Elbette uygulamamız gereği ilk olarak pipedream-url
için bir HTTP/Webhook tetikleyicisi oluşturmamız gerekmekte.
Bu bilgiler sonucunda komutumuzun eksik alanlarını tamamlamış olduk.
curl -d '{
"xml": "https://www.haydigiytoptan.com/FaprikaXml/DG36SX/1/",
"to": "https://webhook.site/ea994303-0ab3-4506-8b33-0f31f8cdb339"
}' \
-H "Content-Type: application/json" \
https://en5bxyd2ehwly83.m.pipedream.net
O halde bir sonraki aşamaya geçebiliriz. Yukarıdaki komutu uyguladığımızda pipedream hedefine 2 bilgi iletilmekte xml
ve to
. Ancak, bu bilgi elbette bir dönüşüme (encode) uğramakta. Dolayısıyla tekrar kullanılabilir (decode) hale getirmemiz gerekiyor. Dolayısıyla iş akışına bir sonraki adım olarak base64_decode_string
alanını eklemeliyiz.
Artık son adımıza geçebilir ve edindiğimiz bu bilgileri düzenleyerek belirtilen hedefe iletebiliriz. Kullanacağımız modüllerimiz fast-xml-parser1 ve axios2.
const parser = require('fast-xml-parser');
const axios = require('axios');
Son durumda elimizde decode
edilmiş bir string
ifade var.
{
"xml": "https://www.haydigiytoptan.com/FaprikaXml/DG36SX/1/",
"to": "https://webhook.site/fe1f0117-0cb5-4a60-bb79-43d68d14badb"
}
Bu ifadeyi tekrar JSON formatına dönüştürmemiz gerekiyor.
let XML_data = JSON.parse(steps.base64_decode_string.data);
Bundan sonraki aşama artık XML dosyasının getirilmesi ve JSON formatına dönüştürülmesi işlemlerini barındırmakta.
const parser = require('fast-xml-parser');
const axios = require('axios');
let XML_data = JSON.parse(steps.base64_decode_string.data);
const XML_url = XML_data.xml;
let XML_file = (await axios({
method: "GET",
url: XML_url,
}));
const options = {
attributeNamePrefix : "",
attrNodeName: "attr",
textNodeName : "#text",
ignoreAttributes : false,
ignoreNameSpace : false,
allowBooleanAttributes : false,
parseNodeValue : true,
parseAttributeValue : true,
trimValues: true,
arrayMode: false
};
if( parser.validate(XML_file.data) === true) {
try{
var jsonObj = parser.parse(XML_file.data, options, true);
}catch(error){
console.log(error.message)
}
}
await axios({
method: 'post',
url: XML_data.to,
data: jsonObj.Products
});
$respond({
body: 'OK'
})
Komut satırından yukarıda belirtilen komutu uyguladığımızda XMl içeriğimiz JSON olarak düzenlenerek belirtilen hedefe iletilecektir. İşlemin tamamlanmasının ardından konsoldan OK
dönüşünü alırsınız. Şimdi, hedef URL’imize bakalım.
Evet, komut satırı üzerinden ilettiğimiz kod başarı ile işleme alınmış görünüyor. İlgili iş akışına XML-JSON Command3 adıyla ulaşabilirsiniz. Son olarak, fast-xml-parser1 options
tanımlarına göre hareket etmekte. Dolayısıyla XML içeriğinize bağlı olarak bu alanları düzenlemeniz gerekebilir. Detaylı bilgi için GitHub4 ve örnek uygulama5 sayfasına göz atabilirsiniz.