Kota politikası

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 type değeri atladığınızda sayaç, dakikanın/saatin/günün/haftanın/ayın başında başlar.

Geçerli değerler şunlardır:

  • calendar: Açık bir başlangıç zamanına göre kota yapılandırın. Her uygulamanın kota sayacı, ayarladığınız <StartTime>, <Interval> ve <TimeUnit> değerlerine göre yenilenir.
  • rollingwindow: Kota kullanımını belirlemek için "kayan pencere" kullanan bir kota yapılandırın. rollingwindow ile pencerenin boyutunu <Interval> ve <TimeUnit> öğeleriyle belirlersiniz. Örneğin, 1 gün. Bir istek geldiğinde Edge, isteğin tam zamanına (örneğin, 17:01) bakar, o zamandan önceki gün saat 17:01'e kadar gelen isteklerin sayısını (1 gün) sayar ve bu süre içinde kotanın aşılıp aşılmadığını belirler.
  • flexi: Sayaç, bir uygulamadan ilk istek mesajı alındığında başlayacak ve <Interval>, ile <TimeUnit> değerlerine göre sıfırlanacak şekilde bir kota yapılandırın.
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ı. name özelliğinin değeri Harf, sayı, boşluk, kısa çizgi, alt çizgi ve nokta içermelidir. Bu değer, 255 karakteri aşmalıdır.

İsteğe bağlı olarak, politikayı<DisplayName> yönetim arayüzü proxy düzenleyicisinde farklı bir doğal dil adı kullanabilir.

Yok Zorunlu
continueOnError

Bir politika başarısız olduğunda hata döndürmesi için false olarak ayarlayın. Bu beklenen bir durumdur çoğu politika için geçerli olur.

Akış yürütmenin bir politikadan sonra bile devam etmesi için true olarak ayarlayın başarısız olur.

false İsteğe bağlı
enabled

Politikayı uygulamak için true olarak ayarlayın.

Politikayı devre dışı bırakmak için false değerine ayarlayın. Bu politika, bir akışa bağlı kalsa bile uygulanır.

true İsteğe bağlı
async

Bu özelliğin desteği sonlandırıldı.

false Kullanımdan kaldırıldı

&lt;DisplayName&gt; öğ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 name özelliğinin değeri: kullanılır.

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 count özelliği değeri, 1 olan Interval özelliği değeri ve ay olan TimeUnit özelliği değeri, aylık 100 mesaj kotasını belirtir.

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. countRef, count özelliğine göre önceliklidir.

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. ref, açık bir aralık değerine göre önceliklidir. Hem referans hem de değer belirtilmişse referans öncelikli olur. ref çalışma zamanında çözümlenmezse değer 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. minute, hour, day, week veya month arasından seçim yapın.

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

Bir akış değişkeniyle tanımlanan özellikler için benzersiz sayaçlar oluşturabilirsiniz. Örneğin, bir kotayı belirli bir geliştiriciye bağlamak için geliştirici e-posta adresini kullanabilirsiniz. İster özel değişkenler ister API anahtarını doğrulama politikası ile kullanılabilenler gibi önceden tanımlanmış değişkenler kullanıyor olun, bir kotayı tanımlamak için çeşitli değişkenlerden yararlanabilirsiniz. Değişken referansı bölümünü de inceleyin.

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 <Identifier> en sık kullanılan yöntem client_id'dir. client_id, bir uygulama Apigee Edge'deki bir kuruluşa kaydedildiğinde oluşturulan API anahtarının veya tüketici anahtarının diğer adıdır. API'niz için API anahtarı veya OAuth yetkilendirme politikalarını etkinleştirdiyseniz bu tanımlayıcıyı kullanabilirsiniz.

Bazı durumlarda, güvenlik politikası olmadığı gibi client_id bulunmadığı durumlarda kota ayarlarının alınması gerekir. Bu gibi durumlarda, uygun API ürün ayarlarını almak için Access Entity politikasını kullanabilir, ardından ExtractVariables ile değerleri çıkarabilir ve son olarak çıkarılan bağlam değişkenini kota politikasında kullanabilirsiniz. Daha fazla bilgi için Erişim öğesi politikası başlıklı makaleyi inceleyin.

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ü rollingwindow olduğunda, kota aralığının süresi asla dolmadığı için bu değer geçerli değildir.

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.
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.
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).
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.
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.
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.
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.
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.
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.
InvalidSynchronizeIntervalForAsyncConfiguration <SyncIntervalInSeconds> öğesi için Kota politikasındaki <AsynchronousConfiguration> öğesi sıfırdan küçükse dağıtımı başarısız olur.
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.

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

ResetQuota politikası

SpikeArrest politikası

Kota, ani artışları önleme ve eşzamanlı hız sınırı politikalarını karşılaştırma