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

# Spec Tasarım Editörü

> Formlar üzerinden veri girişi yaparak yeni API Tanım Belgeleri (API Spec) oluşturabilir, var olan API Tanım Belgelerini içe aktarabilir ve güncelleyebilirsiniz. OpenAPI 3.0.x ve OpenAPI 2.x (Swagger) standartlarını destekler. Oluşturduğunuz API Tanım Belgelerini API Proxy oluşturmak için kullanabilirsiniz.

## Spec Tasarım Editörü Kavramı

Spec Tasarım Editörü, API Designer'ın spec first yaklaşımında OpenAPI/Swagger spesifikasyonu oluşturma, düzenleme ve yönetme için kullanılan ana araçtır. Formlar üzerinden veri girişi yaparak yeni API Tanım Belgeleri (API Spec) oluşturur, var olan API Tanım Belgelerini içe aktarır ve günceller. OpenAPI 3.0.x ve OpenAPI 2.x (Swagger) standartlarını destekler.

<CardGroup cols={2}>
  <Card title="Spec First Yaklaşımı" icon="file-code">
    OpenAPI/Swagger spesifikasyonu önce oluşturulur

    API tasarımı spesifikasyon ile başlar.
  </Card>

  <Card title="Form Tabanlı Düzenleme" icon="pencil">
    Formlar üzerinden veri girişi yapılır

    Kod yazmadan API Spec oluşturma ve düzenleme.
  </Card>

  <Card title="İçe Aktarma Desteği" icon="download">
    Var olan API Spec'ler içe aktarılabilir

    OpenAPI 3.0.x ve Swagger 2.x desteği.
  </Card>

  <Card title="API Proxy Oluşturma" icon="network-wired">
    Spesifikasyondan API Proxy oluşturulur

    API Spec'ten otomatik API Proxy oluşturma.
  </Card>
</CardGroup>

