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

# API Developer Portal

> Apinizer API Developer/Geliştirici Portalı'nın Kubernetes üzerinde kurulumunu ve yapılandırmasını sağlar. API tüketicilerinin API'lerle ilgili dökümantasyona erişebileceği, test edebileceği ve kullanabileceği portal kurulum adımlarını sunar. API Manager ile entegrasyon detaylarını içerir.

## Giriş

API Tüketicilerinin (API Consumers), bir organizasyonun sunduğu API'lerle ilgili dökümantasyona erişebilecekleri, bunları test edebilecekleri, belirli kısıtlamalar içinde kullanabilecekleri ve bu konular hakkında soru sorup cevaplayabilecekleri son kullanıcı veya geliştirici portalidir.

API Geliştirici Portalı, diğer Apinizer ürünleri gibi Kubernetes Platformu üzerinde çalışır. Portal işlemleri için herhangi bir veritabanı kullanılmaz, bunun yerine doğrudan API Manager'ın sağladığı API'lerle etkileşim sağlanır.

## Kurulum Öncesi Adımlar

Apinizer API Portalı'nın kurulumuna başlamadan önce şunlara dikkat edilmelidir:

<CardGroup cols={2}>
  <Card title="Apinizer Kurulumu" icon="server" href="/tr/setup/apinizer/apinizer">
    API Manager kurulumunu öğrenin
  </Card>
</CardGroup>

<Warning>
  API Manager'ın kurulu olması gerekmektedir. Ayrıca lisans anahtarınızda API Developer Portal'ının bulunması gerekmektedir.
</Warning>

## Kurulum Adımları

API Portal Kurulumu iki şekilde yapılmaktadır.

* Kubernetes yönetimi Apinizer üzerinden **yapılıyorsa**, API Manager üzerinden API Developer Portal kurulumu yapabilirsiniz.
* Kubernetes yönetimi Apinizer üzerinden **yapılmıyorsa**, Kubernetes'e manuel kurulum yapılabilir ve ardından API Manager ile bağlantı sağlanabilir.

### Kişisel API Erişimi İçin Token Oluşturma

Token bilgileri, yeni bir token oluşturarak veya Profilim sayfasında mevcut bir token kullanılarak elde edilebilir. Personel tokenları genellikle `apnz_` öneki ile başlar.

<Info>
  Token oluşturma işlemi için API Manager'da Profilim sayfasına giderek yeni bir token oluşturabilirsiniz.
</Info>

<Frame caption="Token oluşturma - Profilim sayfasından kişisel API token oluşturma">
  <img src="https://mintcdn.com/apinizer/74TMnSOZDvjtaICJ/images/setup/apinizer/api-portal/01-token-olusturma.png?fit=max&auto=format&n=74TMnSOZDvjtaICJ&q=85&s=c44abc15a0c090f2970ef92462fb82c2" alt="Token Oluşturma" width="1200" height="800" style={{ borderRadius: '0.5rem' }} data-path="images/setup/apinizer/api-portal/01-token-olusturma.png" />
</Frame>

### API Developer Portal Kurulumu

#### API Developer Portal Kurulumu API Manager Üzerinden Yapılacaksa

API Manager üzerinden API Developer Portal kurulumu için Genel Ayarlar menüsünde aşağıdaki bölümün aktif olması gerekmektedir.

<Warning>
  Kubernetes yönetimi Apinizer üzerinden yapılıyorsa, Genel Ayarlar sayfasında "Kubernetes Yönetimi" seçeneğinin aktif olması gerekmektedir.
</Warning>

API Manager'da, **Yönetim → Sunucu Yönetimi → Kubernetes Resources** sayfasına gidin. Deployment & Pods sekmesinden API Portal'ı etkinleştirin. Gerekli tanımları yaparak kurulumu tamamlayın.

