> ## 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.

# REST API Proxy Oluşturma

> RESTful API'lerinizi Apinizer platformu üzerinden yönetebilir ve güvenli bir şekilde expose edebilirsiniz. OpenAPI/Swagger spesifikasyon dosyasından REST API Proxy oluşturabilir, SOAP Web servislerinizi REST olarak açabilir, URL veya dosya yükleyebilir, routing yapılandırması yapabilir ve JSON formatında mesaj işleme gerçekleştirebilirsiniz

<CardGroup cols={2}>
  <Card title="JSON Formatı" icon="code">
    REST API Proxy, JSON formatında mesaj işleme yapar. Request ve response mesajları JSON formatındadır.
  </Card>

  <Card title="HTTP Metodları" icon="network-wired">
    GET, POST, PUT, DELETE, PATCH gibi standart HTTP metodlarını destekler.
  </Card>

  <Card title="OpenAPI Desteği" icon="file-code">
    OpenAPI 2.0 (Swagger) ve OpenAPI 3.0 spesifikasyonlarını destekler.
  </Card>

  <Card title="Esnek Yapılandırma" icon="gear">
    Routing, politikalar ve ayarlar esnek bir şekilde yapılandırılabilir.
  </Card>
</CardGroup>

## REST API Proxy Oluşturma Yöntemleri

REST API Proxy oluşturmak için birkaç yöntem mevcuttur:

<AccordionGroup>
  <Accordion title="OpenAPI/Swagger Dosyasından Import">
    En yaygın yöntem, OpenAPI (Swagger) spesifikasyon dosyasından import etmektir. Bu yöntem, API'nizin tüm endpoint'lerini, parametrelerini ve şemalarını otomatik olarak içe aktarır.
  </Accordion>

  <Accordion title="Manuel Oluşturma">
    OpenAPI dosyası olmadan da manuel olarak REST API Proxy oluşturabilirsiniz. Bu durumda endpoint'leri ve şemaları manuel olarak tanımlamanız gerekir.
  </Accordion>

  <Accordion title="Mevcut API Proxy'den Kopyalama">
    Mevcut bir REST API Proxy'yi kopyalayarak yeni bir proxy oluşturabilirsiniz. Bu yöntem, benzer API'ler için zaman kazandırır.
  </Accordion>

  <Accordion title="SOAP Web Servisinden REST API Proxy Oluşturma">
    SOAP protokolü ile geliştirilmiş bir Web Servisin REST olarak açılması talebi özellikle, var olan servislerin yeni geliştirilen mobil uygulamalar ya da JavaScript tabanlı Web uygulamaları tarafından kullanılması gibi durumlarda sıklıkla ortaya çıkmaktadır. 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.
  </Accordion>
</AccordionGroup>

## OpenAPI/Swagger Dosyasından Import

