Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. info
Ne?
Kota politikasını kullanarak bir API proxy'sinin belirli bir süre (ör. dakika, saat, gün, hafta veya ay) boyunca izin verdiği istek mesajlarının sayısını yapılandırın. Kotayı, API proxy'sine erişen tüm uygulamalar için aynı olacak şekilde ayarlayabilir veya kotayı şu ölçütlere göre belirleyebilirsiniz:
- API proxy'sini içeren ürün
- API'yi isteyen uygulama
- Uygulama geliştirici
- Diğer birçok ölçüt
Genel trafik artışlarına karşı koruma sağlamak için kotayı kullanmayın. Bunun için Spike Arrest politikasını kullanın. Spike Arrest politikasını inceleyin.
Videolar
Bu videolarda, kota politikasıyla kota yönetimi tanıtılmaktadır:
Giriş (Yeni Edge)
Intro (Classic Edge)
Dinamik kota
Dağıtılmış ve Eşzamanlı
Mesaj ağırlığı
Takvim
Hareketli Pencere
Flexi
Koşullu kota
Akış değişkenleri
Hata İşleme
Örnekler
Bu politika kodu örnekleri, kota dönemlerinin nasıl başlatılıp sonlandırılacağını gösterir:
Daha fazla dinamik kota
<Quota name="CheckQuota"> <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval> <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit> <Allow count="200" countRef="verifyapikey.verify-api-key.apiproduct.developer.quota.limit"/> </Quota>
Dinamik kotalar, kota politikasına iletilen bilgilere göre farklı kota ayarlarını zorunlu kılan tek bir kota politikası yapılandırmanıza olanak tanır. Bu bağlamda kota ayarları için kullanılan diğer bir terim "Hizmet Planı"dır. Dinamik kota, uygulamaların "Hizmet Planı"nı kontrol eder ve bu ayarları zorunlu kılar.
Not: Bir öğe için hem değer hem de referans belirtirseniz referans öncelikli olur. Çalışma zamanında referans çözümlenmezse değer kullanılır.
Örneğin, bir API ürünü oluşturduğunuzda izin verilen kota sınırını, zaman birimini ve aralığını isteğe bağlı olarak ayarlayabilirsiniz. Ancak bu değerlerin API ürününde ayarlanması, API proxy'sinde kullanılmalarını zorunlu kılmaz. Ayrıca, bu değerleri okuyan API proxy'sine bir kota politikası da eklemeniz gerekir. Daha fazla bilgi için API ürünleri oluşturma başlıklı makaleyi inceleyin.
Yukarıdaki örnekte, kota politikasını içeren API proxy'si, bir istekte iletilen API anahtarını doğrulamak için verify-api-key adlı bir VerifyAPIKey politikası kullanır. Kota politikası, API ürününde ayarlanan kota değerlerini okumak için VerifyAPIKey politikasındaki akış değişkenlerine erişir. VerifyAPIKey akış değişkenleri hakkında daha fazla bilgi için API anahtarını doğrulama politikası başlıklı makaleyi inceleyin.
Diğer bir seçenek de tek tek geliştiriciler veya uygulamalar için özel özellikler ayarlayıp bu değerleri kota politikasında okumaktır. Örneğin, geliştirici başına farklı kota değerleri ayarlamak istiyorsunuz. Bu durumda, sınırlayıcıyı, zaman birimini ve aralığı içeren geliştiriciye özel özellikler ayarlarsınız. Ardından, bu değerlere aşağıda gösterildiği gibi kota politikasında referans verirsiniz:
<Quota name="DeveloperQuota"> <Identifier ref="verifyapikey.verify-api-key.client_id"/> <Interval ref="verifyapikey.verify-api-key.developer.timeInterval"/> <TimeUnit ref="verifyapikey.verify-api-key.developer.timeUnit"/> <Allow countRef="verifyapikey.verify-api-key.developer.limit"/> </Quota>
Bu örnekte, geliştiricide ayarlanan özel özelliklere referans vermek için VerifyAPIKey akış değişkenleri de kullanılır.
Kota politikasının parametrelerini ayarlamak için herhangi bir değişkeni kullanabilirsiniz. Bu değişkenler şu kaynaklardan gelebilir:
- Akış değişkenleri
- API ürünü, uygulama veya geliştirici üzerindeki özellikler
- Anahtar/değer eşlemesi (KVM)
- Başlık, sorgu parametresi, form parametresi vb.
Her API proxy'si için, diğer tüm proxy'lerdeki diğer tüm kota politikalarıyla aynı değişkene referans veren bir kota politikası ekleyebilirsiniz. Alternatif olarak, kota politikası, bu politika ve proxy için benzersiz olan değişkenlere referans verebilir.
Başlangıç Zamanı
<Quota name="QuotaPolicy" type="calendar"> <StartTime>2017-02-18 10:30:00</StartTime> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </Quota>
type değeri calendar olarak ayarlanmış bir kota için açık bir <StartTime> değeri tanımlamanız gerekir. Zaman değeri, yerel saat değil GMT saatidir. calendar türündeki bir politika için <StartTime> değeri sağlamazsanız Edge hata verir.
Her uygulamanın kota sayacı <StartTime>,
<Interval> ve <TimeUnit> değerlerine göre yenilenir. Bu örnekte, kota 18 Şubat 2017'de saat 10:30'da (GMT) saymaya başlar ve her 5 saatte bir yenilenir. Bu nedenle, bir sonraki yenileme 18 Şubat 2017'de GMT saatine göre 15:30'da gerçekleşecektir.
Erişim Sayacı
<Quota name="QuotaPolicy"> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </Quota>
API proxy'si, kota politikası tarafından ayarlanan akış değişkenlerine erişebilir. Koşullu işleme gerçekleştirmek, kota sınırına yaklaştıkça politikayı izlemek, mevcut kota sayacını bir uygulamaya döndürmek veya başka nedenlerle bu akış değişkenlerine API proxy'sinde erişebilirsiniz.
Politikanın akış değişkenlerine erişim, policies name özelliğine dayandığından, yukarıdaki QuotaPolicy adlı politika için akış değişkenlerine şu biçimde erişirsiniz:
ratelimit.QuotaPolicy.allowed.count: İzin verilen sayı.ratelimit.QuotaPolicy.used.count: Geçerli sayaç değeri.ratelimit.QuotaPolicy.expiry.time: Sayacın sıfırlandığı UTC saati.
Aşağıda açıklandığı gibi, erişebileceğiniz başka birçok akış değişkeni vardır.
Örneğin, kota akışı değişkenlerinin değerlerini yanıt üstbilgileri olarak döndürmek için aşağıdaki AssignMessage politikasını kullanabilirsiniz:
<AssignMessage async="false" continueOnError="false" enabled="true" name="ReturnQuotaVars"> <AssignTo createNew="false" type="response"/> <Set> <Headers> <Header name="QuotaLimit">{ratelimit.QuotaPolicy.allowed.count}</Header> <Header name="QuotaUsed">{ratelimit.QuotaPolicy.used.count}</Header> <Header name="QuotaResetUTC">{ratelimit.QuotaPolicy.expiry.time}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
İlk İstek
<Quota name="MyQuota"> <Interval>1</Interval> <TimeUnit>hour</TimeUnit> <Allow count="10000"/> </Quota>
Bir saatte 10.000 çağrı kotası uygulamak için bu örnek kodu kullanın. Politika, her saatin başında kota sayacını sıfırlar. Sayaç, saat sona ermeden önce 10.000 çağrı kotasına ulaşırsa 10.000'i aşan çağrılar reddedilir.
Örneğin, sayaç 2017-07-08 07:00:00 ile başlıyorsa 2017-07-08 08:00:00 (başlangıç zamanından 1 saat sonra) değerine sıfırlanır. İlk ileti 2017-07-08 07:35:28 tarihinde alınırsa ve ileti sayısı 2017-07-08 08:00:00 tarihinden önce 10.000'e ulaşırsa bu sayının üzerindeki aramalar, saat başında sayı sıfırlanana kadar reddedilir.
Sayaç sıfırlama süresi, <Interval> ve <TimeUnit> kombinasyonuna göre belirlenir. Örneğin, <Interval> değerini 12 olarak ayarlarsanız ve <TimeUnit> değeri saat olursa sayaç her on iki saatte bir sıfırlanır.
<TimeUnit> değerini dakika, saat, gün, hafta veya ay olarak ayarlayabilirsiniz.
Bu politikaya API proxy'nizin birden fazla yerinde referans verebilirsiniz. Örneğin, her istekte yürütülmesi için bunu Proxy PreFlow'a yerleştirebilirsiniz. Alternatif olarak, API proxy'sindeki birden fazla akışa yerleştirebilirsiniz. Bu politikayı proxy'de birden fazla yerde kullanırsanız politikanın tüm örnekleri tarafından güncellenen tek bir sayaç tutar.
Alternatif olarak, API proxy'nizde birden fazla kota politikası tanımlayabilirsiniz. Her kota politikası, politikanın name özelliğine göre kendi sayacını tutar.
Tanımlayıcıyı ayarlama
<Quota name="QuotaPolicy" type="calendar"> <Identifier ref="request.header.clientId"/> <StartTime>2017-02-18 10:00:00</StartTime> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </Quota>
Varsayılan olarak, bir kota politikası, isteğin kaynağına bakılmaksızın API proxy'si için tek bir sayaç tanımlar. Alternatif olarak, <Identifier> özelliğinin değerine göre ayrı sayaçlar tutmak için kota politikasıyla birlikte <Identifier> özelliğini kullanabilirsiniz.
Örneğin, her istemci kimliği için ayrı sayaçlar tanımlamak üzere <Identifier> etiketini kullanın. İstemci uygulaması, vekil sunucunuza yapılan bir istekte yukarıdaki örnekte gösterildiği gibi clientID içeren bir başlık iletir.
<Identifier> özelliğine herhangi bir akış değişkeni belirtebilirsiniz. Örneğin, id adlı bir sorgu parametresinin benzersiz tanımlayıcıyı içerdiğini belirtebilirsiniz:
<Identifier ref="request.queryparam.id"/>
API anahtarını doğrulamak için VerifyAPIKey politikasını veya OAuth jetonlarıyla OAuthV2 politikalarını kullanıyorsanız aynı kota politikası için ayrı sayaçlar tanımlamak üzere API anahtarındaki veya jetondaki bilgileri kullanabilirsiniz. Örneğin, aşağıdaki
<Identifier> etiketi, verify-api-key adlı bir VerifyAPIKey politikasının client_id akış değişkenini kullanır:
<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>
Her benzersiz client_id değeri artık kota politikasında kendi sayacını tanımlıyor.
Sınıf
<Quota name="QuotaPolicy">
<Interval>1</Interval>
<TimeUnit>day</TimeUnit>
<Allow>
<Class ref="request.header.developer_segment">
<Allow class="platinum" count="10000"/>
<Allow class="silver" count="1000" />
</Class>
</Allow>
</Quota>Sınıfa dayalı kota sayısı kullanarak kota sınırlarını dinamik olarak ayarlayabilirsiniz. Bu örnekte, kota sınırı her istekle birlikte iletilen developer_segment başlığının değeriyle belirlenir. Bu değişkenin değeri platinum veya silver olabilir. Başlıkta geçersiz bir değer varsa politika, kota ihlali hatası döndürür.
Kota politikası hakkında
Kota, bir API proxy'sinin belirli bir süre (ör. dakika, saat, gün, hafta veya ay) içinde işleyebileceği istek mesajlarının ayrılmış kısmıdır. Politika, API proxy'si tarafından alınan isteklerin sayısını gösteren sayaçları tutar. Bu özellik, API sağlayıcıların belirli bir süre içinde uygulamalar tarafından yapılan API çağrılarının sayısına sınır uygulamasına olanak tanır. Kota politikalarını kullanarak örneğin uygulamaları dakikada 1 istekle veya ayda 10.000 istekle sınırlayabilirsiniz.
Örneğin, kota ayda 10.000 ileti olarak tanımlanmışsa hız sınırlama, 10.000. iletiden sonra başlar. Bu dönemde ilk gün mü yoksa son gün mü 10.000 mesaj sayıldığı önemli değildir. Belirtilen zaman aralığının sonunda kota sayacı otomatik olarak sıfırlanana veya Kotayı Sıfırla politikası kullanılarak kota açıkça sıfırlanana kadar ek istek gönderilemez.
Kota'nın bir varyasyonu olan SpikeArrest, kullanımda ani artış, hatalı istemciler veya kötü amaçlı saldırılar nedeniyle oluşabilecek trafik artışlarını (veya patlamalarını) önler. SpikeArrest hakkında daha fazla bilgi için Spike Arrest politikası konusuna bakın.
Kotalar, tek tek API proxy'leri için geçerlidir ve API proxy'leri arasında dağıtılmaz. Örneğin, bir API ürününde üç API proxy'niz varsa üçü de aynı kota politikası yapılandırmasını kullansa bile üçü arasında tek bir kota paylaşılmaz.
Kota politikası türleri
Kota politikası; varsayılan, calendar, flexi ve rollingwindow olmak üzere çeşitli politika türlerini destekler. Her tür, aşağıdaki tabloda gösterildiği gibi kota sayacının ne zaman başlayacağını ve ne zaman sıfırlanacağını tanımlar:
| Zaman Birimi | Varsayılan (veya boş) sıfırlama | takvim sıfırlama | flexi reset |
|---|---|---|---|
| dakika | Sonraki dakikanın başlangıcı | <StartTime> tarihinden bir dakika sonra |
İlk istekten bir dakika sonra |
| saat | Bir sonraki saatin başında | <StartTime> saat sonra |
İlk istekten bir saat sonra |
| gün | Geçerli günün GMT saatine göre gece yarısı | 24 saat (<StartTime> itibarıyla) |
İlk istekten 24 saat sonra |
| hafta | Haftanın sonunda, pazar günü gece yarısı (GMT) | Bir hafta (<StartTime> itibarıyla) |
İlk istekten bir hafta sonra |
| ay | Ayın son gününde GMT ile gece yarısı | Bir ay (28 gün) (<StartTime> itibarıyla) |
İlk istekten bir ay (28 gün) sonra |
type="calendar" için <StartTime> değerini belirtmeniz gerekir.
Tabloda rollingwindow türü için değer listelenmiyor. Hareketli pencere kotaları, bir saatlik veya bir günlük pencere gibi bir kota "penceresinin" boyutunu ayarlayarak çalışır. Yeni bir istek geldiğinde politika, geçmişteki "zaman aralığında" kotanın aşılıp aşılmadığını belirler.
Örneğin, 1.000 isteğe izin veren iki saatlik bir pencere tanımladığınızı varsayalım. Saat 16:45'te yeni bir istek gelir. Politika, son iki saatlik pencerenin kota sayısını hesaplar. Bu, saat 14:45'ten itibaren gelen isteklerin sayısı anlamına gelir. İki saatlik süre içinde kota sınırı aşılmamışsa isteğe izin verilir.
Bir dakika sonra, saat 16:46'da başka bir istek gelir. Artık politika, sınırın aşılıp aşılmadığını belirlemek için saat 14:46'dan itibaren kota sayısını hesaplıyor.
rollingwindow türünde sayaç hiçbir zaman sıfırlanmaz ancak her istekte yeniden hesaplanır.
Kota sayaçlarını anlama
Varsayılan olarak, bir kota politikası, API proxy'sinde kaç kez referans verdiğinizden bağımsız olarak tek bir sayaç tutar. Kota sayacının adı, politikanın name özelliğine göre belirlenir.
Örneğin, 5 istek sınırı olan MyQuotaPolicy adlı bir kota politikası oluşturup bunu API proxy'sindeki birden fazla akışa (A, B ve C akışları) yerleştirirsiniz. Birden fazla akışta kullanılsa da politikanın tüm örnekleri tarafından güncellenen tek bir sayaç tutar:
- A akışı yürütülür -> MyQuotaPolicy yürütülür ve sayacı = 1 olur.
- B akışı yürütülür -> MyQuotaPolicy yürütülür ve sayacı = 2 olur.
- A akışı yürütülür -> MyQuotaPolicy yürütülür ve sayacı = 3 olur.
- C akışı yürütülür -> MyQuotaPolicy yürütülür ve sayaç değeri 4 olur.
- A akışı yürütülür -> MyQuotaPolicy yürütülür ve sayaç değeri 5 olur.
Kota sayacı sınırına ulaştığı için üç akıştan herhangi birine yapılan sonraki istek reddedilir.
Bir API proxy akışında aynı kota politikasını birden fazla yerde kullanmak, kotanın beklenenden daha hızlı tükenmesine neden olabileceğinden The Book of Apigee Edge Antipatterns'te açıklanan bir anti-pattern'dir.
Alternatif olarak, API proxy'nizde birden fazla kota politikası tanımlayabilir ve her akışta farklı bir politika kullanabilirsiniz. Her kota politikası, politikanın name özelliğine göre kendi sayacını tutar.
Alternatif olarak, tek bir politikada birden fazla benzersiz sayaç tanımlamak için kota politikasındaki <Class> veya <Identifier> öğelerini kullanın. Bu öğeler kullanılarak, isteği gönderen uygulamaya, isteği gönderen uygulama geliştiriciye, istemci kimliğine veya diğer istemci tanımlayıcılara göre tek bir politikada farklı sayaçlar tutulabilir. <Class> veya <Identifier> öğelerini kullanma hakkında daha fazla bilgi için yukarıdaki örneklere bakın.
Zaman gösterimi
Tüm kota zamanları Eşgüdümlü Evrensel Saat (UTC) saat dilimine ayarlanır.
Kota zamanı gösterimi, Uluslararası Standart ISO 8601'de tanımlanan uluslararası standart tarih gösterimine uygundur.
Tarihler, yıl, ay ve gün olarak aşağıdaki biçimde tanımlanır: YYYY-MM-DD.
Örneğin, 2015-02-04, 4 Şubat 2015'i temsil eder.
Günün saati, aşağıdaki biçimde saat, dakika ve saniye olarak tanımlanır:
hours:minutes:seconds. Örneğin, 23:59:59, gece yarısından bir saniye önceki zamanı gösterir.
Bir tarihle ilişkilendirilebilecek iki gece yarısını ayırt etmek için 00:00:00 ve 24:00:00 olmak üzere iki gösterim kullanılabileceğini unutmayın. Bu nedenle 2015-02-04
24:00:00, 2015-02-05 00:00:00 ile aynı tarih ve saattir. Genellikle ikinci gösterim tercih edilir.
API ürünü yapılandırmasından kota ayarlarını alma
API ürünü yapılandırmalarında kota sınırları belirleyebilirsiniz. Bu sınırlar, kotayı otomatik olarak zorunlu kılmaz. Bunun yerine, kota politikasında ürün kotası ayarlarına referans verebilirsiniz. Kota politikalarının referans alması için ürüne kota belirlemenin bazı avantajları şunlardır:
- Kota politikaları, API ürünündeki tüm API proxy'lerinde tek bir ayar kullanabilir.
- Bir API ürünündeki kota ayarında çalışma zamanı değişiklikleri yapabilirsiniz. Değere referans veren kota politikaları, kota değerlerini otomatik olarak günceller.
Kota ayarlarını bir API ürününden kullanma hakkında daha fazla bilgi için yukarıdaki "Dinamik Kota" örneğine bakın..
Kota sınırları olan API ürünlerini yapılandırma hakkında bilgi için API ürünleri oluşturma başlıklı makaleyi inceleyin.
Öğe referansı
Bu politikada yapılandırabileceğiniz öğeler ve özellikler aşağıda verilmiştir. Bazı öğe kombinasyonlarının birbirini dışladığını veya gerekli olmadığını unutmayın. Belirli kullanımlar için örneklere bakın. İsteklerde uygulamanın API anahtarını kontrol etmek için "VerifyAPIKey" adlı bir API anahtarını doğrulama politikası kullanıldığında aşağıdaki verifyapikey.VerifyAPIKey.apiproduct.* değişkenleri varsayılan olarak kullanılabilir.
Değişken değerleri, anahtarın ilişkili olduğu API ürünündeki kota ayarlarından gelir. Bu durum, API ürünü yapılandırmasından kota ayarlarını alma bölümünde açıklanmıştır.
<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar"> <DisplayName>Quota 3</DisplayName> <Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/> <Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow> <Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval> <TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit> <StartTime>2017-7-16 12:00:00</StartTime> <Distributed>false</Distributed> <Synchronous>false</ Synchronous> <AsynchronousConfiguration> <SyncIntervalInSeconds>20</ SyncIntervalInSeconds> <SyncMessageCount>5</ SyncMessageCount> </AsynchronousConfiguration> <Identifier/> <MessageWeight/> </Quota>
<Quota> özellikleri
<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">
Aşağıdaki özellikler bu politikaya özeldir.
| Özellik | Açıklama | Varsayılan | Varlık |
|---|---|---|---|
| tür |
Kota sayacının kota kullanımını ne zaman ve nasıl kontrol edeceğini belirlemek için kullanılır. Daha fazla bilgi için kota politikası türlerini inceleyin. Bir Geçerli değerler şunlardır:
|
takvim | İsteğe bağlı |
Aşağıdaki tabloda tüm politika üst öğelerinde ortak olan özellikler açıklanmaktadır:
| Özellik | Açıklama | Varsayılan | Varlık |
|---|---|---|---|
name |
Politikanın dahili adı. İsteğe bağlı olarak, politikayı |
Yok | Zorunlu |
continueOnError |
Bir politika başarısız olduğunda hata döndürmesi için Akış yürütmenin bir politikadan sonra bile devam etmesi için |
false | İsteğe bağlı |
enabled |
Politikayı uygulamak için Politikayı devre dışı bırakmak için |
true | İsteğe bağlı |
async |
Bu özelliğin desteği sonlandırıldı. |
false | Kullanımdan kaldırıldı |
<DisplayName> öğe
Politikayı name özelliğine ek olarak
farklı bir doğal dil adına sahip yönetim arayüzü proxy düzenleyicisi.
<DisplayName>Policy Display Name</DisplayName>
| Varsayılan |
Yok Bu öğeyi çıkarırsanız politikanın |
|---|---|
| Varlık | İsteğe bağlı |
| Tür | Dize |
<Allow> öğesi
Kotanın sayı sınırını belirtir. Politikanın sayacı bu sınır değerine ulaşırsa sayaç sıfırlanana kadar sonraki çağrılar reddedilir.
Aşağıda, <Allow> öğesini ayarlamanın üç yolu gösterilmektedir:
<Allow count="2000"/>
<Allow countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
<Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
Hem count hem de countRef öğesini belirtirseniz countRef öncelikli olur. countRef çalışma zamanında çözümlenmezse count değeri kullanılır.
| Varsayılan: | Yok |
| Mevcut olma: | İsteğe bağlı |
| Tür: | Tamsayı |
Özellikler
| Özellik | Açıklama | Varsayılan | Varlık |
|---|---|---|---|
| sayı |
Kotayla ilgili ileti sayısını belirtmek için kullanılır. Örneğin, 100 olan |
2000 | İsteğe bağlı |
| countRef |
Bir kotayla ilgili ileti sayısını içeren bir akış değişkeni belirtmek için kullanılır.
|
yok | İsteğe bağlı |
<Allow>/<Class> öğesi
<Class> öğesi, <Allow> öğesinin değerini bir akış değişkeninin değerine göre koşullandırmanıza olanak tanır. Politika, <Class> öğesinin her farklı <Allow> alt etiketi için farklı bir sayaç tutar.
<Class> öğesini kullanmak için <Class> etiketine ref özelliğini kullanarak bir akış değişkeni belirtin. Ardından Edge, izin verilen politika sayısını belirlemek için <Allow> alt etiketlerinden birini seçmek üzere akış değişkeninin değerini kullanır. Edge, akış değişkeninin değerini aşağıdaki örnekte gösterildiği gibi <Allow> etiketinin class özelliğiyle eşleştirir:
<Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow>
Bu örnekte, mevcut kota sayacı, her istekle birlikte iletilen time_variable sorgu parametresinin değeriyle belirlenir. Bu değişkenin değeri peak_time veya off_peak_time olabilir. Sorgu parametresi geçersiz bir değer içeriyorsa politika, kota ihlali hatası döndürür.
| Varsayılan: | Yok |
| Mevcut olma: | İsteğe bağlı |
| Tür: | Yok |
Özellikler
| Özellik | Açıklama | Varsayılan | Varlık |
|---|---|---|---|
| ref |
Bir kotanın kota sınıfını içeren akış değişkenini belirtmek için kullanılır. |
yok | Zorunlu |
<Allow>/<Class>/<Allow> öğesi
<Allow> öğesi, <Class> öğesi tarafından tanımlanan bir kota sayacı için sınırı belirtir. Politika, <Class> öğesinin her farklı <Allow> alt etiketi için farklı bir sayaç tutar.
Örneğin:
<Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow>
Bu örnekte, kota politikası peak_time ve off_peak_time adlı iki kota sayacı tutar.
| Varsayılan: | Yok |
| Mevcut olma: | İsteğe bağlı |
| Tür: | Yok |
Özellikler
| Özellik | Açıklama | Varsayılan | Varlık |
|---|---|---|---|
| sınıf |
Kota sayacının adını tanımlar. |
yok | Zorunlu |
| sayı | Sayaç için kota sınırını belirtir. | yok | Zorunlu |
<Interval> öğesi
Edge'in kota kullanımını hesaplayacağı bir zaman aralığını belirlemek için, belirttiğiniz TimeUnit (dakika, saat, gün, hafta veya ay) ile eşleştirilecek bir tam sayı (ör. 1, 2, 5, 60 vb.) belirtmek için kullanılır.
Örneğin, Interval 24 ile TimeUnit hour, kotanın 24 saat içinde hesaplanacağı anlamına gelir.
<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
| Varsayılan: | yok |
| Mevcut olma: | Zorunlu |
| Tür: | Tamsayı |
Özellikler
| Özellik | Açıklama | Varsayılan | Varlık |
|---|---|---|---|
| ref |
Bir kotanın aralığını içeren akış değişkenini belirtmek için kullanılır. |
yok | İsteğe bağlı |
<TimeUnit> öğesi
Kotanın geçerli olduğu zaman birimini belirtmek için kullanılır.
Örneğin, Interval 24 ile TimeUnit hour, kotanın 24 saat içinde hesaplanacağı anlamına gelir.
<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
| Varsayılan: | yok |
| Mevcut olma: | Zorunlu |
| Tür: |
Dize. |
Özellikler
| Özellik | Açıklama | Varsayılan | Varlık |
|---|---|---|---|
| ref | Kota için zaman birimini içeren bir akış değişkeni belirtmek üzere kullanılır. ref
değeri, açık bir aralık değerine göre önceliklidir. ref çalışma zamanında çözümlenmezse değer kullanılır. |
yok | İsteğe bağlı |
<StartTime> öğesi
type, calendar, olarak ayarlandığında, herhangi bir uygulamadan istek alınıp alınmadığına bakılmaksızın kota sayacının saymaya başlayacağı tarih ve saati belirtir.
Örneğin:
<StartTime>2017-7-16 12:00:00</StartTime>
| Varsayılan: | yok |
| Mevcut olma: | type, calendar olarak ayarlandığında gereklidir. |
| Tür: |
ISO 8601 tarih ve saat biçiminde dize. |
<Distributed> öğesi
Edge'in bir yüklemesi, istekleri işlemek için bir veya daha fazla Mesaj İşleyici kullanabilir. Politikanın merkezi bir sayaç tutması ve bunu tüm Mesaj İşleyiciler arasında sürekli olarak senkronize etmesi gerektiğini belirtmek için bu öğeyi true olarak ayarlayın. Mesaj işlemciler, kullanılabilirlik alanları ve/veya bölgeler arasında olabilir.
false varsayılan değerini kullanırsanız her Mesaj İşleyici'nin sayısı paylaşılmadığı için kotanızı aşabilirsiniz:
<Distributed>true</Distributed>
Sayaçların senkronize edildiğinden ve her istekte güncellendiğinden emin olmak için <Distributed> ve <Synchronous> değerlerini true olarak ayarlayın:
<Distributed>true</Distributed> <Synchronous>true</Synchronous>
| Varsayılan: | yanlış |
| Mevcut olma: | İsteğe bağlı |
| Tür: | Boole |
<Synchronous> öğesi
Dağıtılmış kota sayacını eşzamanlı olarak güncellemek için true olarak ayarlayın. Bu, sayaç güncellemesinin, API'ye yapılan bir istekte kota kontrolüyle aynı anda yapıldığı anlamına gelir. Kota üzerinde API çağrılarına izin vermemeniz gerekiyorsa true olarak ayarlayın.
Kota sayacını eşzamansız olarak güncellemek için false olarak ayarlayın. Bu, merkezi depodaki kota sayacı eşzamansız olarak güncellendiğinden, kotayı aşan bazı API çağrılarının geçebileceği anlamına gelir. Ancak, eşzamanlı güncellemelerle ilişkili olası performans etkileriyle karşılaşmazsınız.
Varsayılan eşzamansız güncelleme aralığı 10 saniyedir. Bu eşzamansız davranışı yapılandırmak için AsynchronousConfiguration öğesini kullanın.
<Synchronous>false</Synchronous>
| Varsayılan: | yanlış |
| Mevcut olma: | İsteğe bağlı |
| Tür: | Boole |
<AsynchronousConfiguration> öğesi
Politika yapılandırma öğesi <Synchronous> mevcut değilse veya mevcutsa ve false olarak ayarlanmışsa dağıtılmış kota sayaçları arasındaki senkronizasyon aralığını yapılandırır.
SyncIntervalInSeconds veya SyncMessageCount alt öğelerini kullanarak belirli bir süre sonra ya da belirli sayıda mesajdan sonra senkronize edebilirsiniz.
Bu iki özellik birlikte kullanılamaz. Örneğin,
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
veya
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
| Varsayılan: | SyncIntervalInSeconds = 10 saniye |
| Mevcut olma: | İsteğe bağlıdır. <Synchronous>, true olarak ayarlandığında yoksayılır. |
| Tür: |
Yerleşke |
<AsynchronousConfiguration>/<SyncIntervalInSeconds> öğesi
Bu ayarı, varsayılan davranış olan 10 saniyelik aralıklarla yapılan eşzamansız güncellemeleri geçersiz kılmak için kullanın.
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
Senkronizasyon aralığı, Sınırlar başlıklı makalede açıklandığı gibi en az 10 saniye olmalıdır.
| Varsayılan: | 10 |
| Mevcut olma: | İsteğe bağlı |
| Tür: |
Tamsayı |
<AsynchronousConfiguration>/<SyncMessageCount> öğesi
Kota güncellemeleri arasında tüm Apigee mesaj işlemcilerindeki istek sayısını belirtir.
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
Bu örnek, kota sayısının her Apigee Edge mesaj işleyicisinde 5 istekte bir güncellendiğini belirtir.
| Varsayılan: | Yok |
| Mevcut olma: | İsteğe bağlı |
| Tür: |
Tamsayı |
<Identifier> öğesi
Politikayı, bir akış değişkenine göre benzersiz sayaçlar oluşturacak şekilde yapılandırmak için <Identifier> öğesini kullanın.
Bu öğeyi kullanmazsanız politika, kotaya uygulanan tek bir sayaç kullanır.
Bu öğe, aşağıdaki Apigee Topluluğu yayınında da ele alınmaktadır: Farklı politikalar genelinde kota tanımlayıcısı.
<Identifier ref="verifyapikey.verify-api-key.client_id"/>
| Varsayılan: | Yok |
| Mevcut olma: | İsteğe bağlı |
| Tür: |
Dize |
Özellikler
| Özellik | Açıklama | Varsayılan | Varlık |
|---|---|---|---|
| ref |
İstek için kullanılacak sayacı tanımlayan bir akış değişkeni belirtir. Tanımlayıcı, her uygulama, uygulama kullanıcısı, uygulama geliştirici, API ürünü veya diğer özellikler için benzersiz olan bir HTTP başlığı, sorgu parametresi, form parametresi ya da mesaj içeriği olabilir. Uygulamaları benzersiz şekilde tanımlamak için Bazı durumlarda, güvenlik politikası olmadığı gibi |
Yok | İsteğe bağlı |
<MessageWeight> öğesi
Her iletiye atanan ağırlığı belirtmek için kullanılır. Örneğin, diğerlerinden daha fazla bilgi işlem kaynağı tüketen istek mesajlarının etkisini artırmak için mesaj ağırlığını kullanın.
Örneğin, POST mesajlarının GET mesajları kadar "ağır" veya pahalı olmasını istiyorsunuz. Bu nedenle, bir POST için MessageWeight değerini 2, bir GET için ise 1 olarak ayarlarsınız. İsteğin sayacı etkilememesi için MessageWeight değerini 0 olarak da ayarlayabilirsiniz. Bu örnekte, kota dakika başına 10 mesaj ise ve POST istekleri için MessageWeight 2 ise kota, herhangi bir 10 dakikalık aralıkta 5 POST isteğine izin verir. Sayaç sıfırlanmadan önce yapılan ek istekler (POST veya GET) reddedilir.
MessageWeight değerini temsil eden bir değer, akış değişkeniyle belirtilmelidir ve HTTP üstbilgilerinden, sorgu parametrelerinden, XML veya JSON isteği yükünden ya da başka bir akış değişkeninden çıkarılabilir. Örneğin, weight adlı bir başlıkta ayarlarsınız:
<MessageWeight ref="message_weight"/>
| Varsayılan: | Yok |
| Mevcut olma: | İsteğe bağlı |
| Tür: |
Tamsayı |
Akış değişkenleri
Bir kota politikası yürütüldüğünde aşağıdaki önceden tanımlanmış akış değişkenleri otomatik olarak doldurulur. Akış değişkenleri hakkında daha fazla bilgi için Değişkenler referansı başlıklı makaleyi inceleyin.
| Değişkenler | Tür | İzinler | Açıklama |
|---|---|---|---|
| ratelimit.{policy_name}.allowed.count | Uzun | Salt Okunur | İzin verilen kota sayısını döndürür. |
| ratelimit.{policy_name}.used.count | Uzun | Salt Okunur | Bir kota aralığında kullanılan mevcut kotayı döndürür. |
| ratelimit.{policy_name}.available.count | Uzun | Salt Okunur | Kota aralığındaki kullanılabilir kota sayısını döndürür. |
| ratelimit.{policy_name}.exceed.count | Uzun | Salt Okunur | Kota aşıldıktan sonra 1 değerini döndürür. |
| ratelimit.{policy_name}.total.exceed.count | Uzun | Salt Okunur | Kota aşıldıktan sonra 1 değerini döndürür. |
| ratelimit.{policy_name}.expiry.time | Uzun | Salt Okunur |
Kota geçerliliğinin sona erdiği ve yeni kota aralığının başladığı zamanı belirleyen UTC süresini milisaniye cinsinden döndürür. Kota politika türü |
| ratelimit.{policy_name}.identifier | Dize | Salt Okunur | Politikaya eklenen (istemci) tanımlayıcı referansını döndürür. |
| ratelimit.{policy_name}.class | Dize | Salt Okunur | Müşteri tanımlayıcısıyla ilişkilendirilen sınıfı döndürür. |
| ratelimit.{policy_name}.class.allowed.count | Uzun | Salt Okunur | Sınıfta tanımlanan izin verilen kota sayısını döndürür. |
| ratelimit.{policy_name}.class.used.count | Uzun | Salt Okunur | Bir sınıfta kullanılan kotayı döndürür. |
| ratelimit.{policy_name}.class.available.count | Uzun | Salt Okunur | Sınıftaki kullanılabilir kota sayısını döndürür. |
| ratelimit.{policy_name}.class.exceed.count | Uzun | Salt Okunur | Geçerli kota aralığında sınırdan fazla olan sınıf isteklerinin sayısını döndürür. |
| ratelimit.{policy_name}.class.total.exceed.count | Uzun | Salt Okunur | Tüm kota aralıklarında sınıftaki sınırı aşan isteklerin toplam sayısını döndürür. Bu nedenle, tüm kota aralıkları için class.exceed.count değerlerinin toplamıdır. |
| ratelimit.{policy_name}.failed | Boole | Salt Okunur |
Politikanın başarısız olup olmadığını (doğru veya yanlış) gösterir. |
Hata referansı
Bu bölümde, bu politika bir hatayı tetiklediğinde döndürülen hata kodları ve hata mesajlarının yanı sıra Edge tarafından ayarlanan hata değişkenleri açıklanmaktadır. Hata kuralları geliştirirken bu bilgilerin farkında olmanız önemlidir. hoşuma gitmesi için bir fırsattır. Daha fazla bilgi için Bilmeniz gerekenler Politika hataları ve Kullanım sorun.
Çalışma zamanı hataları
Bu hatalar, politika yürütüldüğünde ortaya çıkabilir.
| Hata kodu | HTTP durumu | Neden | Düzelt |
|---|---|---|---|
policies.ratelimit.FailedToResolveQuotaIntervalReference |
500 | <Interval> öğesi Kota politikası içinde tanımlanmamışsa gerçekleşir. Bu öğe
zorunludur ve kotaya uygulanabilir zaman aralığını belirtmek için kullanılır. Zaman aralığı
<TimeUnit> öğesiyle tanımlanan şekilde dakika, saat, gün, hafta veya ay olabilir. |
build |
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference |
500 | <TimeUnit> öğesi Kota politikası içinde tanımlanmamışsa gerçekleşir. Bu öğe
zorunludur ve kotaya uygulanacak zaman birimini belirtmek için kullanılır. Zaman aralığı
dakika, saat, gün, hafta veya ay biçiminde olabilir. |
build |
policies.ratelimit.InvalidMessageWeight |
500 | <MessageWeight> öğesinin değeri bir akış değişkeni aracılığıyla belirtilirse gerçekleşir
geçersiz (tam sayı olmayan bir değer). |
build |
policies.ratelimit.QuotaViolation |
500 | Kota sınırı aşıldı. | Yok |
Dağıtım hataları
| Hata adı | Neden | Düzelt |
|---|---|---|
InvalidQuotaInterval |
<Interval> öğesinde belirtilen kota aralığı farklıysa
bir tam sayı görüntülerse API proxy'sinin dağıtımı başarısız olur. Örneğin, kota aralığı
belirtilen <Interval> öğesinde 0.1 ise
API proxy'si başarısız oldu.
|
build |
InvalidQuotaTimeUnit |
<TimeUnit> öğesinde belirtilen zaman birimi desteklenmiyorsa
API proxy'sinin dağıtımı başarısız olur. Desteklenen zaman birimleri: minute
hour, day, week ve month.
|
build |
InvalidQuotaType |
Kotanın türü, <Quota> içindeki type özelliği tarafından belirtiliyorsa
öğesinin geçersiz olması durumunda API proxy'sinin dağıtımı başarısız olur. İlgili içeriği oluşturmak için kullanılan
desteklenen kota türleri şunlardır: default, calendar, flexi ve rollingwindow.
|
build |
InvalidStartTime |
<StartTime> öğesinde belirtilen saatin biçimi
geçersizse API proxy'sinin dağıtımı başarısız olur. Geçerli biçim şöyledir: yyyy-MM-dd HH:mm:ss
ISO 8601 tarih ve saat biçimi. Örneğin,
Örneğin, <StartTime> öğesinde belirtilen zaman
7-16-2017 12:00:00 sonrasında API proxy'sinin dağıtımı başarısız olur.
|
build |
StartTimeNotSupported |
Kota türü şu olmayan <StartTime> öğesi belirtilirse
calendar türündeyse API proxy'sinin dağıtımı başarısız olur. <StartTime> öğesi
yalnızca calendar kota türü için desteklenir. Örneğin, type özelliği
<Quota> öğesinde flexi veya rolling window olarak değiştirilirse
dağıtımı başarısız olur.
|
build |
InvalidTimeUnitForDistributedQuota |
<Distributed> öğesi true olarak, <TimeUnit> öğesi ise
second nedeniyle API proxy'sinin dağıtımı başarısız olur. second zaman birimi şunun için geçersiz:
dağıtılmış bir kota kullanır. |
build |
InvalidSynchronizeIntervalForAsyncConfiguration |
<SyncIntervalInSeconds> öğesi için
Kota politikasındaki <AsynchronousConfiguration> öğesi sıfırdan küçükse
dağıtımı başarısız olur. |
build |
InvalidAsynchronizeConfigurationForSynchronousQuota |
Kota politikasında <AsynchronousConfiguration> öğesinin değeri true olarak ayarlanırsa bu ayar aynı zamanda
<AsynchronousConfiguration> öğesi kullanılarak tanımlanmış eşzamansız bir yapılandırma varsa ve
API proxy'sinin dağıtımı başarısız olur. |
build |
Hata değişkenleri
Bu değişkenler, politika bir hatayı tetiklediğinde ayarlanır. Daha fazla bilgi için Bilmeniz gerekenler hakkında daha fazla bilgi edinin.
| Değişkenler | Konum | Örnek |
|---|---|---|
fault.name="fault_name" |
fault_name, yukarıdaki Çalışma zamanı hataları tablosunda listelendiği gibi hatanın adıdır. Hata adı, hata kodunun son kısmıdır. | fault.name Matches "QuotaViolation" |
ratelimit.policy_name.failed |
policy_name, hataya neden olan politikanın kullanıcı tarafından belirtilen adıdır. | ratelimit.QT-QuotaPolicy.failed = true |
Örnek hata yanıtı
{ "fault":{ "detail":{ "errorcode":"policies.ratelimit.QuotaViolation" }, "faultstring":"Rate limit quota violation. Quota limit exceeded. Identifier : _default" } }
Örnek hata kuralı
<FaultRules>
<FaultRule name="Quota Errors">
<Step>
<Name>JavaScript-1</Name>
<Condition>(fault.name Matches "QuotaViolation") </Condition>
</Step>
<Condition>ratelimit.Quota-1.failed=true</Condition>
</FaultRule>
</FaultRules>Şemalar
İlgili konular
Kota, ani artışları önleme ve eşzamanlı hız sınırı politikalarını karşılaştırma