> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apinizer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SOAP REST Dönüşümü yapan API Proxy oluşturma

> SOAP Web Servisini REST API olarak sunabilirsiniz. Var olan servisleri mobil uygulamalar ya da JavaScript tabanlı Web uygulamaları tarafından kullanılabilir hale getirmek için protokol dönüşümü yapabilirsiniz. Jackson, JsonML ve Template Message transformation seçeneklerini kullanabilirsiniz

<Warning>
  Var olan servisin REST ile yeniden yazılması ya da metotlarını taklit eden yeni bir REST API geliştirilmesi seçenekleri zaman ve maliyet açısından etkin çözümler değildir.
</Warning>

<Info>
  Apinizer, SOAP Web servislerin REST olarak açılmasını ve bunun için gerekli bütün dönüşümlerin konfigürasyonla yapılabilmesini sağlar.
</Info>

## SOAP Web Servisten REST Tipinde API Proxy Oluşturma

<Steps>
  <Step title="WSDL Dosyasını Yükleyin">
    Yeni API Proxy oluşturulurken **WSDL** tipi için **URL Girme** ya da **Dosya Yükle (Upload File)** seçeneklerinden uygun olan seçilir. Bu örnekte URL Girme seçeneği kullanılmıştır.
  </Step>

  <Step title="Protokol Dönüşümünü Aktifleştirin">
    URL girilip **Parse** tuşuna basıldıktan sonra gelen ekranda **Protokol Dönüşümü (Protocol Transformation)** bölümünde **REST to SOAP to REST** seçeneği işaretlenir.
  </Step>

  <Step title="API Proxy'yi Oluşturun">
    Diğer zorunlu bilgiler de doldurularak API Proxy oluşturulur.
  </Step>
</Steps>

## Metot Dönüşüm Ayarları

API Proxy oluşturulduktan sonra, istenirse metotların istek ve yanıt mesajları için REST - SOAP mesaj yapıları arasında nasıl dönüşüm yapılacağı özelleştirilebilir.

<Steps>
  <Step title="Geliştirme Sekmesine Gidin">
    API Proxy'nin **Geliştirme (Development)** sekmesine gidilir.
  </Step>

  <Step title="Metot Listesini Seçin">
    Sol taraftaki metot listesinde **Hepsi (All)** seçiliyken, orta bölümde üstte istek ve altta yanıt mesajlarının dönüşüm ayarlarını açan simgeler görünür.
  </Step>

  <Step title="Dönüşüm Arayüzünü Açın">
    İstek mesajlarına ait olan simgeye tıklandığında protokol dönüşüm arayüzü açılır. Bu arayüzde **İstek Mesajı Seçenekleri (Request Options)** ve **Yanıt Mesajı Seçenekleri (Response Options)** sekmeleri bulunmaktadır. Kullanıcının hangi simgeye tıkladığına bağlı olarak ilgili sekme açılır.
  </Step>

  <Step title="Dönüşüm Ayarlarını Yapın">
    Bu arayüzde REST protokolüne uygun olarak gelen istek mesajının Backend API'ye gönderilmeden önce SOAP yapısına uygun hale nasıl getirileceğine ilişkin biçimlendirmeler yapılır. Sol taraftan mesaj yapısı güncellenecek olan metot seçilir. Sağ tarafta ise o metoda ilişkin dönüşüm ayarları yapılır.
  </Step>
</Steps>

## Dönüşüm Seçenekleri

Bir SOAP Servis istemcilere REST olarak açıldığı zaman istek ve yanıt mesajlarının dönüştürülmesi gerekir. İstemciden gelen JSON mesaj SOAP servise gönderilmeden önce XML mesajına, SOAP servisin döndürdüğü XML mesaj ise istemciye gönderilmeden önce JSON mesajına dönüştürülmelidir.

<Info>
  Bu dönüşümün yapılabilmesi için çeşitli seçenekler bulunmaktadır. Aşağıda her bir seçeneğin özellikleri ve kullanım alanları açıklanmaktadır.
</Info>