<Steps>
  <Step title="API Proxy Oluşturma Sayfasına Gidin">
    Sol taraftaki ana menüde **Geliştirme → API Proxy'ler (Development → API Proxies)** ögesi seçilir. Açılan arayüzde sağ üstteki **+Add API Proxy** butonuna tıklanır ve **REST API** seçeneği seçilir.
  </Step>

  <Step title="OpenAPI Dosyasını Yükleyin">
    OpenAPI dosyasını yüklemek için üç yöntem mevcuttur:

    <AccordionGroup>
      <Accordion title="Yöntem 1: URL'den Yükleme">
        **URL Gir** bağlantısına tıklanır. OpenAPI/Swagger dosyasının URL'si girilir (örneğin: `https://petstore.swagger.io/v2/swagger.json`) ve **Parse** butonuna tıklanır. Dosya parse edilir ve API bilgileri görüntülenir.

        <Info>
          **URL Erişimi** URL'den yükleme yaparken, Apinizer'in bu URL'ye erişebilmesi gerekir. Eğer URL internal bir adres ise, Apinizer'in bu adrese erişim izni olduğundan emin olun.
        </Info>

        <Info>
          **Kimlik Doğrulama ve SSL** 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ı** panelinde **Bağlantı Zaman Aşımı**, **SSL/TLS Ayarlarını Özelleştir**, **SSL Doğrulamayı Atla** ve **Sunucu Sertifikası Doğrulaması** (Sistem Varsayılanı, TrustStore veya PEM) ile HTTPS erişimini yapılandırabilirsiniz. Detay için [API Proxy Oluşturma](/tr/develop/api-proxy-olusturma/api-proxy-olusturma) sayfasına bakınız.
        </Info>
      </Accordion>

      <Accordion title="Yöntem 2: Dosya Yükleme">
        **Dosya Yükle (Upload File)** butonuna tıklanır. Bilgisayarınızdan OpenAPI/Swagger dosyası seçilir (JSON veya YAML formatında). Dosya otomatik olarak parse edilir ve API bilgileri görüntülenir.
      </Accordion>

      <Accordion title="Yöntem 3: Metin Olarak Yapıştırma">
        **Metin Olarak Yapıştır (Paste as Text)** seçeneği seçilir. OpenAPI/Swagger içeriği metin alanına yapıştırılır ve **Parse** butonuna tıklanır. İçerik parse edilir ve API bilgileri görüntülenir.
      </Accordion>
    </AccordionGroup>
  </Step>

  <Step title="API Bilgilerini Kontrol Edin">
    Parse işlemi tamamlandıktan sonra, aşağıdaki bilgiler görüntülenir:

    <CardGroup cols={2}>
      <Card title="API Adı" icon="tag">
        API'nin adı (OpenAPI dosyasından alınır)
      </Card>

      <Card title="Versiyon" icon="code-branch">
        API versiyonu
      </Card>

      <Card title="Base URL" icon="link">
        API'nin base URL'i
      </Card>

      <Card title="Endpoint'ler" icon="list">
        Tüm endpoint'ler ve HTTP metodları
      </Card>

      <Card title="Şemalar" icon="file-code">
        Request ve response şemaları
      </Card>
    </CardGroup>
  </Step>

  <Step title="Routing Yapılandırması">
    <AccordionGroup>
      <Accordion title="Client Route (Relative Path)">
        Client Route, API Proxy'nin dış dünyaya açılan endpoint'idir. İstemciler bu endpoint üzerinden API'ye erişir.

        **Örnek:**

        ```
        Relative Path: /petstoreProxy
        ```

        Bu durumda API Proxy'ye şu şekilde erişilir:

        ```
        https://{apinizer-gateway}/petstoreProxy/pets
        ```
      </Accordion>

      <Accordion title="Upstream Target (Backend Address)">
        Upstream Target, backend REST API'nizin adresidir. API Proxy, istekleri bu adrese yönlendirir.

        <CardGroup cols={2}>
          <Card title="Tek Backend" icon="server">
            Tüm istekler tek bir backend adresine yönlendirilir.

            **Örnek:**

            ```
            https://api.example.com/v1
            ```
          </Card>

          <Card title="Dinamik Backend" icon="arrows-rotate">
            OpenAPI dosyasındaki `servers` veya `host` bilgisinden otomatik olarak alınır.

            **Örnek:**

            ```
            https://petstore.swagger.io/v2
            ```
          </Card>
        </CardGroup>
      </Accordion>
    </AccordionGroup>
  </Step>

  <Step title="API Proxy'yi Kaydedin">
    Tüm bilgiler kontrol edilir. **Relative Path** alanı doldurulur (zorunlu). **Upstream Target** bilgisi kontrol edilir veya düzenlenir. Sağ üstteki **Kaydet** butonuna tıklanır.
  </Step>
</Steps>

<Check>
  API Proxy başarıyla oluşturuldu!
</Check>

## Desteklenen OpenAPI Versiyonları

Apinizer, aşağıdaki OpenAPI versiyonlarını destekler:

* **OpenAPI 2.0 (Swagger 2.0)**: Tam destek
* **OpenAPI 3.0**: Tam destek
* **OpenAPI 3.1**: Tam destek

### OpenAPI 2.0 Özellikleri

