Catch Data SOA Yang Menyenangkan

Pada saat kita bekerja dengan NodeJS, dan harus melakukan request dan response menggunakan SOA, bukan REST, ada kalanya kita akan mengalami kesulitan. Meskipun banyak sekali module-module di NPM yang menawarkan kemudahan untuk masalah ini, namun tanpa bantuan module-module tersebut, kita bisa juga mengolah SOA melalui cara yang cukup menyenangkan.

Sebagai contoh, untuk catch data dari tagname XML tertentu, kita cukup menggunakan fungsi match.

// rows adalah respon SOA.
     var rows = '<soapenv:Envelope' +
          'xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/”' +
          'xmlns:xsd=”http://www.w3.org/2001/XMLSchema”' +
          'xmlns:ns1=”http://cisco.com/mwtm”>' +
               '<soapenv:Body>' +
                    '<ans:getNoteResponse xmlns:ans=”http://cisco.com/mwtm”>' +
                         '<note>An example note</note>' +
                    '</ans:getNoteResponse>' +
               '</soapenv:Body>' +
          '</soapenv:Envelope>';

Ada data di dalam contoh respon SOA di atas yang ingin kita ambil, data note misalnya. Tidak udah khawatir dengan tag-tag lainnya, cukup cari saja tag yang kita inginkan, kemudian ambil nilainya.

// Biasanya respon SOA ini berupa satu string.
     var rows = '<soapenv:Envelope' +
           'xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/”' +
           'xmlns:xsd=”http://www.w3.org/2001/XMLSchema”' +
           'xmlns:ns1=”http://cisco.com/mwtm”>' +
               '<soapenv:Body>' +
                    '<ans:getNoteResponse xmlns:ans=”http://cisco.com/mwtm”>' +
                         '<note>An example note</note>' +
                    '</ans:getNoteResponse>' +
                '</soapenv:Body>' +
          '</soapenv:Envelope>';

     // Mendapatkan data di dalam tag note.
     var note = rows.match("<note>(.*)</note>") ? rows.match("<note>(.*)</note>")[1] : '';

     console.log(note);

Kita tidak perlu menjadikan semua tag-tag SOA diatas menjadi REST—seperti yang dilakukan oleh kebanyakan module. Buat kodingan menjadi seefisien mungkin. Kita bisa membuat nya menjadi REST secara manual, dan tentunya lebih cepat prosesnya.

var output = new Object;
     var note = rows.match("<note>(.*)</note>") ? rows.match("<note>(.*)</note>")[1] : '';

     output = {
         code: '00',
         message: 'Proses berhasil',
         data: {
             note: note
         }
     };

     console.log(output);

Penanganan error nya kita bisa catch dulu tag error di SOA, default untuk tag error ini adalah: faultcode dengan pasangan message faultstring. tapi ga tentu juga sih, tergantung yang bikin spek. Cara lain yang lebih best practice adalah dengan menggunakan try catch. Gunakan pada saat kita mau catch data yang dinginkan. Atau, kita bisa bikin asumsi seperti ini:

try
     {
         var note = rows.match("<note>(.*)</note>")[1];

         console.log('Sukses');
     }
     catch(err)
     {
         // Jika data yang kita inginkan tidak ada, maka kita asumsikan sebagai error.
         var errCode = rows.match("<faultcode>(.*)</faultcode>")[1];

         console.log('Error');
     }

Cuman sekali lagi, sebelum melakukan penanganan error, kita harus tau dulu kebutuhan dan spek nya seperti apa. Fungsi match di atas cukup mumpuni untuk mengolah dan berkreasi dengan SOA, kita bisa sesuaikan dengan kebutuhan kita.

-&gt; <a href='https://www.dalikewara.com/catch-data-soa-yang-menyenangkan/'>https://www.dalikewara.com/catch-data-soa-yang-menyenangkan/</a>

avatar dalikewara
@dalikewara

351 Kontribusi 260 Poin

Dipost 6 tahun yang lalu

Belum ada Jawaban. Jadi yang pertama Jawaban

Login untuk ikut Jawaban