XML Entregrasyonu
Bir önceki yazıda kısa bir XML tanımına yer vermiş, ardından XML doküman yapısını oluşturan, düğüm ağacı dediğimiz bütünün dallarını ve yapraklarına karşılık gelen düğümler ve özellik (veya nitelik) tanımlarından bahsetmiştim.
Bu yazıda geliştiricilerden ziyade, web sitesi ve/veya uygulamalarını başka bir servis ile entegre etmek isteyen ancak nereden/nasıl başlayacağını bilemeyen kullanıcılara birkaç ek not aktarmak istiyorum.
Sistemler Arasında XML Kullanımı
Sistemler arasında bir XML dokümanı kullanılacağı zaman en temelde düğüm ağacının çözümlenmesi gerekir. Düğümlerin adları, var ise nitelik tanımları, kapsayıcı düğümler sistemde sisteme büyük farklılıklar taşıyabilir. Yani, özel bir geliştirme yapılmasıysa N111 tarafından kullanılan, anlamlandırılabilen XML içeriği ile Ideasoft yapısı birbirinden farklı olacaktır. Bu nedenle çeşitli ek geliştirmeler yani uyumluluk çalışmaları gerçekleştirilir. Bunun amacı iki sistemin aynı dokümandan aynı anlamı çıkarabilmesini sağlamaktır. Çoğu zaman bu geliştirmeler modül olarak ifade edilirler. Böylelikle Ideasoft, WooCommerce, OpenCart, PrestaShop ve daha pek çok alışveriş uygulaması üzerinden farklı amaçlara hizmet eden uygulamalar veya pazaryerleri için anlamlı XML çıktılarını dosya ya da bağlantı olarak alabilirsiniz. Aşağıdaki örnekleri bu bağlamda inceleyebilirsiniz.
Örnek 1
<SHOP>
<DATE_CREATED>2014-01-11 22:23</DATE_CREATED>
<SHOPITEM>
<PRODUCT_ID>28</PRODUCT_ID>
<MODEL>PRODUCT 1</MODEL>
<NAME>HTC TOUCH HD</NAME>
<PRICE>$100.000</PRICE>
<SPECIAL_PRICE/>
<PRODUCT_URL>http://....</PRODUCT_URL>
</SHOPITEM>
<SHOPITEM>
<PRODUCT_ID>29</PRODUCT_ID>
<MODEL>PRODUCT 2</MODEL>
<NAME>Palm Treo Pro</NAME>
<PRICE>$279.9900</PRICE>
<SPECIAL_PRICE/>
<PRODUCT_URL>http://....</PRODUCT_URL>
</SHOPITEM>
...
</SHOP>
Örnek 2
<root>
<Products>
<Product>
<Code>2491</Code>
<StockQty>65</StockQty>
<Barcode>49020570284087</Barcode>
</Product>
<Product>
<Code>2778</Code>
<StockQty>200</StockQty>
<Barcode>72020570064306</Barcode>
</Product>
<Product>
<Code>2838</Code>
<StockQty>140</StockQty>
<Barcode>8802057003726</Barcode>
</Product>
</Products>
</root>
PHP ile XML işlemleri, R ile sitemap (XML) çözümlemesi ve Node.js ile XML-JSON işlemleri başlıklı yazılarda da görüleceği üzere örnek çalışmalarda her yapıya göre ayrıca çözümler üretilmekte ve sadece gerekli düğümler çözümlenmekte. Elbette bu işlem sadece XML temelinde değil, HTML, JSON, YAML gibi veri barındıran dosyaların hepsi için benzer durumlar söz konusu olacaktır. Örneğin, ürün listesine ait bir XML dosyası ile ürüne ait detayların yer aldığı XML dosyası da aynı sistem içerisinde düğüm farklılıkları taşıyabilir.
Kaynak olarak bir XML dokümanının nasıl değerlendirilmesi gerektiğini anladığımıza göre, bir sonraki aşamaya geçebiliriz. Yukarıdaki örnekler arasından Örnek 1 ile devam edelim ve bu XML içeriğini WooCommerce sitesine aktarmak isteyelim. WooCommerce, eğer harici bir eklenti kullanmıyorsanız doğrudan XML desteği yerine REST API ve kanca desteği sunar; Node.js ile XML-JSON işlemleri başlıklı yazıda kod örneği üzerinden bu konuya değinmiştim, fikir sahibi olmak için inceleyebilirsiniz.
Şimdi, yukarıdaki XML düğüm yapısını WooCommerce yapısı ile eşleştirelim.
SHOP DATE_CREATED SHOPITEM PRODUCT_ID MODEL NAME PRICE SPECIAL_PRICE PRODUCT_URL SHOPITEM PRODUCT_ID MODEL NAME PRICE SPECIAL_PRICE PRODUCT_URL ... |
id name variation permalink sku description on_sale prices price ... average_rating review_count images id src thumbnails srcset sizes name alt ... has_options is_purchasable is_in_stock add_to_cart text description ... |
Görüldüğü üzere her iki yapı da ürün bilgilerini farklı seviyelerde ve farklı tanımlar altında tutmaktalar. Bir karşılaştırmada yaptığımızda ise elimizdeki ortak bilgilerin temel ürün detaylarını verdiğini görmekteyiz;
PRODUCT_ID = id
NAME = name
PRICE = prices.price
PRODUCT_URL = permalink
Bu aşamada entegrasyon, yani bu eşleme işlemi XML dokümanını oluşturan kaynakta, ara uygulama olarak veya hedefte (WooCommerce içerisinde) gerçekleştirilebilir. Genelde XML dokümanını oluşturan kaynaklar (web siteleri, stok uygulamaları vb.) dosya olarak aktarma özelliği ile gerçekleştirme eğilimi içerisindeler.
XML2WOO gibi eklentiler ise hedefte işlem gerçekleştirmekteler. Bu eklentiler dosya ya da bağlantı olarak anlayabildikleri içerikleri ilişkili oldukları sisteme doğrudan ya da bir kontrol eşleştirme işlemi sonrasında iletirler. XML2WOO doğrudan Ideasoft tarafından oluşturulan XML URL’ini WooCommerce içeriği haline getirir. Örneğin, eklentiye N11 tarafından oluşturulan bir XML dokümanı yüklerseniz bir işlem gerçekleştirmez çünkü XML dokümanlarındaki düğüm ağaçları farklıdır.
Bu yapının çift taraflı olması durumunda, yani WooCommerce değişikliklerinin XML doküman kaynağına iletilmesi gerektiğinde de bu defa entegrasyon işlemi diğer sisteme uygun olacak gerçekleştirilir ve o kaynağın anlayacağı bir bilgi içeriği oluşturulur. Özetle, her sistem entegrasyonu kendi özel geliştirme sürecine sahiptir.
Sistemler Entegrasyonu
Bir üst paragrafta servislerin haberleşme işlemlerinin kaynakta, ara uygulama olarak veya hedefte gerçekleştirilebileceğinden bahsetmiştim. Kaynağı ve hedefi anladığımıza göre bir de ara uygulama mantığına bakalım.
Ara uygulamalar belirli bir durum veya görev özelinde işlemler gerçekleştiren uygulamalar olarak ifade edilebilirler. Yukarıdaki örnek akış üzerinden devam edecek olursak, Ideasoft XML içeriğini WooCommerce’e aktarmak istiyoruz. Ideasoft bize bir XML bağlantısı veriyor. WooCommerce ise REST API’e sahip. XML2WOO esasında bir ara uygulama görevine sahip, sadece işlemleri hedef sistemi içerisinde gerçekleştirmekte. Ancak, performans veya özelleştirme gereksinimleri gibi nedenlerden ötürü kaynak kullanımını izole etmek isteyebiliriz.
mixture ve entegratoryum.com gibi sistemler bu hizmeti sunarlar. Bir ya da birden fazla kaynaktan veriyi alır ve bunu belirtilen bir ya da birden fazla hedefe, o hedeflerin anlayabileceği şekilde iletirler. Elbette bu tür yapılar için kaynağın ve hedefe bir protokol üzerinden (HTTP, FTP, SSH, Mail vb.) erişilebilir olması gerekmektedir.
İlerleyen zaman içerisinde pazaryerleri özelinde entegrasyon işlemlerine (ürün, kullanıcı davranışları, yorum analizi gibi bağlamlarda) dair daha fazla detay paylaşmaya çalışacağım.