* `swagger` alanı: `"2.0"` değeri
* `host`, `basePath`, `schemes` alanları
* `paths` ve `definitions` yapısı
* `parameters` ve `responses` tanımları

### OpenAPI 3.0/3.1 Özellikleri

* `openapi` alanı: `"3.0.0"` veya `"3.1.0"` değeri
* `servers` array'i
* `paths` ve `components` yapısı
* `requestBody` ve `responses` tanımları
* `securitySchemes` ve `security` tanımları

## Import Sonrası Yapılandırma

API Proxy oluşturulduktan sonra, aşağıdaki yapılandırmalar yapılabilir:

<CardGroup cols={2}>
  <Card title="HTTP Routing Yapılandırması" icon="route" href="/tr/develop/yonlendirme/http-yonlendirme">
    HTTP Routing, endpoint'lerin nasıl yönlendirileceğini belirler.
  </Card>

  <Card title="Politikalar Ekleme" icon="shield" href="/tr/develop/api-proxy-konfigurasyonu/politika-yonetimi">
    API Proxy'ye güvenlik, doğrulama, dönüştürme gibi politikalar eklenebilir.
  </Card>

  <Card title="Test Etme" icon="flask" href="/tr/develop/test-debug-araclari/test-console">
    API Proxy test edilebilir.
  </Card>

  <Card title="Yükleme ve Sürüm" icon="rocket" href="/tr/develop/yukleme-ve-surum-yonetimi">
    API Proxy ortam(lar)a deploy edilebilir.
  </Card>
</CardGroup>

## Yaygın Senaryolar

<AccordionGroup>
  <Accordion title="Senaryo 1: Public API'yi Proxy Etme">
    Bir public API'yi (örneğin, Petstore API) proxy etmek için:

    <Steps>
      <Step title="OpenAPI URL'sini Kullanın">
        Public API'nin OpenAPI dosyasının URL'si kullanılır.
      </Step>

      <Step title="Relative Path Belirleyin">
        Relative Path belirlenir (örneğin: `/petstoreProxy`).
      </Step>

      <Step title="Upstream Target Ayarlayın">
        Upstream Target olarak public API'nin base URL'i kullanılır.
      </Step>

      <Step title="Kaydedin ve Deploy Edin">
        API Proxy kaydedilir ve deploy edilir.
      </Step>
    </Steps>
  </Accordion>

  <Accordion title="Senaryo 2: Internal API'yi Expose Etme">
    Internal bir REST API'yi dış dünyaya expose etmek için:

    <Steps>
      <Step title="OpenAPI Dosyasını Yükleyin">
        Internal API'nin OpenAPI dosyası yüklenir.
      </Step>

      <Step title="Relative Path Belirleyin">
        Relative Path belirlenir.
      </Step>

      <Step title="Upstream Target Ayarlayın">
        Upstream Target olarak internal API'nin adresi kullanılır.
      </Step>

      <Step title="Güvenlik Politikaları Ekleyin">
        Authentication, Authorization, Rate Limiting gibi güvenlik politikaları eklenir.
      </Step>

      <Step title="Kaydedin ve Deploy Edin">
        API Proxy kaydedilir ve deploy edilir.
      </Step>
    </Steps>
  </Accordion>

  <Accordion title="Senaryo 3: API Versiyonlama">
    Farklı versiyonlar için ayrı API Proxy'ler oluşturmak için:

    <Steps>
      <Step title="Her Versiyon İçin Ayrı OpenAPI Dosyası">
        Her versiyon için ayrı OpenAPI dosyası kullanılır.
      </Step>

      <Step title="Farklı Relative Path'ler">
        Farklı Relative Path'ler kullanılır (örneğin: `/api/v1`, `/api/v2`).
      </Step>

      <Step title="Ayrı Politikalar">
        Her versiyon için ayrı politikalar tanımlanır.
      </Step>

      <Step title="Geçiş Stratejisi">
        Versiyonlar arasında geçiş stratejisi belirlenir.
      </Step>
    </Steps>
  </Accordion>
