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.

AA

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.