<Info>
  API Spec Editörü üzerinden girilen bilgilerin detaylı açıklaması için [OpenAPI Spesifikasyonu](https://swagger.io/specification/) adresine bakabilirsiniz.
</Info>

## Spec Tasarım Editörü Özellikleri

### OpenAPI/Swagger Spesifikasyonu

Spec first yaklaşımında OpenAPI/Swagger spesifikasyonu oluşturma ve düzenleme:

<AccordionGroup>
  <Accordion title="API Spec Oluşturma">
    * Boş API Spec oluşturma
    * Var olan Spec'i içe aktarma
    * URL veya dosya yükleme
    * Spec authorization desteği
  </Accordion>

  <Accordion title="Endpoint ve İşlem Tasarımı">
    * Path (adres) tanımlama
    * HTTP method belirleme
    * Operation (işlem) yönetimi
    * Parametre tanımları
  </Accordion>

  <Accordion title="Veri Modeli Yönetimi">
    * Veri modeli oluşturma
    * Ortak veri modellerini içe aktarma
    * Schema tasarımı
    * Property yönetimi
  </Accordion>
</AccordionGroup>

### API Spec Yönetimi

API Tanım Belgelerinin oluşturulması ve yönetimi:

<CardGroup cols={2}>
  <Card title="Spec Oluşturma" icon="plus-circle">
    Yeni API Spec oluşturulur

    * Boş API oluşturma
    * Var olan Spec'i içe aktarma
    * Form tabanlı düzenleme
  </Card>

  <Card title="Spec Düzenleme" icon="pencil">
    API Spec'ler düzenlenir ve güncellenir

    * Genel bakış yönetimi
    * Endpoint ve işlem tanımları
    * Veri modeli yönetimi
  </Card>

  <Card title="API Proxy Oluşturma" icon="network-wired">
    Spec'ten API Proxy oluşturulur

    * Otomatik API Proxy oluşturma
    * Şablon olarak Spec kullanımı
    * Birden çok API Proxy oluşturma
  </Card>
</CardGroup>

## API Tanım Belgesi Listesi

Ana menüden **Spec Tasarım Editörü** bağlantısına tıklandığında API Tanım Belgesi Listesi görüntülenir.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-1.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=a8a6c7d678a641fa45c1b7120a2f2680" alt="API Tanım Belgesi Listesi" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1289" height="266" data-path="images/develop/spec-designer/spec-designer-1.png" />

Listenin üst kısmında filtre alanları bulunur. Filtre alanları güncellendiği zaman liste içeriği de filtreye uygun olarak güncellenir.

## API Tanım Belgesi Oluşturma

Var olmayan bir API'nin tasarlanması ya da code-first yaklaşımla geliştirilmiş ve herhangi bir tanım belgesi olmayan API'lerin dokümantasyonunu oluşturmak amacıyla kullanılır.

Liste arayüzünün sağ üst kısmındaki **+ Yeni (Create)** tuşuna tıklanarak yeni bir API Tanım Belgesi oluşturulabilir.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-2.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=b96f2e7e2eb35cead39ee47e197de02b" alt="Yeni API Tanım Belgesi Oluşturma" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1293" height="251" data-path="images/develop/spec-designer/spec-designer-2.png" />

Yeni API Tanım Belgesi oluşturulurken iki seçenek bulunmaktadır.

### Form Doldurarak API Tanım Belgesi Oluşturma

Yeni API Tanım Belgesi arayüzü açıldığında, var olan iki seçenekten **Boş API (Blank API)** seçeneğinin varsayılan olarak seçili geldiği görülür.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-3.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=1384c9975a0a8a8bb9ce3b86fccdc7a9" alt="Boş API Seçeneği" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1340" height="525" data-path="images/develop/spec-designer/spec-designer-3.png" />

Yeni API Tanım Belgesi arayüzü için kullanılan alanlar aşağıdaki tabloda görülmektedir.

| Alan                      | Açıklama                                                                                                     |
| ------------------------- | ------------------------------------------------------------------------------------------------------------ |
| **Başlık** *(Title)*      | API Tanım Dosyasının listede görünen başlığı/adıdır. Zorunludur ve proje bazında biricik (unique) olmalıdır. |
| **Açıklama**              | API Tanım Dosyasına ilişkin açıklamadır. Girilmesi isteğe bağlıdır.                                          |
| **Sunucular** *(Servers)* | API'nin hizmet verdiği/vereceği sunucuların listesidir.                                                      |
| **Sunucu - URL**          | API'ye erişilebilecek adrestir. Zorunludur.                                                                  |
| **Sunucu - Açıklama**     | Bu sunucuya ilişkin açıklamadır. Girilmesi isteğe bağlıdır.                                                  |

**Başlık (Title)** alanı doldurulup **Sunucular (Servers)** bölümünde en az bir sunucu kaydı oluşturduktan sonra sağ üstteki **Oluştur (Create)** tuşu tıklanabilir hale gelir ve bu tuşa basılarak tanım dosyası kaydedilebilir. Tanım dosyası kaydedildikten sonra yapılabilecek işlemler [API Tanım Belgesi Güncelleme](#api-tanım-belgesi-güncelleme) kısmında açıklanmıştır.

### Var olan API Tanım Belgesini İçe Aktarma

Yeni API Tanım Belgesi oluşturmak için kullanılabilecek ikinci seçenek, var olan bir API Tanım Belgesinin içeri aktarılmasıdır. Bunun için **API Tanım Belgesini İçe Aktar (Import API Spec)** seçeneği seçilir.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-4.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=7dcfc7bee588b089d32999409b9cf850" alt="API Tanım Belgesini İçe Aktar" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1336" height="438" data-path="images/develop/spec-designer/spec-designer-4.png" />

İçe aktarılmak üzere iki standart desteklenmektedir. Bunlar [OpenAPI 3.0.x](https://swagger.io/specification/) ve [OpenAPI 2.x (Swagger)](https://swagger.io/specification/v2/) standartlarıdır.

Seçilen standarda uygun dosyanın içeri aktarılabilmesi için **URL Girme** ve **Dosya Yükleme (Upload File)** seçenekleri bulunmaktadır.

#### Spec Authorization Kullan (Use Spec Authorization)

Bazı tanım dosyaları, içeriklerinin görüntülenebilmesi için istemcinin yetkilendirilmiş olduğunu kontrol eder. Bunun için HTTP isteği içerisinde kimlik doğrulama verilerinin gönderilmesi gerekir. Eğer erişilecek URL'deki tanım dosyası böyle bir dosya ise, bu kutu işaretlenerek kimlik bilgilerini girilir.

**Spec Authorization Kullan** seçeneği işaretlenirse isteğe bağlı **Temel Kimlik Doğrulama** alanları ve **Spec Authorization Listesi** tablosu görünür; listede Key Name, Value ve Type sütunlarıyla yetkilendirme anahtarları eklenir.

<img src="https://mintcdn.com/apinizer/n-lYCW-DIyXqTQj_/images/develop/spec-designer/spec-designer-5.png?fit=max&auto=format&n=n-lYCW-DIyXqTQj_&q=85&s=ba5143c1bd3f82dd00ea1f8ce569cf77" alt="Spec Authorization etkin: Basic Authentication ve Spec Authorization Listesi" width="600" data-path="images/develop/spec-designer/spec-designer-5.png" />

#### URL Girme

Var olan API Tanım Dosyasına erişilebilecek adres **URL** alanına girilerek **Ayrıştır (Parse)** tuşuna tıklanır.

#### Dosya Yükleme

Yükleme tuşuna tıklanıp var olan API Tanım Dosyası seçilerek **Ayrıştır (Parse)** tuşuna tıklanır.

Her iki yöntemde de ayrıştırma işleminin sonucunda Başlık (Title), Açıklama  ve Sunucular (Servers) alanları gelir. Boş API oluşturmadan farklı olarak bu alanların değerleri içe aktarılan API Tanım Dosyası içinden alınır. Bu aşamadan sonra sağ üstteki **Oluştur (Create)** tuşu tıklanabilir hale gelir ve bu tuşa basılarak tanım dosyası kaydedilebilir.

## API Tanım Belgesi Güncelleme

API Tanım Belgesi listesinde bir kaydın Başlık kolonundaki değere tıklandığında ya da o kaydın en sağdaki kolonunda bulunan menü tuşuna tıklanıp **Güncelle (Edit)** seçeneği seçildiğinde, API Tanım Dosyası güncelleme arayüzü açılır.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-6.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=bf823347a14d7a530e55c3ec12fdeab7" alt="API Tanım Belgesi Güncelleme" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1337" height="253" data-path="images/develop/spec-designer/spec-designer-6.png" />

API Tanım Belgesi ayarları aşağıdaki görselde gösterilmektedir:

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-7.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=9f7ffc4c0e18aa355ab74304f4978049" alt="API Tanım Belgesi Ayarları" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1581" height="884" data-path="images/develop/spec-designer/spec-designer-7.png" />

### Genel Bakış (API Overview)

Güncelleme arayüzü ilk açıldığında **Genel Bakış (API Overview)** açılır. Genel Bakış bağlantısı arayüzün sol tarafındadır.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-8.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=1ab2c7201310de69e95d51645460bf6a" alt="Genel Bakış" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1573" height="887" data-path="images/develop/spec-designer/spec-designer-8.png" />

### Adresler (Paths)

Genel Bakış bağlantısının hemen altında **Adresler (Paths)** bölümü vardır.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-9.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=64054b8c441157a275cf7923dbe9b3d2" alt="Adresler" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1571" height="887" data-path="images/develop/spec-designer/spec-designer-9.png" />

**Adres (Path)**, bir API'nin istek gönderilebilecek adreslerinden her birine verilen isimdir.

#### Adres Ekleme

API'nin adreslerine bir yenisini eklemek için, Adresler bölümünün başlığının altındaki **+ Yeni** tuşuna tıklanır.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-10.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=07ae431b4880598bc40452a90374e408" alt="Adres Ekleme" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1581" height="886" data-path="images/develop/spec-designer/spec-designer-10.png" />

Açılan pencerede eklenmek istenen adres girilerek **Kaydet** tuşuna tıklanır.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-11.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=572332a38534c4e1749a8eccc3d54e7d" alt="Adres Ekleme Dialog" style={{maxWidth: '180px', width: '50%', height: 'auto'}} width="557" height="466" data-path="images/develop/spec-designer/spec-designer-11.png" />

#### Adres Silme

Listedeki adreslerden herhangi birine tıklandığında o adres seçilmiş olur ve sağ tarafta o adrese ilişkin detayların yönetilebileceği bir bölüm görüntülenir. Bu bölümün sağ üst kısmındaki **Sil (Delete)** tuşuna tıklanarak adres silinebilir.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-12.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=69d399272a280e99764c505550bdd59f" alt="Adres Silme" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1577" height="888" data-path="images/develop/spec-designer/spec-designer-12.png" />

#### Adres Güncelleme

Listedeki adreslerden herhangi birine tıklandığında o adres seçilmiş olur ve sağ tarafta o adrese ilişkin detayların yönetilebileceği bir bölüm görüntülenir.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-13.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=432ea383b2a7c8121bd4c9c79b87f2d0" alt="Adres Güncelleme" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1571" height="884" data-path="images/develop/spec-designer/spec-designer-13.png" />

##### Adresi Değiştirme

Sağ tarafta en üstte adres bir bağlantı olarak görüntülenir. Bu bağlantının yanındaki **Düzenle (Edit)** butonuna tıklandığında, açılan pencereden adres güncellenebilir.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-14.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=1f7fe34038e5362bb8168cd5b13704b2" alt="Adres Düzenleme" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1181" height="478" data-path="images/develop/spec-designer/spec-designer-14.png" />

Adres düzenleme ayarları aşağıdaki görselde gösterilmektedir:

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-15.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=ed3f0f6baac44ac0e9a42a68cd0f1189" alt="Adres Düzenleme Dialog" style={{maxWidth: '250px', width: '50%', height: 'auto'}} width="591" height="469" data-path="images/develop/spec-designer/spec-designer-15.png" />

##### İşlemler (Operations)

Bir **Adres** seçildiği zaman arayüzün sağ tarafında o adrese tanımlanmış olan **İşlemler (Operations)**'in yönetilebileceği bir bölüm gelir.

**İşlem (Operation)**: Bir API'nin, tanımlı adresleri üzerinden istek kabul ettiği her bir geçerli HTTP Metodu ile bu metoda ilişkin kimlik ve tanımlayıcı bilgiler, parametreler, istek ve yanıt içeriklerinden oluşur.

Herhangi bir adres seçildiğinde, o adres için tanımlanmış olan **İşlem**lerden ilki seçili olarak görüntülenir.

<Warning>
  Seçilen işlem, HTTP Metot adını içeren kutucuğun alt kısmındaki ince mavi çizgi ile gösterilir.
</Warning>

Yukarıdaki görselde /pet/findByStatus adresinin kullanıcı tarafından seçilmiş olduğu, bu adreste tanımlanmış olan **Get** işleminin de otomatik olarak seçilerek detayının görüntülenmiş olduğu görülmektedir.

###### Kimlik ve Tanımlama Alanları

Kimlik ve Tanımlama Alanları için kullanılan alanlar aşağıdaki tabloda görülmektedir.

| Alan                          | Açıklama                                                                                                                                                                                                                                                                                                |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Özet** *(Summary)*          | İşlemin ne yaptığına ilişkin kısa bilgidir. Girilmesi isteğe bağlıdır.                                                                                                                                                                                                                                  |
| **İşlem ID** *(Operation ID)* | İşlemin biricik anahtarıdır.<br />• API'nin tüm işlemleri arasında benzersiz olmalıdır.<br />• Büyük/küçük harfe duyarlıdır.<br />• Araçlar ve kitaplıklar bir işlemi benzersiz şekilde tanımlamak için bu değeri kullanabileceğinden, yaygın programlama adlandırma kurallarına uyulması **ÖNERİLİR**. |
| **Açıklama**                  | İşlem davranışının ayrıntılı bir açıklamasıdır. Girilmesi isteğe bağlıdır.                                                                                                                                                                                                                              |
| **Etiketler** *(Tags)*        | Etiketler, işlemlerin kaynaklara veya diğer niteleyicilere göre mantıksal olarak gruplandırılması için kullanılabilir. Girilmesi isteğe bağlıdır. Birden çok eklenebilir.                                                                                                                               |

###### Başlık Parametreleri (Header Parameters)

Bu, İşleme gönderilebilecek başlıkların yönetildiği bölümdür.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-16.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=21b069d642ff2b049eb093e500f74bf9" alt="Başlık Parametreleri" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1142" height="211" data-path="images/develop/spec-designer/spec-designer-16.png" />

###### Sorgu Parametreleri (Query Parameters)

Bu, İşlemin alabileceği sorgu parametrelerinin yönetildiği bölümdür.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-17.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=25847426de0ef233e24f8f7e8e3320ad" alt="Sorgu Parametreleri" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1142" height="160" data-path="images/develop/spec-designer/spec-designer-17.png" />

###### İstek Gövdesi (Request Body)

Bu, İşlem için örnek istek gövdelerinin yönetilebileceği bölümdür. Bir ya da daha fazla **Medya Tipi (Media Type)** için örnek istek gövdesi tanımlanabilir.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-18.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=749c091b54430c0548aca99a8b7f143e" alt="İstek Gövdesi" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1138" height="323" data-path="images/develop/spec-designer/spec-designer-18.png" />

###### Yanıtlar (Responses)

Bu İşlem için döndürülebilecek **Yanıt (Response)**'ların yönetilebileceği bölümdür.

Her bir yanıt, bir **HTTP Durum Kodu (HTTP Status Code)**, o durum kodunun açıklaması ile, bir ya da daha fazla **Medya Tipi (Media Type)** için oluşturulmuş **Yanıt Gövdesi (Response Body)**'den oluşur.

<Info>
  Apinizer, bir **Medya Tipi** için birden çok muhtemel yanıt gövdesinin ve bunların hangi koşullarda döndürülebileceğinin tanımlanmasına olanak verir.
</Info>

Aşağıdaki görselde şunlar görülmektedir:

* Bu İşlem için 200 ve 400 kodları döndürülebilir.
* 200 kodu için application/json ya da application/xml olmak üzere iki farklı Medya Tipinden yanıt dönebilir.
* application/json Medya Tipi için **status** parametresinin değeri "pending" ise birinci satırdakine, "sold" ise ikinci satırdakine benzer bir yanıt gövdesi dönecektir.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-19.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=2934dcb1d0cad7d470f013cd8d38e3c7" alt="Yanıtlar" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1135" height="454" data-path="images/develop/spec-designer/spec-designer-19.png" />

###### İşlem Ekleme

Bir Adres seçildiğinde, o Adres için tanımlanmış olan İşlemler, ilgili HTTP Metotları renklendirilerek gösterilir. Renklendirilmemiş HTTP Metotları için henüz bir İşlem tanımlanmamış demektir. Bunlardan herhangi birisi için İşlem tanımlanmak istenirse, istenen HTTP Metodu seçilir. Bu seçim ile birlikte, henüz bir İşlem tanımlanmadığı görülür. İşlem **Yeni İşlem (Add Operation)** tuşuna basılarak seçilmiş olan metot için İşlem eklenebilir.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-20.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=93b4dd9abf1f9c862445893a8187b7cd" alt="İşlem Ekleme" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1149" height="526" data-path="images/develop/spec-designer/spec-designer-20.png" />

###### İşlem Silme

Bir İşlem seçildiğinde, pencerenin sağ tarafında bir **Sil (Delete)** tuşu görünür. Bu tuşa tıklanarak seçilmiş olan İşlem silinebilir. Aşağıdaki görselde, Delete işleminin seçildiği ve bu işlemin silinebilmesi için kullanılacak Sil tuşu görülmektedir.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-21.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=efd2e33252722b088f32ab374e8fcaa2" alt="İşlem Silme" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1156" height="485" data-path="images/develop/spec-designer/spec-designer-21.png" />

### Veri Modelleri

Arayüzün sol tarafının alt kısmında bu API'nin kullandığı ve standart temel tiplerden (primitive types) olmayan veri tipleri görüntülenir.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-22.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=58218d629e1774ce7ab4b4da0a54455e" alt="Veri Modelleri" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1574" height="708" data-path="images/develop/spec-designer/spec-designer-22.png" />

#### Veri Modeli Ekleme

Yeni bir veri modeli eklemek için bölümün başlığının altındaki **+ Yeni** tuşuna tıklanır.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-23.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=53949004d560654bd6f598b717b3131f" alt="Veri Modeli Ekleme" style={{maxWidth: '250px', width: '50%', height: 'auto'}} width="614" height="381" data-path="images/develop/spec-designer/spec-designer-23.png" />

Açılan pencerede veri modelinin adı ve açıklaması girilerek **Kaydet** tuşuna tıklanır.

#### Veri Modeli Import Etme

Spec içerisindeki Veri Modellerine, Ortak Sorgu Modeli sayfası üzerinden eklenmiş modeller aktarılabilir.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-24.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=9d4637f31a154bac64cdea3936b9d54a" alt="Veri Modeli Import" style={{maxWidth: '220px', width: '50%', height: 'auto'}} width="744" height="402" data-path="images/develop/spec-designer/spec-designer-24.png" />

#### Veri Modeli Silme

Herhangi bir veri modelinin üzerine tıklandığında sağ tarafta o veri modelinin detayı görüntülenir. Açılan bu bölümün sağ üst kısmındaki **Sil (Delete)** tuşuna tıklanarak veri modeli silinebilir.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-25.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=ebbaf2f09a271ada7702556c75ac8c79" alt="Veri Modeli Silme" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1546" height="609" data-path="images/develop/spec-designer/spec-designer-25.png" />

#### Veri Modeli Güncelleme

Herhangi bir veri modelinin üzerine tıklandığında sağ tarafta o veri modelinin detayı görüntülenir. Bu bölümde, veri modelinin adı, açıklaması ve özellikleri (properties) bulunur.

##### Veri Modelinin Adını Değiştirme

Veri modelinin adının yanındaki **Düzenle (Edit)** simgesine tıklandığında adın güncellenebileceği bir metin kutusu açılır. İstenen değişiklik bu alanda yapılır.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-26.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=284211ad24e5077df8c201c2752de4e0" alt="Veri Modelinin Adını Değiştirme" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1143" height="78" data-path="images/develop/spec-designer/spec-designer-26.png" />

##### Özellikler (Properties)

Veri modelinin alt alanlarından her birine **Özellik (Property)** adı verilir. Bir veri modeli Nesneye Yönelik Programlamadaki bir Sınıf (Class), bir özellik ise bu sınıfın içindeki özellik (property) ya da nitelik (attribute) olarak görülebilir.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-27.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=5dea4e3bf9a798a84424cfb4d43c1e81" alt="Özellikler" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1550" height="734" data-path="images/develop/spec-designer/spec-designer-27.png" />

###### Özellik Ekleme

Özellikleri içeren tablonun kolon başlıkları satırının en sağında bulunan **+** tuşuna tıklandığında yeni bir özellik girilebilecek bir pencere açılır.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-28.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=6ba9437f774f65d4225be29eedb0fd86" alt="Özellik Ekleme Dialog" style={{maxWidth: '600px', width: '100%', height: 'auto'}} width="1553" height="670" data-path="images/develop/spec-designer/spec-designer-28.png" />

Açılan penceredeki veri alanları doldurularak **Kaydet** tuşuna tıklanır.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-29.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=5be9a015ca26545e058d41ce3ee5eb7b" alt="Özellik Ekleme Dialog Detay" style={{maxWidth: '600px', width: '100%', height: 'auto'}} width="917" height="523" data-path="images/develop/spec-designer/spec-designer-29.png" />

Özellik eklemek için kullanılan alanlar aşağıdaki tabloda görülmektedir.

| Alan                     | Açıklama                                                                                                  |
| ------------------------ | --------------------------------------------------------------------------------------------------------- |
| **Ad**                   | Özelliğin adıdır. Zorunludur ve Veri Modelinin bütün Özellikleri içinde biricik (unique) olmalıdır.       |
| **Açıklama**             | Özelliğin ne olduğuna, nasıl kullanılacağına ilişkin açıklamadır. Doldurulması isteğe bağlı alandır.      |
| **Zorunlu** *(Required)* | Bu özelliğin değerinin olmasının zorunlu olup olmadığını belirtir.                                        |
| **Tip**                  | Özelliğin tipidir. Temel türler ya da API içinde tanımlanmış olan tipler kullanılabilir. Zorunlu alandır. |

###### Özellik Silme

Özellikler tablosundaki her özelliğin satırının sonundaki menüden o özelliği silmek için kullanılabilecek \*\*Kaldır \*\* tuşu bulunur.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-30.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=dafe847030432bca8dd3949dd8529105" alt="Özellik Silme" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1560" height="690" data-path="images/develop/spec-designer/spec-designer-30.png" />

###### Özellik Güncelleme

Özelliklerden herhangi birinin Ad  kolonundaki değerine tıklanırsa, o özelliğin güncellenebileceği pencere açılır. Güncellemeler yapıldıktan sonra **Kaydet** tuşuna basılarak güncelleme işlemi tamamlanır.

## API Tanım Belgesi Silme

API Tanım Belgesi listesinde silinmek istenen kaydın en sağdaki kolonunda bulunan menü tuşuna tıklanıp \*\*Kaldır \*\* seçilerek kayıt silinebilir.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-31.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=f9acc2e823521cc126d669404b28a9fd" alt="API Tanım Belgesi Silme" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1583" height="298" data-path="images/develop/spec-designer/spec-designer-31.png" />

## API Proxy Oluşturma

API Tanım Belgesi'nin güncelleme arayüzünde **API Proxy Oluştur (Create API Proxy)** tuşuna tıklanarak bu API Spec kullanılarak bir API Proxy oluşturulabilir.

<img src="https://mintcdn.com/apinizer/lhZQlOH1wI3EhPE4/images/develop/spec-designer/spec-designer-32.png?fit=max&auto=format&n=lhZQlOH1wI3EhPE4&q=85&s=840a70cb5a0ca607da3e3b4a0cfb305e" alt="API Proxy Oluşturma" style={{maxWidth: '800px', width: '100%', height: 'auto'}} width="1586" height="499" data-path="images/develop/spec-designer/spec-designer-32.png" />

<Warning>
  API Tanım Dosyası kullanılarak API Proxy oluşturulurken, tanım dosyasında bulunan tanımlar API Proxy için şablon olarak kullanılır. API Proxy oluşturulduktan sonra Spec Tasarım Editörü üzerinden tanım dosyasında yapılan değişiklikler API Proxy'i, API Proxy'nin Tasarım sekmesinden yapılan değişiklikler ise API Tanım Dosyasını etkilemez.
</Warning>

<Warning>
  Bir API Tanım Dosyası kullanılarak birden çok API Proxy oluşturulabilir.
</Warning>

## Spec Tasarım Editörü Kullanım Senaryoları

Spec first yaklaşımı ile API geliştirme senaryoları:

<CardGroup cols={2}>
  <Card title="Spec First API Geliştirme" icon="file-code">
    1. Boş API Spec oluşturma
    2. Endpoint'leri ve işlemleri tanımlama
    3. Veri modellerini oluşturma
    4. Spesifikasyonu doğrulama
    5. Spec'ten API Proxy oluşturma
    6. Otomatik dokümantasyon oluşturma
  </Card>

  <Card title="Mevcut API Dokümantasyonu" icon="book">
    1. Mevcut API Spec'i içe aktarma
    2. Spesifikasyonu düzenleme ve güncelleme
    3. Endpoint ve veri modellerini iyileştirme
    4. Örnekler ve açıklamalar ekleme
    5. Spec'ten API Proxy oluşturma
  </Card>
</CardGroup>

## Spec Tasarım Editörü ve API Designer İlişkisi

Spec Tasarım Editörü, API Designer'ın spec first yaklaşımında merkezi rol oynar. İşleyiş akışı:

```
Spec Tasarım Editörü
   │
   │ OpenAPI/Swagger Spec
   │ (Spec First)
   │
   ▼
Ortak Veri Modelleri
   │
   │ Model İçe Aktarma
   │ $ref Referansları
   │
   ▼
API Spec
   │
   │ Spec'ten API Proxy Oluşturma
   │
   ▼
API Proxy
   │
   │ Konfigürasyon
   │
   ▼
API Gateway
```

<CardGroup cols={4}>
  <Card title="1. Spec Oluşturma" icon="file-code">
    Spec Tasarım Editörü'nde OpenAPI/Swagger spesifikasyonu oluşturulur

    Boş API veya içe aktarma ile Spec oluşturma.
  </Card>

  <Card title="2. Endpoint ve İşlem Tanımlama" icon="code">
    Path'ler ve operation'lar tanımlanır

    HTTP metotları, parametreler ve yanıtlar yönetilir.
  </Card>

  <Card title="3. Veri Modeli Yönetimi" icon="database">
    Veri modelleri oluşturulur veya içe aktarılır

    Ortak veri modelleri kullanılabilir.
  </Card>

  <Card title="4. API Proxy Oluşturma" icon="rocket">
    Spec'ten API Proxy oluşturulur

    Otomatik olarak API Proxy oluşturma ve konfigürasyon.
  </Card>
</CardGroup>

<Info>
  Spec Tasarım Editörü ve API Designer arasındaki bu entegrasyon, spec first yaklaşımı ile API tasarımından deployment'a kadar kesintisiz bir süreç sağlar. Spesifikasyon önce oluşturulur, sonra bu spesifikasyondan API Proxy ve dokümantasyon otomatik olarak üretilir.
</Info>

## Spec Tasarım Editörü Avantajları

Spec first yaklaşımının sağladığı avantajlar:

<CardGroup cols={2}>
  <Card title="Spec First Yaklaşımı" icon="file-code">
    * API tasarımı spesifikasyon ile başlar
    * Standart OpenAPI/Swagger formatı
    * Kod yazmadan API tasarımı
  </Card>

  <Card title="Form Tabanlı Düzenleme" icon="pencil">
    * Formlar üzerinden kolay düzenleme
    * Görsel arayüz ile yönetim
    * Validation ve hata kontrolü
  </Card>

  <Card title="Otomatik Üretim" icon="wand-magic-sparkles">
    * Spesifikasyondan API Proxy oluşturma
    * Otomatik dokümantasyon üretimi
    * Tutarlı API yapısı
  </Card>

  <Card title="Standart Uyumluluk" icon="check-circle">
    * OpenAPI/Swagger standartlarına uyum
    * OpenAPI 3.0.x ve Swagger 2.x desteği
    * Interoperability ve tool desteği
  </Card>
</CardGroup>

## Sonraki Adımlar

<CardGroup cols={2}>
  <Card title="Ortak Veri Modeli" icon="database" href="/tr/develop/api-tasarimi/data-models">
    Ortak veri modelleri oluşturma
  </Card>

  <Card title="API Proxy Oluşturma" icon="network-wired" href="/tr/develop/api-proxy-olusturma/api-proxy-olusturma">
    API Tanım Belgelerinden API Proxy oluşturma
  </Card>

  <Card title="Quick Start" icon="rocket" href="/tr/develop/quick-start">
    Hızlı başlangıç kılavuzu
  </Card>

  <Card title="API Designer" icon="wand-magic-sparkles" href="/tr/concepts/temel-bilesenler/api-designer">
    API Designer bileşenini öğrenin
  </Card>
</CardGroup>