</AccordionGroup>

## En İyi Uygulamalar

<CardGroup cols={2}>
  <Card title="OpenAPI Dosyası Kalitesi" icon="file-code">
    OpenAPI dosyanızın geçerli ve güncel olduğundan emin olun. Geçersiz dosyalar import sırasında hata verebilir.
  </Card>

  <Card title="Relative Path Stratejisi" icon="route">
    Relative Path'ler için tutarlı bir isimlendirme kuralı kullanın. Örneğin: `/{servis-adı}/{versiyon}`
  </Card>

  <Card title="Backend Adresi" icon="server">
    Backend adreslerini environment variable olarak tanımlayın. Bu, farklı ortamlar için esneklik sağlar.
  </Card>

  <Card title="Güvenlik Politikaları" icon="shield">
    API Proxy oluşturduktan sonra mutlaka güvenlik politikaları ekleyin. Varsayılan olarak API'ler güvenli değildir.
  </Card>
</CardGroup>

## Sorun Giderme

<AccordionGroup>
  <Accordion title="Import Hatası">
    **Sorun:** OpenAPI dosyası import edilemiyor.

    **Çözüm:**

    * OpenAPI dosyasının geçerli JSON veya YAML formatında olduğundan emin olun.
    * OpenAPI versiyonunun desteklendiğinden emin olun.
    * URL erişilebilirliğini kontrol edin.
    * Dosya boyutunun limit içinde olduğundan emin olun.
  </Accordion>

  <Accordion title="Endpoint'ler Görünmüyor">
    **Sorun:** Import sonrası endpoint'ler görünmüyor.

    **Çözüm:**

    * OpenAPI dosyasında `paths` alanının doğru tanımlandığından emin olun.
    * Endpoint'lerin `paths` altında doğru şekilde tanımlandığını kontrol edin.
  </Accordion>

  <Accordion title="Routing Hatası">
    **Sorun:** İstekler backend'e yönlendirilmiyor.

    **Çözüm:**

    * Upstream Target adresinin doğru olduğundan emin olun.
    * Backend API'nin erişilebilir olduğunu kontrol edin.
    * HTTP Routing yapılandırmasını kontrol edin.
  </Accordion>
</AccordionGroup>

## SOAP Web Servisinden REST API Proxy Oluşturma

SOAP protokolü ile geliştirilmiş bir Web Servisin REST olarak açılması talebi özellikle, var olan servislerin yeni geliştirilen mobil uygulamalar ya da JavaScript tabanlı Web uygulamaları tarafından kullanılması gibi durumlarda sıklıkla ortaya çıkmaktadır. 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.

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.

### 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 (Enter URL)** ya da **Dosya Yükle (Upload File)** seçeneklerinden uygun olan seçilir. Bu örnekte URL Girme seçeneği kullanılmıştır.

    <img src="https://mintcdn.com/apinizer/lAHCA2K9cp96RLsT/images/develop/new-wsdl.png?fit=max&auto=format&n=lAHCA2K9cp96RLsT&q=85&s=054855b188217e44a188ad55fe903857" alt="Image 2024 9 9 15 35 35 Pn" width="1000" className="mr-auto" data-path="images/develop/new-wsdl.png" />
  </Step>

  <Step title="Protokol Dönüşümünü Seçin">
    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. Diğer zorunlu bilgiler de doldurularak API Proxy oluşturulur.

    <img src="https://mintcdn.com/apinizer/AUQqVw8DMxdhmm4N/images/develop/wsdl-create.png?fit=max&auto=format&n=AUQqVw8DMxdhmm4N&q=85&s=fe23554178d69c93548df3557180fc30" alt="Image 2024 9 9 15 35 35 Pn" width="1000" className="mr-auto" data-path="images/develop/wsdl-create.png" />
  </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. Bunun için API Proxy'nin **Geliştirme (Development)** sekmesine gidilir.

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.