<Frame caption="Kubernetes Resources sayfası - API Portal etkinleştirme">
  <img src="https://mintcdn.com/apinizer/74TMnSOZDvjtaICJ/images/setup/apinizer/api-portal/02-kubernetes-resources.png?fit=max&auto=format&n=74TMnSOZDvjtaICJ&q=85&s=2acc8694b19b9902c0d60fa4082b6e72" alt="Kubernetes Resources Sayfası" width="1200" height="600" style={{ borderRadius: '0.5rem' }} data-path="images/setup/apinizer/api-portal/02-kubernetes-resources.png" />
</Frame>

Açılan diyalogda, kurumunuza uygun olarak zorunlu alanları tanımlayın.

<Frame caption="API Portal kurulum diyaloğu - Gerekli ayarların yapılandırılması">
  <img src="https://mintcdn.com/apinizer/74TMnSOZDvjtaICJ/images/setup/apinizer/api-portal/03-api-portal-dialog.png?fit=max&auto=format&n=74TMnSOZDvjtaICJ&q=85&s=3521f7755c5c7e7a26a3f37966f84f50" alt="API Portal Kurulum Diyaloğu" width="1200" height="800" style={{ borderRadius: '0.5rem' }} data-path="images/setup/apinizer/api-portal/03-api-portal-dialog.png" />
</Frame>

<Frame caption="API Portal ayarları - API Manager ile entegrasyon yapılandırması">
  <img src="https://mintcdn.com/apinizer/74TMnSOZDvjtaICJ/images/setup/apinizer/api-portal/04-api-portal-ayarlari.png?fit=max&auto=format&n=74TMnSOZDvjtaICJ&q=85&s=0e082de3b2b8e60e6af3382c66cad92d" alt="API Portal Ayarları" width="1200" height="800" style={{ borderRadius: '0.5rem' }} data-path="images/setup/apinizer/api-portal/04-api-portal-ayarlari.png" />
</Frame>

| Alan                                         | Açıklama                                                                                                                                                                                                                                                                   |
| -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Apinizer Portal Management API URL**       | API Developer Portalin Apinizer Management API'lerini tüketebilmesi için gerekli olan API Manager tarafından çalıştırılan Management API adresidir. Örnek adres: `http://<API_MANAGER_ACCESS_URL>:<PORT>/`                                                                 |
| **Apinizer Portal Management API Key/Token** | API Developer Portalinin Apinizer Yönetim API'lerini tüketebilmesi için gereken token bilgisidir.                                                                                                                                                                          |
| **Sayısı (Count)**                           | Gateway engine sayısı, Kubernetes Cluster'daki replicaSet ayarını düzenler.                                                                                                                                                                                                |
| **Servis Portu (Service Port)**              | Gateway engine erişim portu, Kubernetes Cluster'daki servis objesinin NodePort ayarını düzenler.                                                                                                                                                                           |
| **Node Listesi (Node List)**                 | Pod'ların hangi Kubernetes Worker sunucularında çalışacağını ayarlar. Kubernetes'teki NodeAffinity ayarını düzenler.                                                                                                                                                       |
| **CPU**                                      | Pod'un kullanacağı maksimum CPU core sayısı bilgisidir.                                                                                                                                                                                                                    |
| **Bellek (Memory)**                          | Pod'un kullanacağı maksimum bellek değeridir.                                                                                                                                                                                                                              |
| **Bellek Birimi (Memory Unit)**              | Bellek için gerekli olan değerin birimi seçilir; MB, GB.                                                                                                                                                                                                                   |
| **Ek Değişkenler (Additional Variables)**    | Pod içinde çalıştırılacak varsayılan ve opsiyonel değişkenler ve değerleri tanımlanır. Varsayılan değişkenler silinemez, sadece değerleri düzenlenebilir.                                                                                                                  |
| **Host Takma Adları (Host Aliases)**         | Ağda bulunan IP adresleri bazen host isimleri arkasına konulabilir, bunlar eğer nameserver ya da host dosyasına tanımlanmamışsa ya da bir şekilde Apinizer'ın bunları çözmesi sağlanamamışsa, worker podların bu isimleri çözmesi için **Host Alias** tanımı yapılmalıdır. |

