> ## 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 Based Throttling Uygulanması - Sabit Zaman Aralıkları

Bu senaryoda Apinizer üzerinde oluşturulan Mock API'ye **API Based Throttling** politikasının uygulanması test edilecektir.

Servisler için **throttling** kullanmak aşırı yüklenmeyi önlemeyerek istek miktarını sınırlama yöntemidir.

Senaryoda, gelen istekleri 5 dakikalık eşit zaman aralıklarına bölerek her 5 dakikada yalnızca 10 isteğin kabul edilmesini sağlayabiliriz.

Mock api örneği oluşturup politikayı ekleyelim.

<img src="https://mintcdn.com/apinizer/Ttu-s3OL9b1z3iwB/images/tutorials/api-based1.png?fit=max&auto=format&n=Ttu-s3OL9b1z3iwB&q=85&s=0cddc738aa468ba36c91e18b19f4c221" alt="Generate JWK Ekranı" width="1000" data-path="images/tutorials/api-based1.png" />

Politika olarak **API Based Throttling** ekliyoruz.

<img src="https://mintcdn.com/apinizer/abuBX6Yq8rI5YqRN/images/tutorials/api-based2.png?fit=max&auto=format&n=abuBX6Yq8rI5YqRN&q=85&s=e1fff763dea7c294839f4091b0ce9b36" alt="Generate JWK Ekranı" width="1000" data-path="images/tutorials/api-based2.png" />

Senaryoda, gelen istekleri **Fixed Window** (Sabit Pencere) yöntemiyle **5 dakikada 10 istekle** sınırlayalım.

* Eğer periyot 5 dakika olarak ayarlanmışsa ve örneğin politika saat **12:00:00'da** kaydedildiyse:
* **12:00:00** ile **12:04:59** arasındaki istekler aynı pencerede sayılır.
* **12:05:00'da** yeni bir pencere başlar ve sayaç sıfırlanır.

<img src="https://mintcdn.com/apinizer/abuBX6Yq8rI5YqRN/images/tutorials/api-based3.png?fit=max&auto=format&n=abuBX6Yq8rI5YqRN&q=85&s=60169bba61322238bbac92ec8f4fb6b2" alt="Generate JWK Ekranı" width="1000" data-path="images/tutorials/api-based3.png" />

| Alan                                          | Açıklama                                                                                                                                                |
| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Show Rate Limit Statistics in Response Header | Aktifleştirilir ise yanıt başlığındaki oranı sınırı istatistiklerini gösterir.                                                                          |
| Permitted Message Count                       | İzin verilen istek sayısıdır. Bu senaryoda 10 olarak belirledik.                                                                                        |
| Interval Time Amount                          | Seçilen zaman birimine göre belirlenen periyottur. Bu senaryoda 5 olarak belirledik.                                                                    |
| Interval Time Unit                            | Zaman birimi. Bu senaryoda dakika olarak belirledik.                                                                                                    |
| Target-Specific Throttling Rules              | Her hedef için özel throttling sınırları tanımlanır.                                                                                                    |
| Interval Window Type                          | Zaman aralığını uygulamak için kullanılan yöntem. Fixed türünde 5 dakikalık zaman periyotları.                                                          |
| Cache Connection Timeout (Second)             | Politika ile cache arasındaki bağlantı için bağlantı zaman aşımı değerini belirtin.                                                                     |
| Action for Cache Connection Error             | Cache ile bağlantı problemi yaşanırsa, hata döndürmesi (Fail seçilir) veya istek kısıtı uygulanmadan devam etmesi (Continue seçilir) durumu belirlenir. |

Test konsolundan örnek istek attığımızda, mevcut zamanda saat 14:00:00 ve 14:04:59 zaman aralığında 10. istek sonrasında kısıtlama sınırına ulaşıldığı için, mesaj engellendi.

<img src="https://mintcdn.com/apinizer/abuBX6Yq8rI5YqRN/images/tutorials/api-based4.png?fit=max&auto=format&n=abuBX6Yq8rI5YqRN&q=85&s=c1e37957baa968c27281779ffefb340d" alt="Generate JWK Ekranı" width="1000" data-path="images/tutorials/api-based4.png" />

## Target-Specific Throttling Rules (Hedefe Özel Throttling Kuralları)

Bu özellik sayesinde belirli kullanıcılar veya hedefler için özel throttling sınırlamaları tanımlayabilirsiniz.

Politika olarak **API Based Throttling** ekliyoruz.

<img src="https://mintcdn.com/apinizer/abuBX6Yq8rI5YqRN/images/tutorials/api-based5.png?fit=max&auto=format&n=abuBX6Yq8rI5YqRN&q=85&s=830b329c1533f3413181109272cf2003" alt="Generate JWK Ekranı" width="1000" data-path="images/tutorials/api-based5.png" />

* Target-Specific Throttling Rules (Hedefe Özel Throttling Kuralları) kullanarak kullanıcı bazlı (header, body veya başka bir alana göre) özel kota sınırları belirlenebilmektedir. Genel politikada gelen istekleri **Fixed Window** (Sabit Pencere) yöntemiyle **5 dakika için 100 istekle** sınırlarken, aynı zamanda **user1** kullanıcısı için **5 dakikada maksimum 5** istek limiti tanımlanabilmektedir.
* Fixed Window yönteminde eğer periyot 5 olarak ayarlanmışsa ve dakika seçilmişse:
* Örneğin, politika saat 12:00:00'de kaydedildiyse, bu politika bulunduğunuz gün içinde saat **12:00:00** ile **12:04:59** arasında geçerli olacaktır ve bu süre içinde genel kural olarak 100 istek yapılabilir.
* Target-Specific Quota Rules ile tanımladığımız **user1** kullanıcısı için ise dakika bazında bir limit belirlenmiştir. Eğer bir 5 dakikalık dilim **12:00:00**'da başlıyorsa, bu **12:00:00** ile **12:04:59** arasındaki süreyi kapsar ve **user1** kullanıcısı bu zaman aralığında en fazla 5 istek yapabilir. Sonraki 5 dakikalık dilimde (12:05:00) sayaç sıfırlanır.
* Bir sonraki 5 dakikalık dilimde (örneğin **12:05:00** ile **12:09:59** arasında) genel politika için yeni bir 100 istek hakkı tanımlanırken, **user1** kullanıcısı için de yeniden 5 istek hakkı tanımlanacaktır.

<img src="https://mintcdn.com/apinizer/abuBX6Yq8rI5YqRN/images/tutorials/api-based6.png?fit=max&auto=format&n=abuBX6Yq8rI5YqRN&q=85&s=0bf0054f6a794aeb14d5ed8c670fde5d" alt="Generate JWK Ekranı" width="1000" data-path="images/tutorials/api-based6.png" />

Test konsolundan örnek istek attığımızda, username Header'ından user1 kullanıcısı ile istek attığımızda mevcut saatte **12:00:00** ile **12:04:59** zaman aralığında 5. istek sonrasında kısıtlama sınırına ulaşıldığı için, mesaj engellendi.

<img src="https://mintcdn.com/apinizer/abuBX6Yq8rI5YqRN/images/tutorials/api-based7.png?fit=max&auto=format&n=abuBX6Yq8rI5YqRN&q=85&s=4c9df5587d259257da7f525dfc4d044f" alt="Generate JWK Ekranı" width="1000" data-path="images/tutorials/api-based7.png" />