<img src="https://mintcdn.com/apinizer/ZcdqzXb0ZF1OeNQr/images/develop/api-proxy-olusturma/rest3.png?fit=max&auto=format&n=ZcdqzXb0ZF1OeNQr&q=85&s=d37ae3c39b4e475835faf4cd3af18b5f" alt="Image 2024 9 9 15 35 35 Pn" width="1000" className="mr-auto" data-path="images/develop/api-proxy-olusturma/rest3.png" />

Örneğin istek mesajlarına ait olan simgeye tıklandığında aşağıdaki 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.

<img src="https://mintcdn.com/apinizer/ZcdqzXb0ZF1OeNQr/images/develop/api-proxy-olusturma/rest4.png?fit=max&auto=format&n=ZcdqzXb0ZF1OeNQr&q=85&s=f44453ed430e1eaf75de811bc4e3519f" alt="Image 2024 9 9 15 35 35 Pn" width="1000" className="mr-auto" data-path="images/develop/api-proxy-olusturma/rest4.png" />

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.

<img src="https://mintcdn.com/apinizer/ZcdqzXb0ZF1OeNQr/images/develop/api-proxy-olusturma/rest5.png?fit=max&auto=format&n=ZcdqzXb0ZF1OeNQr&q=85&s=7f5b4b6fe31cc4096383b4ad021e719c" alt="Image 2024 9 9 15 35 35 Pn" width="1000" className="mr-auto" data-path="images/develop/api-proxy-olusturma/rest5.png" />

### 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. Bu dönüşümün yapılabilmesi için çeşitli seçenekler bulunmaktadır:

<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. En çok tercih edilen yöntemdir.
  </Card>

  <Card title="JsonML Transformation" icon="file-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. 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.
  </Card>

  <Card title="Template Message" icon="file-text">
    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. Çoklu alt eleman desteği olmadığından, basit yapıdaki XML'lerin olduğu durumda kullanışlıdır. Ö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.

#### Jackson Dönüşümü Kullan (Use Jackson Transformation)

<img src="https://mintcdn.com/apinizer/ZcdqzXb0ZF1OeNQr/images/develop/api-proxy-olusturma/rest6.png?fit=max&auto=format&n=ZcdqzXb0ZF1OeNQr&q=85&s=5fd8a0bf51afbc180dbf0edb54315961" alt="Image 2024 9 9 15 35 35 Pn" width="1000" className="mr-auto" data-path="images/develop/api-proxy-olusturma/rest6.png" />

| Alan                                                                              | Açıklama                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **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.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| **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.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| **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. 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.                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| **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.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| **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.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| **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. <br /><br /> **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. |
| **İstek Verisi Düzenlemesi** (Request Data Manipulation)                          | Orijinal isteğin herhangi bir bölümü dönüştürülmüş isteğin belirtilen bir bölümüne aktarılabilir. Kaynak Değer/Değişken, orijinal istek mesajının hangi bölümünün aktarılacağını, Hedef Değer/Değişken ise Kaynak Değer/Değişken ile belirtilen bölümün dönüştürülmüş mesaj içinde nereye koyulacağını belirtir.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| **Örnek Mesaj Göster** (Show Sample Message)                                      | Ayarlara göre oluşan İstek Mesajı görüntülenebilir.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |

**Dönüştürülmüş Mesaj Örneği:**

| API Proxy'nin İstemciden Beklediği JSON İstek Mesajı | Backend API/Servisin beklediği XML İstek Mesajı                                                                                                                                                                                    |
| ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `{ "Add": { "intB": "?", "intA": "?" } }`            | `<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/"> <soap:Header/> <soap:Body> <tem:Add> <tem:intA>?</tem:intA> <tem:intB>?</tem:intB> </tem:Add> </soap:Body> </soap:Envelope>` |

#### JsonML Dönüşümü Kullan (Use JsonML Transformation)

<img src="https://mintcdn.com/apinizer/ZcdqzXb0ZF1OeNQr/images/develop/api-proxy-olusturma/rest7.png?fit=max&auto=format&n=ZcdqzXb0ZF1OeNQr&q=85&s=0f0623c0fd9cf79734eefca90cd2d798" alt="Image 2024 9 9 15 35 35 Pn" width="1000" className="mr-auto" data-path="images/develop/api-proxy-olusturma/rest7.png" />

