> ## 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 tipinde API Proxy oluşturma

> SOAP veya REST-SOAP-REST API Proxy'lerde SOAP Action değerini düzeltebilirsiniz. SOAP versiyonu belirleyebilir (Content-Type ve namespace bazlı), SOAPAction ve Content-Type ayarları yapabilir ve SOAP 1.1 ile SOAP 1.2 işlemlerini gerçekleştirebilirsiniz

<Info>
  **WSDL URL'den Yükleme** WSDL dosyasını URL üzerinden yüklerken, spec URL'si kimlik doğrulama gerektiriyorsa **Spec Authorization Kullan** seçeneğini etkinleştirerek özel header'lar veya **Basic Auth** (kullanıcı adı/şifre) bilgilerini girebilirsiniz. **SSL / Sertifika Ayarları** bölümünde **Bağlantı Zaman Aşımı**, **SSL/TLS Ayarlarını Özelleştir**, **SSL Doğrulamayı Atla** ve **Sunucu Sertifikası Doğrulaması** ayarlarını yapılandırabilirsiniz. Yetkilendirme bilgileri, WSDL içindeki alt şema (XSD import) dosyalarının indirilmesinde de otomatik olarak kullanılır. Ayrıntılar için [API Proxy Oluşturma](/tr/develop/api-proxy-olusturma/api-proxy-olusturma) sayfasına bakınız.
</Info>

API proxy tipi SOAP veya REST-SOAP-REST olan Api Proxy'lerde, Apinizer'a gelen mesaj üzerinde yönlendirme sekmesinde **"SOAP Action değerini düzelt"** seçeneği seçilmiş ise aşağıdaki durumlara göre bazı değişiklikler yapılabilir.

Bu değişikliklerin yapılabilmesi için öncelikle gelen mesajın SOAP versiyonu belirlenir.

SOAP versiyonuna karar verilmesi için, İstek Başlığında gönderilen **Content-Type** değerine ve İstek Gövdesinde yer alan SOAP XML'in **namespace** değerine bakılır.

<Warning>
  Bu iki değerin farklı çıkması durumunda öncelik Content-Type başlığına verilir. Content-Type değerinin boş veya anlamsız olması durumunda SOAP versiyonu, SOAP XML'in namespace değerinden belirlenir.
</Warning>

## SOAP Versiyonu Belirleme

SOAP versiyonu belirleme yöntemleri aşağıda detaylandırılmıştır:

<AccordionGroup>
  <Accordion title="Content-Type ile Belirleme">
    SOAP versiyonu değeri Content-Type ile belirleniyorsa aşağıdaki kurallar uygulanır:

    * `text/xml` değeri ile başlıyorsa SOAP 1.1
    * `application/soap+xml` değeri ile başlıyorsa SOAP 1.2
    * `application/xop+xml` değeri ile başlıyorsa ve Content-Type değeri içindeki `type` değeri `text/xml` içeriyorsa SOAP 1.1
    * `application/xop+xml` değeri ile başlıyorsa ve Content-Type değeri içindeki `type` değeri `application/soap+xml` içeriyorsa SOAP 1.2

    olarak belirlenir.

    **Örnekler:**

    ```http theme={null}
    Content-Type: text/xml; charset=UTF-8
    → SOAP 1.1
    ```

    ```http theme={null}
    Content-Type: application/soap+xml; charset=UTF-8
    → SOAP 1.2
    ```

    ```http theme={null}
    Content-Type: application/xop+xml; type="text/xml"
    → SOAP 1.1
    ```

    ```http theme={null}
    Content-Type: application/xop+xml; type="application/soap+xml"
    → SOAP 1.2
    ```
  </Accordion>

  <Accordion title="Namespace ile Belirleme">
    SOAP versiyonu değeri SOAP XML'in namespace değeri ile belirleniyorsa aşağıdaki kurallar uygulanır:

    * Namespace değeri `http://schemas.xmlsoap.org/soap/envelope/` ise SOAP 1.1
    * Namespace değeri `http://www.w3.org/2003/05/soap-envelope` ise SOAP 1.2

    olarak belirlenir.

    **Örnek SOAP 1.1 Mesajı:**

    ```xml theme={null}
    <soap:Envelope 
      xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        {/* Mesaj içeriği */}
      </soap:Body>
    </soap:Envelope>
    ```

    **Örnek SOAP 1.2 Mesajı:**

    ```xml theme={null}
    <soap:Envelope 
      xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
      <soap:Body>
        {/* Mesaj içeriği */}
      </soap:Body>
    </soap:Envelope>
    ```
  </Accordion>
</AccordionGroup>

## SOAP Versiyonuna Göre İşlemler

SOAP versiyonu değeri belirlendiğinde aşağıdaki işlemler gerçekleştirilir:

1. SOAP versiyonuna göre SOAP XML'in namespace değeri düzeltilir.
2. SOAP versiyonuna göre aşağıdaki işlemler yapılır:

<AccordionGroup>
  <Accordion title="SOAP 1.1 İşlemleri">
    SOAP versiyonu 1.1 olan istekler için:

    1. İstek başlığında `soapaction` anahtar kelimesi varsa yazım şekli düzeltilerek yoksa `SOAPAction` şeklinde başlık eklenir.
    2. `SOAPAction` anahtar kelimesine eklenecek değer mesajın geldiği metoda ait olan ve WSDL tanımından ayrıştırılarak elde edilen SOAPAction değeridir.
    3. SOAPAction değerinin başına ve sonuna yoksa tırnak işareti eklenir.
    4. Content-Type değeri `text/xml` olarak belirlenir.
    5. Content-Type değerine varsa Character Encoding değeri eklenir, yoksa default olarak `;charset=UTF-8` değeri eklenir.

    **Örnek SOAP 1.1 İstek:**

    ```http theme={null}
    POST /service HTTP/1.1
    Content-Type: text/xml; charset=UTF-8
    SOAPAction: "http://example.com/GetUser"

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        {/* İstek içeriği */}
      </soap:Body>
    </soap:Envelope>
    ```
  </Accordion>

  <Accordion title="SOAP 1.2 İşlemleri">
    SOAP versiyonu 1.2 olan istekler için:

    1. Content-Type değeri `application/soap+xml` olarak belirlenir.
    2. Content-Type değerine varsa Character Encoding değeri eklenir, yoksa default olarak `;charset=UTF-8` değeri eklenir.
    3. Content-Type değerine `;action=<SOAPAction>` ifadesi eklenir.

    **Örnek SOAP 1.2 İstek:**

    ```http theme={null}
    POST /service HTTP/1.1
    Content-Type: application/soap+xml; charset=UTF-8; action="http://example.com/GetUser"

    <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
      <soap:Body>
        {/* İstek içeriği */}
      </soap:Body>
    </soap:Envelope>
    ```

    <Tip>
      SOAP 1.2'de SOAPAction header'ı yerine Content-Type içindeki `action` parametresi kullanılır. Bu, SOAP 1.1'den önemli bir farktır.
    </Tip>
  </Accordion>
</AccordionGroup>