<CardGroup cols={3}>
  <Card title="Jackson Transformation" icon="code">
    İstek ve yanıt mesajlarında kullanılacak olan JSON mesajının sade ve kolay anlaşılabilir olması gereken durumlarda tercih edilir. Diğerlerine göre oldukça özelleştirilebilir.

    <Tip>
      En çok tercih edilen yöntemdir.
    </Tip>
  </Card>

  <Card title="JsonML Transformation" icon="code">
    İstek ve yanıt mesajlarında kullanılacak olan JSON mesajının XML Attribute değerlerini ve XML Namespace'lerini de içermesi isteniyorsa tercih edilir.

    <Warning>
      Diğerlerine göre JSON formatı daha karışıktır. Gösterimindeki Namespace'lerden dolayı XML gösterime benzediğinden veri büyüklüğü artar.
    </Warning>
  </Card>

  <Card title="Template Message" icon="file-code">
    Gelen JSON mesajının hangi formatta olduğundan bağımsız, SOAP Servise gönderilecek olan XML şablonunu oluşturmak mantığı üzerine çalışır. XML şablonundaki parametrelerin doldurulması için "istek/yanıt verisi düzenlemesi (request/response data manipulation)" kullanılır.

    <Warning>
      Çoklu alt eleman desteği olmadığından, basit yapıdaki XML'lerin olduğu durumda kullanışlıdır.
    </Warning>

    Özellikle JSON mesajı yerine istek başlığı (request header) veya parametresinden (request parameter) veri alınıp çalışılmak isteniyorsa tercih edilir.
  </Card>
</CardGroup>

## İstek Mesajları Dönüşüm Seçenekleri

Bu bölümde istek mesajlarının dönüşüm seçeneklerinin detayları anlatılmaktadır.

<AccordionGroup>
  <Accordion title="Jackson Dönüşümü Kullan (Use Jackson Transformation)">
    Jackson Transformation için kullanılabilen alanlar ve açıklamaları:

    <CardGroup cols={2}>
      <Card title="NULL Değerleri Görmezden Gel" icon="eye-slash">
        **Alan:** NULL değerleri görmezden gel (Ignore fields with NULL)

        İşaretlenirse, Backend API'ye gönderilecek XML mesajın içine, istekte gelen JSON mesajdaki NULL değerleri XML Element olarak eklenmez.
      </Card>

      <Card title="Boş Değerleri Görmezden Gel" icon="eye-slash">
        **Alan:** Boş değerleri görmezden gel (Ignore EMPTY fields)

        İşaretlenirse, Backend API'ye gönderilecek XML mesajın içine, istekte gelen JSON mesajdaki boş değerler XML Element olarak eklenmez.
      </Card>

      <Card title="xsi:nil Kullan" icon="code">
        **Alan:** NULL değerler için xsi:nil="true" kullan (Use xsi:nil="true" for NULL values)

        İşaretlenirse, Backend API'ye gönderilecek XML mesajın içine, istekte gelen JSON mesajdaki NULL değerleri için `xsi:nil="true"` niteliği kullanılır. Aksi taktirde XML mesajın içine ilgili değer için boş eleman eklenir.

        <Info>
          Değerinin aktifleştirilmesi, json mesajında null olarak gönderilen değerin xml'e dönüştürülürken xsi:nil="true" alanı eklenerek iletilmesini sağlar.
        </Info>
      </Card>

      <Card title="Hedef XPath" icon="route">
        **Alan:** Hedef XPath (Target XPath)

        Gelen JSON mesajı XML'e dönüştürüldükten sonra elde edilen XML'in, SOAP servisin beklediği XML mesajın içinde nereye koyulacağını belirtir.
      </Card>

      <Card title="Alt Elemanları Değiştir" icon="arrows-rotate">
        **Alan:** Alt Elemanları Değiştir (Replace Children)

        Seçenek işaretlenirse, Target XPath'in çıktı öğesinin alt öğeleri silinerek JSON'dan dönüştürülen kısım bunların yerine eklenir. Aksi takdirde eleman tamamen değiştirilir.
      </Card>

      <Card title="Dizi Olan Elemanlar" icon="list">
        **Alan:** Dizi olan elemanlar (Paths for Arrays within message)

        JSON mesajın içinde hangi bölümlerin array olarak yorumlanması gerektiğini belirtir. Her bir Path, Hedef XPath'in seviyesinden (Hedef XPath verilmemişse en üst seviyeden) başlayarak ve seviyeler arasına `#` işareti koyularak yazılır.

        **Örnek:** `"envelope#body#abc"` ifadesi, "envelope" içindeki, "body"'nin içindeki "abc" elemanının array olarak işleme alınacağını belirtir.

        <Warning>
          **Array İçinde Array Olduğu Zaman:** Array içinde array olması durumunda ve bazı objeler bazen array bazen tekil şekilde geliyorsa, en dıştaki Array'in pathinden başlanarak yazılır ve alttaki objeye inerken array olan ifadelerden sonra `#*` ifadesi eklenmesi gerekir. Örneğin abc elementi array ve içinde def elementi array olarak yer alıyorsa `"envelope#body#abc, envelope#body#abc#*#def"` sırasıyla yazılmalıdır.
        </Warning>
      </Card>
    </CardGroup>
  </Accordion>
</AccordionGroup>