| Alan                                                     | Açıklama                                                                                                                                                                                                                                                                                                         |
| -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **JSON Nesnesi kullan** (Use JSON Object)                | XML Elemanlarını JSON Nesneleri (JSON Objects) olarak dönüştürür.                                                                                                                                                                                                                                                |
| **JSON Dizisi kullan** (Use JSON Array)                  | XML Elemanlarını JSON Dizisi (JSON Array) olarak dönüştürür.                                                                                                                                                                                                                                                     |
| **İstek Verisi Düzenlemesi** (Request Data Manipulation) | Orijinal isteğin herhangi bir bölümü dönüştürülmüş isteğin belirtilen bir bölümüne aktarılabilir. Kaynak Değer/Değişken, orijinal istek mesajının hangi bölümünün aktarılacağını, Hedef Değer/Değişken ise Kaynak Değer/Değişken ile belirtilen bölümün dönüştürülmüş mesaj içinde nereye koyulacağını belirtir. |
| **Örnek Mesaj Göster** (Show Sample Message)             | Ayarlara göre oluşan İstek Mesajı görüntülenebilir.                                                                                                                                                                                                                                                              |

**Dönüştürülmüş Mesaj Örneği:**

| Dönüşüm Tipi | API Proxy'nin İstemciden Beklediği JSON İstek Mesajı                                                                                                                                                                | Backend API/Servisin beklediği XML İstek Mesajı                                                                                                                                                                                    |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| JSON Object  | `{ "soap:Envelope": { "xmlns:tem": "http://tempuri.org/", "soap:Header": "", "xmlns:soap": "http://www.w3.org/2003/05/soap-envelope", "soap:Body": { "tem:Add": { "tem:intA": "?", "tem:intB": "?" } } } }`         | `<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/"> <soap:Header/> <soap:Body> <tem:Add> <tem:intA>?</tem:intA> <tem:intB>?</tem:intB> </tem:Add> </soap:Body> </soap:Envelope>` |
| JSON Array   | `[ "soap:Envelope", { "xmlns:tem": "http://tempuri.org/", "xmlns:soap": "http://www.w3.org/2003/05/soap-envelope" }, [ "soap:Header" ], [ "soap:Body", [ "tem:Add", [ "tem:intA", "?" ], [ "tem:intB", "?" ] ] ] ]` | `<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/"> <soap:Header/> <soap:Body> <tem:Add> <tem:intA>?</tem:intA> <tem:intB>?</tem:intB> </tem:Add> </soap:Body> </soap:Envelope>` |

#### Şablon Mesajını Kullan (Use Template Message)

<img src="https://mintcdn.com/apinizer/ZcdqzXb0ZF1OeNQr/images/develop/api-proxy-olusturma/rest8.png?fit=max&auto=format&n=ZcdqzXb0ZF1OeNQr&q=85&s=c80be8528425b2d69c659a1f743dc2b9" alt="Image 2024 9 9 15 35 35 Pn" width="1000" className="mr-auto" data-path="images/develop/api-proxy-olusturma/rest8.png" />

| Alan                                                   | Açıklama                                                                                                                                                                                                                                                                                                         |
| ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Şablon Message** (Template Message)                  | Backend API/Servisin beklediği XML istek mesajı şablonu                                                                                                                                                                                                                                                          |
| **İstek Veri Düzenlemesi** (Request Data Manipulation) | Orijinal isteğin herhangi bir bölümü dönüştürülmüş isteğin belirtilen bir bölümüne aktarılabilir. Kaynak Değer/Değişken, orijinal istek mesajının hangi bölümünün aktarılacağını, Hedef Değer/Değişken ise Kaynak Değer/Değişken ile belirtilen bölümün dönüştürülmüş mesaj içinde nereye koyulacağını belirtir. |

### Yanıt Mesajları Dönüşüm Seçenekleri

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