<Info>
  **Ek Değişkenler**

  Ek değişkenler alanındaki **Java Options** ayarını yapılandırırken aşağıdaki uyarı dikkate alınmalıdır:

  * **-Xmx** ve **-Xms** parametreleri kullanıldığında, otomatik yığın (heap) boyutlandırması devre dışı bırakılır.
  * Apinizer, **JVM Yığın (Heap)** değerlerini konteyner içinde çalıştığından konteynere verilen belleğin **%75.0**'ini kullanacak şekilde ayarlar.
  * **UseContainerSupport** varsayılan olarak aktif gelmektedir.
  * Eski bayraklar (flag) **-XX: \{Min | Max} RAMFraction** artık kullanımdan kaldırıldı. 0.0 ve 100.0 arasında bir değer alan ve varsayılan olarak 75.0 olan yeni bir **-XX: MaxRAMPercentage** bayrağı (flag) vardır. Bu nedenle, 1 GB bellek sınırı varsa, JVM yığını (heap) varsayılan olarak \~ 750 MB ile sınırlıdır.

  Detaylı bilgi için [tıklayınız](https://www.eclipse.org/openj9/docs/xxinitialrampercentage/).
</Info>

#### API Developer Portal Kurulumu API Manager Üzerinden Yapılmayacaksa

API Developer Portali'nin manuel olarak kurulması için aşağıdaki adımlar takip edilmelidir.

<Warning>
  **Önemli:** API Manager API adresi ve API Key/Token bilgisini içeren Kubernetes **Secret** oluşturulmalıdır. Aşağıdaki bilgiler kurumunuza göre doldurulmalıdır.
</Warning>

* **apinizerManagementApiBaseUrl**: API Developer Portal'in Apinizer Management API'lerini tüketebilmesi için gerekli olan API Manager üzerinde çalışan Management API adresidir. Örnek bir adres: `http://apimanager-ui-ip-address:port`
* **apiKey**: API Developer Portal'in Apinizer Management API'lerini tüketebilmesi için gerekli olan token bilgisidir.

```bash theme={null}
API_MANAGER_URL='<APINIZER_MANAGEMENT_API_BASE_URL>'
API_MANAGER_APIKEY='<API_KEY>'
API_PORTAL_ID='<API_PORTAL_ID>' # Portal genel bakıştan alınan ID

echo -n ${API_MANAGER_URL} | base64  # Bunun çıktısını bir sonraki adımda <ENCODED_URL> değişkeni yerine koyacağız
echo -n ${API_MANAGER_APIKEY} | base64  # Bunun çıktısını bir sonraki adımda <ENCODED_API_KEY> değişkeni yerine koyacağız
echo -n ${API_PORTAL_ID} | base64 # Çıktıyı <ENCODED_API_PORTAL_ID> yerine yazın

vi api-portal-secret.yaml
```

```yaml theme={null}
apiVersion: v1
kind: Namespace
metadata:
  name: apinizer-portal
---
apiVersion: v1
kind: Secret
metadata:
  name: apinizer-portal-secret
  namespace: apinizer-portal
type: Opaque
data:
  apinizerManagementApiBaseUrl: <ENCODED_URL>
  apiKey: <ENCODED_API_KEY>
  apiPortalId: <ENCODED_API_PORTAL_ID>
```

```bash theme={null}
kubectl apply -f api-portal-secret.yaml
```

```bash theme={null}
vi apinizer-portal-deployment.yaml
```

```yaml theme={null}
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: apinizer-portal
  namespace: apinizer-portal
spec:
  replicas: 1
  selector:
    matchLabels:
      app: apinizer-portal
      version: v1
  template:
    metadata:
      labels:
        app: apinizer-portal
        version: v1
    spec:
      containers:
        - name: apinizer-portal-app
          image: apinizercloud/apiportal:<APINIZER_VERSION>
          env:
            - name: SPRING_PROFILES_ACTIVE
              value: prod
            - name: JAVA_OPTS
              value: -XX:MaxRAMPercentage=75.0
            - name: API_PORTAL_MANAGEMENT_API_BASE_URL
              valueFrom:
                secretKeyRef:
                  key: apinizerManagementApiBaseUrl
                  name: apinizer-portal-secret
            - name: API_PORTAL_MANAGEMENT_API_KEY
              valueFrom:
                secretKeyRef:
                  key: apiKey
                  name: apinizer-portal-secret
            - name: API_PORTAL_ID
              valueFrom:
                secretKeyRef:
                  key: apiPortalId
                  name: apinizer-portal-secret
          livenessProbe:
            failureThreshold: 13
            httpGet:
              path: /apinizer/management/health
              port: 8080
              scheme: HTTP
            initialDelaySeconds: 60
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 30
          ports:
            - containerPort: 8080
              protocol: TCP
          readinessProbe:
            failureThreshold: 13
            httpGet:
              path: /apinizer/management/health
              port: 8080
              scheme: HTTP
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 30
          resources:
            limits:
              cpu: "1"
              memory: 1Gi
          startupProbe:
            failureThreshold: 13
            httpGet:
              path: /apinizer/management/health
              port: 8080
              scheme: HTTP
            initialDelaySeconds: 60
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
  name: apinizer-portal-service
  namespace: apinizer-portal
  labels:
    app: apinizer-portal
spec:
  selector:
    app: apinizer-portal
  type: NodePort
  ports:
    - name: http
      port: 8080
      nodePort: <API_DEVELOPER_PORTAL_PORT>
```

```bash theme={null}
kubectl apply -f apinizer-portal-deployment.yaml
```

<Warning>
  **Önemli**

  Bu aşamaya kadar API Developer Portal arayüzü kurulumu yapılmış olabilir, ancak API'lerin API Developer Portal üzerinde görüntülenebilmesi, Credential'ların oluşturulması ve diğer yeteneklerin kullanılabilmesi için API Manager ile entegrasyonunun yapılması gerekmektedir.
</Warning>

### API Developer Portal'in API Manager ile Entegrasyonu

API Manager'da, **Portal → Ayarlar → Portal** sayfasına giderek, kurumunuza uygun tanımları yapınız.

[Detaylı bilgi için tıklayınız](/tr/api-portal/api-portal-ayarlari).

### API Developer Portal'i SSL ile Başlatma

İstenilen durumlarda API Developer Portal SSL ile erişime açılabilir.

[Detaylı bilgi için tıklayınız](/tr/operations/yonetici-kilavuzlari/api-developer-portal-ssl).

Yukarıdaki adımlar tamamlandıktan ve Kubernetes üzerinde API Portal'e ait olan Pod'ların hazır durumda olduğundan emin olduktan sonra, Portal Arayüzüne erişmek için aşağıdaki adresten erişim sağlanabilir.

```
http://<KUBERNETES_WORKER_IP>:<API_PORTAL_PORT>
```

## Sonraki Adımlar

<CardGroup cols={2}>
  <Card title="API Portal Genel Bakış" icon="window-maximize" href="/tr/api-portal/genel-bakis">
    API Portal hakkında detaylı bilgi alın
  </Card>

  <Card title="API Integration Kurulumu" icon="plug" href="/tr/setup/apinizer/api-integration">
    API Integration kurulumunu öğrenin
  </Card>

  <Card title="Multi-Region Kurulum" icon="globe" href="/tr/setup/apinizer/multi-region">
    Multi-Region kurulumunu öğrenin
  </Card>

  <Card title="Apinizer Kurulumu" icon="server" href="/tr/setup/apinizer/apinizer">
    Apinizer kurulumunu öğrenin
  </Card>
</CardGroup>