#### Jackson Dönüşümü Kullan (Use Jackson Transformation)

<img src="https://mintcdn.com/apinizer/ZcdqzXb0ZF1OeNQr/images/develop/api-proxy-olusturma/rest9.png?fit=max&auto=format&n=ZcdqzXb0ZF1OeNQr&q=85&s=be9803ad38b5d769f897447fc5eb99d8" alt="Image 2024 9 9 15 35 35 Pn" width="1000" className="mr-auto" data-path="images/develop/api-proxy-olusturma/rest9.png" />

| Alan                                                                                  | Açıklama                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **NULL değerleri görmezden gel** (Ignore fields with NULL)                            | Seçili ise, Backend API'den gelen XML mesajdaki, NULL alanlar JSON mesaja eklenmez.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| **Boş değerleri görmezden gel** (Ignore EMPTY fields)                                 | Seçili ise, Backend API'den gelen XML mesajdaki, NULL alanlar JSON mesaja boş değer olarak eklenmez.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| **Numerik değerleri String olarak yaz** (Write Numbers as Strings)                    | Seçili ise numerik değerler JSON mesaja string olarak yazılır.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| **NULL değerler için xsi:nil="true" kullan** (Use xsi:nil="true" for NULL values)     | XML mesajda xsi:nil="true" niteliği ile gelen verilerin json'a dönüştürülürken null olarak iletilmesini sağlar.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| **Kaynak XPath** (Source XPath)                                                       | XML olarak dönen yanıt mesajının JSON'a dönüştürülecek olan kısmının XPath'ini girilir.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| **Elemanı Çöz** (Unwrap Element)                                                      | İşaretlenirse, Kaynak XPath ile verilen elemanın içini (çocuklarını), işaretlenmezse elemanın kendisini (içindekilerle/çocuklarıyla beraber) dönüştürür.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| **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. <br /><br /> **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. |
| **Başarı Durumunda Yanıt Verisi Düzenlemesi** (Response Data Manipulation on Success) | Orijinal yanıtın herhangi bir bölümü dönüştürülmüş yanıtın belirtilen bir bölümüne aktarılabilir. Kaynak Değer/Değişken, orijinal yanıt mesajının hangi bölümünün aktarılacağını, Hedef Değer/Değişken ise Kaynak Değer/Değişken ile belirtilen bölümün dönüştürülmüş mesaj içinde nereye koyulacağını belirtir. Tanımlanan işlemler yalnızca Backend API/Servisin başarılı yanıt döndürmesi durumunda gerçekleştirilir.                                                                                                                                                                                                                                                                                                                                                                                                  |
| **Örnek Mesaj Göster** (Show Sample Message)                                          | Ayarlara göre oluşan Yanıt Mesajı görüntülenebilir.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |

**Dönüştürülmüş Mesaj Örneği:**

| Backend API/Servisin döndürdüğü XML Yanıt Mesajı                                                                                                                                                                                                                                                                                             | API Proxy'nin İstemciye Döndürdüğü JSON Yanıt Mesajı |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
| `<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <AddResponse xmlns="http://tempuri.org/"> <AddResult>?</AddResult> </AddResponse> </soap:Body> </soap:Envelope>` | `{ "AddResponse" : { "AddResult" : "?" } }`          |

#### JsonML Dönüşümü kullan (Use JsonML Transformation)

| Alan                                                                                  | Açıklama                                                                                                                                                                                                                                                                                                                                                                                                                 |
| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **JSON Nesnesi kullan** (Use JSON Object)                                             | XML Elemanlarını JSON Nesneleri (JSON Objects) olarak dönüştürür.                                                                                                                                                                                                                                                                                                                                                        |
| **JSON Dizisi kullan** (Use JSON Array)                                               | XML Elemanlarını JSON Dizisi (JSON Array) olarak dönüştürür.                                                                                                                                                                                                                                                                                                                                                             |
| **Başarı Durumunda Yanıt Verisi Düzenlemesi** (Response Data Manipulation on Success) | Orijinal yanıtın herhangi bir bölümü dönüştürülmüş yanıtın belirtilen bir bölümüne aktarılabilir. Kaynak Değer/Değişken, orijinal yanıt mesajının hangi bölümünün aktarılacağını, Hedef Değer/Değişken ise Kaynak Değer/Değişken ile belirtilen bölümün dönüştürülmüş mesaj içinde nereye koyulacağını belirtir. Tanımlanan işlemler yalnızca Backend API/Servisin başarılı yanıt döndürmesi durumunda gerçekleştirilir. |
| **Örnek Mesaj Göster** (Show Sample Message)                                          | Ayarlara göre oluşan Yanıt Mesajı görüntülenebilir.                                                                                                                                                                                                                                                                                                                                                                      |

**Dönüştürülmüş Mesaj Örneği:**

| Dönüşüm Tipi | Backend API/Servisin döndürdüğü XML Yanıt Mesajı                                                                                                                                                                                                                                                                                             | API Proxy'nin İstemciye Döndürdüğü JSON Yanıt Mesajı                                                                                                                                                                                                                                        |
| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| JSON Object  | `<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <AddResponse xmlns="http://tempuri.org/"> <AddResult>?</AddResult> </AddResponse> </soap:Body> </soap:Envelope>` | `{ "soap:Envelope" : { "xmlns:xsd" : "http://www.w3.org/2001/XMLSchema", "xmlns:soap" : "http://www.w3.org/2003/05/soap-envelope", "xmlns:xsi" : "http://www.w3.org/2001/XMLSchema-instance", "soap:Body" : { "AddResponse" : { "xmlns" : "http://tempuri.org/", "AddResult" : "?" } } } }` |
| JSON Array   | `<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <AddResponse xmlns="http://tempuri.org/"> <AddResult>?</AddResult> </AddResponse> </soap:Body> </soap:Envelope>` | `[ "soap:Envelope", { "xmlns:xsd": "http://www.w3.org/2001/XMLSchema", "xmlns:soap": "http://www.w3.org/2003/05/soap-envelope", "xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance" }, [ "soap:Body", [ "AddResponse", { "xmlns": "http://tempuri.org/" }, [ "AddResult", "3" ] ] ] ]` |

#### Şablon Mesajını Kullan (Use Template Message)

| Alan                                                                                  | Açıklama                                                                                                                                                                                                                                                                                                                                                                                                                 |
| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Şablon Message** (Template Message)                                                 | İstemciye döndürülecek JSON yanıt mesajı                                                                                                                                                                                                                                                                                                                                                                                 |
| **Başarı Durumunda Yanıt Verisi Düzenlemesi** (Response Data Manipulation on Success) | Orijinal yanıtın herhangi bir bölümü dönüştürülmüş yanıtın belirtilen bir bölümüne aktarılabilir. Kaynak Değer/Değişken, orijinal yanıt mesajının hangi bölümünün aktarılacağını, Hedef Değer/Değişken ise Kaynak Değer/Değişken ile belirtilen bölümün dönüştürülmüş mesaj içinde nereye koyulacağını belirtir. Tanımlanan işlemler yalnızca Backend API/Servisin başarılı yanıt döndürmesi durumunda gerçekleştirilir. |

## Sonraki Adımlar

<CardGroup cols={2}>
  <Card title="HTTP Routing" icon="route" href="/tr/develop/yonlendirme/http-yonlendirme">
    HTTP Routing yapılandırmasını öğrenin
  </Card>

  <Card title="Politika Yönetimi" icon="shield" href="/tr/develop/api-proxy-konfigurasyonu/politika-yonetimi">
    Politikalar eklemeyi öğrenin
  </Card>

  <Card title="Test Console" icon="flask" href="/tr/develop/test-debug-araclari/test-console">
    API Proxy'yi test etmeyi öğrenin
  </Card>

  <Card title="Yükleme ve Sürüm" icon="rocket" href="/tr/develop/yukleme-ve-surum-yonetimi">
    Deployment yapmayı öğrenin
  </Card>
</CardGroup>
