Kota politikası

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Ne

Bir API proxy'sinin dakika, saat, gün, hafta veya ay gibi bir süre boyunca izin verdiği istek mesajı sayısını yapılandırmak için Kota politikasını kullanın. Kotayı, API proxy'sine erişen tüm uygulamalar için aynı olacak şekilde veya şu ölçütlere göre ayarlayabilirsiniz:

  • API proxy'sini içeren ürün
  • API isteyen uygulama
  • Uygulama geliştirici
  • Diğer birçok kriter

Genel trafik artışlarına karşı korumak için Kota'yı 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)

Giriş (Klasik Edge)

Dinamik Kota

Dağıtılmış ve Eşzamanlı

Mesaj Ağırlığı

Takvim

Kayan Pencere

Esnek

Koşullu Kota

Akış Değişkenleri

Hata İşleme

Örnekler

Bu politika kodu örnekleri, kota dönemlerinin aşağıdaki kriterlere göre nasıl başlatılıp sonlandırılacağını gösterir:

Daha 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ı uygulayan tek bir Kota politikası yapılandırabilmenizi sağlar. Bu bağlamda Kota ayarları için diğer bir terim de "Hizmet Planı"dır. Dinamik kota, uygulamaların "Hizmet Planı"nı kontrol eder ve ardından bu ayarları uygular.

Not: Bir öğe için hem değer hem de başvuru belirtirseniz önceliği referans alır. Referans çalışma zamanında çözümlenemezse değer kullanılır.

Örneğin, bir API ürünü oluştururken isteğe bağlı olarak izin verilen kota sınırını, zaman birimini ve aralığı ayarlayabilirsiniz. Ancak bu değerlerin API ürününde ayarlanması, ilgili değerlerin API proxy'sinde kullanılmasını zorunlu kılmaz. Ayrıca API proxy'sine, bu değerleri okuyan bir Kota politikası eklemeniz gerekir. Daha fazla bilgi için API ürünleri oluşturma bölümüne bakın.

Yukarıdaki örnekte, Kota politikasını içeren API proxy'si, istekte geçirilen API anahtarını doğrulamak için verify-api-key adlı bir VerificationAPIKey politikası kullanır. Daha sonra Kota politikası, API ürününde ayarlanan kota değerlerini okumak için VerificationAPIKey politikasındaki akış değişkenlerine erişir. VerificationAPIKey akış değişkenleri hakkında daha fazla bilgi için API Anahtarı politikasını doğrulama konusuna bakın.

Diğer bir seçenek de bireysel geliştiriciler veya uygulamalarda özel özellikler belirleyip bu değerleri Kota politikasında okumaktır. Örneğin, geliştirici başına farklı kota değerleri belirlemek isteyebilirsiniz. Bu durumda, geliştiricide sınır, zaman birimi ve aralığı içeren özel özellikler ayarlarsınız. Daha sonra Kota politikasında aşağıda gösterildiği gibi bu değerlere 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 ValidAPIKey akış değişkenleri de kullanılmaktadır.

Kota politikasının parametrelerini ayarlamak için herhangi bir değişkeni kullanabilirsiniz. Bu değişkenler şunlardan gelebilir:

  • Akış değişkenleri
  • API ürünü, uygulaması veya geliştiricisindeki mülkler
  • Anahtar/değer eşlemesi (KVM)
  • Başlık, sorgu parametresi, form parametresi vb.

Her API proxy'si için diğer tüm kota politikalarındaki diğer tüm Kota politikalarıyla aynı değişkene referans veren bir Kota politikası ekleyebilirsiniz. Kota politikası da bu politika ve proxy için benzersiz 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. Saat değeri yerel saat değil, GMT saatidir. calendar türündeki bir politika için <StartTime> değeri sağlamazsanız Edge bir hata verir.

Her uygulamanın Kota sayacı <StartTime>, <Interval> ve <TimeUnit> değerlerine göre yenilenir. Bu örnekte, Kota 18 Şubat 2017 saat 10:30'da (GMT) saymaya başlar ve 5 saatte bir yenilenir. Bu nedenle, bir sonraki yenileme 18 Şubat 2017, 15:30'da (GMT) olacaktır.

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şlem gerçekleştirmek, kota sınırına yaklaştığında politikayı izlemek, geçerli kota sayacını bir uygulamaya döndürmek veya başka nedenlerle API proxy'sinde bu akış değişkenlerine erişebilirsiniz.

Politikanın akış değişkenlerine erişim, politikaların name özelliğini temel aldığından, yukarıdaki QuotaPolicy adlı politika için akış değişkenlerine şu şekilde erişirsiniz:

  • ratelimit.QuotaPolicy.allowed.count: İzin verilen sayı.
  • ratelimit.QuotaPolicy.used.count: Mevcut sayaç değeri.
  • ratelimit.QuotaPolicy.expiry.time: UTC saatiyle sayacın sıfırlandığı saat.

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 başlıkları olarak döndürmek için aşağıdaki AttributionMessage 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>

Saat başına 10.000 çağrılık bir kota uygulamak için bu örnek kodu kullanın. Politika, her saatin üst kısmındaki kota sayacını sıfırlar. Sayaç 10.000 çağrı kotasına saat bitmeden ulaşırsa 10.000'in üzerindeki çağrılar reddedilir.

Örneğin, sayaç 2017-07-08 07:00:00 saatinde başlarsa 2017-07-08 08:00:00 tarihinde (başlangıç zamanından 1 saat sonra) 0'a sıfırlanır. İlk mesaj 2017-07-08 07:35:28 saatinde alınırsa ve mesaj sayısı 2017-07-08 08:00:00 tarihinden önce 10.000'e ulaşırsa bu sayıyı aşan aramalar, saatin sonunda sayı sıfırlanana kadar reddedilir.

Sayaç sıfırlama süresi, <Interval> ve <TimeUnit> kombinasyonuna bağlıdır. Örneğin, <Interval> değerini <TimeUnit> saatlik süre için 12 olarak ayarlarsanız 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'nizde birden fazla yerde başvurabilirsiniz. Ö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 da yerleştirebilirsiniz. Bu politikayı proxy'de birden fazla yerde kullanırsanız politikanın tüm örnekleri tarafından güncellenen tek bir sayaç bulunur.

Alternatif olarak, API proxy'nizde birden fazla Kota politikası tanımlayabilirsiniz. Her Kota politikası, politikanın name özelliğine bağlı olarak kendi sayacını tutar.

Tanımlayıcı ayarla

<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 Kota politikası, isteğin kaynağından bağımsız olarak 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 <Identifier> özelliğini kullanabilirsiniz.

Örneğin, <Identifier> etiketini her istemci kimliği için ayrı sayaçlar tanımlamak üzere kullanın. Ardından, proxy'nize gönderilen bir istekte istemci uygulaması, yukarıdaki örnekte gösterildiği gibi clientID öğesini içeren bir başlık iletir.

<Identifier> özelliği için herhangi bir akış değişkenini 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 ValidAPIKey politikasını veya OAuth jetonları içeren OAuthV2 politikalarını kullanıyorsanız aynı Kota politikası için ayrı sayaçlar tanımlamak amacıyla API anahtarı ya da jetondaki bilgileri kullanabilirsiniz. Örneğin, aşağıdaki <Identifier> etiketi, verify-api-key adlı bir VerificationAPIKey politikasının client_id akış değişkenini kullanır:

<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>

Artık her benzersiz client_id değeri 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ıf tabanlı bir kota sayısı kullanarak kota sınırlarını dinamik olarak ayarlayabilirsiniz. Bu örnekte, kota sınırı her istekte geçirilen developer_segment üst bilgisinin değeriyle belirlenir. Bu değişken, platinum veya silver değerine sahip olabilir. Başlık geçersiz bir değere sahipse politika, kota ihlali hatası döndürür.


Kota politikası hakkında

Kota, bir API proxy'sinin dakika, saat, gün, hafta veya ay gibi belirli bir dönem boyunca işleyebileceği istek mesajı servis birimidir. Politika, API proxy'si tarafından alınan istek sayısını hesaplayan sayaçlar sağlar. Bu özellik, API sağlayıcıların belirli bir zaman aralığı boyunca uygulamalar tarafından yapılan API çağrısı sayısına yönelik sınırları zorunlu kılmasını sağlar. Kota politikalarını kullanarak uygulamaları dakikada 1 istek veya ayda 10.000 istekle sınırlandırabilirsiniz.

Örneğin, bir Kota ayda 10.000 mesaj olarak tanımlanırsa hız sınırlaması 10.000. mesajdan sonra başlar. Bu dönemin ilk gününde veya son gününde 10.000 mesajın sayılması önemli değildir. Kota sayacı, belirtilen zaman aralığının sonunda otomatik olarak sıfırlanana veya Kotayı Sıfırla politikası kullanılarak Kota açıkça sıfırlanana kadar ek istek alanına izin verilmez.

SpikeArrest adı verilen bir kota varyasyonu kullanımdaki ani artıştan, hatalı istemcilerden veya kötü amaçlı saldırılardan kaynaklanabilecek trafik artışlarını (veya patlamalarını) önler. SpikeArrest hakkında daha fazla bilgi için Spike Arrest politikasını inceleyin.

Kotalar, bağımsız 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ı kullanıyor olsa bile üçü de tek bir kota paylaşılmaz.

Kota politikası türleri

Kota politikası birkaç farklı politika türünü destekler: varsayılan, calendar, flexi ve rollingwindow. Aşağıdaki tabloda gösterildiği gibi her tür, kota sayacının ne zaman başladığını ve ne zaman sıfırlandığını tanımlar:

Zaman Birimi Varsayılan (veya boş) sıfırlama takvim sıfırlandı flexi sıfırlama
dakika Sonraki dakika başlangıcı <StartTime> itibarıyla bir dakika sonra İlk istekten bir dakika sonra
saat Sonraki bir saatin başı <StartTime> itibarıyla bir saat sonra İlk istekten bir saat sonra
gün Geçerli günün gece yarısı GMT'si 24 saat sonra (<StartTime>) İlk istekten 24 saat sonra
hafta Gece yarısı GMT Pazar hafta sonunda Bir hafta (<StartTime> itibarıyla) İlk istekten bir hafta sonra
ay Ayın son gününün gece yarısı (GMT) <StartTime> tarihinden sonra bir ay (28 gün) İlk istekten bir ay (28 gün) sonra

type="calendar" için <StartTime> değerini belirtmeniz gerekir.

Tablo, rollingwindow türünün değerini listelemez. Periyodik pencere kotaları, bir saatlik veya bir günlük pencere gibi bir kota "penceresi"nin boyutunu ayarlayarak çalışır. Yeni bir istek geldiğinde politika, geçmiş zaman aralığı içinde kotanın aşılıp aşılmadığını belirler.

Örneğin, 1.000 isteğe izin veren iki saatlik bir aralık tanımlayabilirsiniz. 16:45'te yeni bir istek gelir.Politika, son iki saatlik zaman aralığı için kota sayısını, yani 14:45'ten bu yana gerçekleşen isteklerin sayısını hesaplar. Bu iki saatlik süre içinde kota sınırı aşılmazsa isteğe izin verilir.

Bir dakika sonra saat 16:46'da başka bir istek daha gelir. Politika artık 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 referansta bulunduğunuzdan bağımsız olarak tek bir sayaç tutar. Kota sayacının adı, politikanın name özelliğine bağlıdır.

Örneğin, 5 istekle sınırlı olan MyQuotaPolicy adlı bir Kota politikası oluşturuyor ve bu politikayı API proxy'sinde birden fazla akışa (Akış A, B ve C) yerleştiriyorsunuz. Birden fazla akışta kullanılmasına rağmen, politikanın tüm örnekleri tarafından güncellenen tek bir sayaç sağlar:

  • A akışı yürütüldü -> MyQuotaPolicy yürütüldü ve sayacı = 1
  • B akışı yürütüldü -> MyQuotaPolicy yürütüldü ve sayacı = 2
  • A akışı yürütüldü -> MyQuotaPolicy yürütüldü ve sayacı = 3
  • C akışı yürütüldü -> MyQuotaPolicy yürütüldü ve sayacı = 4
  • A akışı yürütüldü -> MyQuotaPolicy yürütüldü ve sayacı = 5

Üç akıştan herhangi birine yapılan sonraki istek, kota sayacı sınırına ulaştığı için reddedilir.

Bir API proxy akışında aynı Kota politikasını birden fazla yerde kullanmak, kotanın beklediğinizden daha hızlı tükenmesine neden olabilir. Bu durum, Apigee Edge Antipatterns Kitabı'nda açıklanan bir kalıp karşıtlığıdır.

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 bağlı olarak kendi sayacını kullanır.

Alternatif olarak, tek bir politikada birden çok benzersiz sayaç tanımlamak için Kota politikasındaki <Class> veya <Identifier> öğelerini kullanabilirsiniz. Bu öğeler kullanılarak tek bir politika, istekte bulunan uygulamaya, istekte bulunan uygulama geliştiricisine, istemci kimliğine veya başka bir istemci tanımlayıcısına ve daha fazlasına göre farklı sayaçlar sağlayabilir. <Class> veya <Identifier> öğelerini kullanma hakkında daha fazla bilgi için yukarıdaki örneklere bakın.

Zaman gösterimi

Tüm Kota süreleri, Eşgüdümlü Evrensel Zaman (UTC) saat dilimine ayarlanır.

Kota süresi gösterimi, Uluslararası Standard ISO 8601'de tanımlanan uluslararası standart tarih gösterimine uyar.

Tarihler şu biçimde yıl, ay ve gün olarak tanımlanır: YYYY-MM-DD. Örneğin, 2015-02-04 4 Şubat 2015'i temsil eder.

Günün saati, şu 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ı temsil eder.

Bir tarihle ilişkilendirilebilecek iki gece yarısını ayırt etmek için iki gösterimin (00:00:00 ve 24:00:00) bulunduğunu unutmayın. Bu nedenle 2015-02-04 24:00:00, 2015-02-05 00:00:00 ile aynı tarih ve saattir. İkincisi genellikle tercih edilen nottur.

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, bir kota politikasındaki ürün kota ayarlarına başvurabilirsiniz. Kota politikaları için üründe kota belirlemenin sağladığı bazı avantajlar şunlardır:

  • Kota politikaları, API ürünündeki tüm API proxy'lerinde tek tip bir ayar kullanabilir.
  • Bir API ürünündeki kota ayarında çalışma zamanında değişiklik yapabilirsiniz ve değere başvuran kota politikaları otomatik olarak güncellenmiş kota değerlerine sahip olur.

Bir API ürününden kota ayarlarını kullanma hakkında daha fazla bilgi edinmek için yukarıdaki "Dinamik Kota" örneğine bakın..

API ürünlerini kota sınırlarıyla yapılandırma hakkında bilgi edinmek 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 karşılıklı olarak birbirini dışladığını veya gerekli olmadığını unutmayın. Özel kullanım örneklerine bakın. İstekte 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, API ürün yapılandırmasından kota ayarlarını alma bölümünde açıklandığı şekilde anahtarın ilişkilendirildiği API ürünündeki kota ayarlarından alını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 ettiğini belirlemek için kullanın. Daha fazla bilgi için Kota politikası türleri bölümüne bakın.

Bir type değerini çıkarırsanız sayaç, dakika/saat/gün/hafta/ay başında başlar.

Geçerli değerler şunları içerir:

  • 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 saatine (ör. 17:01) bakar, önceki gün (1 gün) saat 17:01 arasında gelen istek sayısını sayar ve bu zaman aralığında kotanın aşılıp aşılmadığını belirler.
  • flexi: Bir uygulamadan ilk istek mesajı alındığında sayacın başlatılmasını ve <Interval>, ve <TimeUnit> değerlerine göre sıfırlanmasını sağlayan 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çerebilir. Bu değer 255 karakterden uzun olamaz.

İsteğe bağlı olarak, politikayı yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketlemek için <DisplayName> öğesini kullanın.

Yok Gerekli
continueOnError

Bir politika başarısız olduğunda hata döndürülmesi için false olarak ayarlayın. Bu, çoğu politika için beklenen davranıştır.

Bir politika başarısız olduktan sonra bile akış yürütülmesinin devam etmesi için true değerine ayarlayın.

false İsteğe bağlı
enabled

Politikayı uygulamak için true değerine ayarlayın.

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

true İsteğe bağlı
async

Bu özellik kullanımdan kaldırıldı.

false Kullanımdan kaldırıldı

<DisplayName> öğesi

Politikayı, yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketlemek için name özelliğine ek olarak kullanın.

<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

Kota için 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 belirtirseniz öncelik countRef olur. countRef çalışma zamanında çözümlenemezse count değeri kullanılır.

Varsayılan: Yok
Bulunma: İsteğe bağlı
Tür: Tamsayı

Özellikler

Özellik Açıklama Varsayılan Varlık
adet

Kota için bir ileti sayısı belirtmek amacıyla kullanın.

Örneğin, count özellik değeri 100, Interval değeri 1 ve aylık TimeUnit değeri, ayda 100 mesajlık kota belirtir.

2.000 İsteğe bağlı
countRef

Bir kotanın ileti sayısını içeren bir akış değişkeni belirtmek için kullanın. 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ızı sağlar. Politika, <Class> öğesinin her farklı <Allow> alt etiketi için farklı bir sayaç tutar.

<Class> öğesini kullanmak için <Class> etiketinde ref özelliğini kullanarak bir akış değişkeni belirtin. Edge daha sonra politikanın izin verilen sayısını belirlemek amacıyla <Allow> alt etiketlerinden birini seçmek için akış değişkeninin değerini kullanır. Edge, akış değişkeninin değerini, aşağıda 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, geçerli kota sayacı her istekte geçirilen time_variable sorgu parametresinin değeriyle belirlenir. Bu değişken, peak_time veya off_peak_time değerine sahip olabilir. Sorgu parametresi geçersiz bir değer içeriyorsa politika kota ihlali hatası döndürür.

Varsayılan: Yok
Bulunma: İsteğe bağlı
Tür: Yok

Özellikler

Özellik Açıklama Varsayılan Varlık
referans

Bir kotanın kota sınıfını içeren bir akış değişkeni belirtmek için kullanın.

yok Gerekli

<Allow>/<Class>/<Allow> öğesi

<Allow> öğesi, <Class> öğesi tarafından tanımlanan kota sayacı için belirlenen sınırı belirtir. Politika, <Class> öğesinin her bir <Allow> alt etiketi için farklı bir sayaç kullanır.

Ö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ı kullanır.

Varsayılan: Yok
Bulunma: İ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 Gerekli
adet Sayaç için kota sınırını belirtir. yok Gerekli

<Interval> öğesi

Edge'in kota kullanımını hesapladığı dönemi belirlemek için belirttiğiniz TimeUnit ile eşlenecek bir tam sayı (örneğin, 1, 2, 5, 60 vb.) belirtmek için kullanın.

Örneğin, TimeUnit değeri hour olan 24 Interval değeri, kotanın 24 saatlik bir süre içinde hesaplanacağı anlamına gelir.

<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
Varsayılan: yok
Bulunma: Gerekli
Tür: Tamsayı

Özellikler

Özellik Açıklama Varsayılan Varlık
referans

Bir kotanın aralığını içeren akış değişkeni belirtmek için kullanın. ref, açık bir aralık değerine göre önceliklidir. Hem başvuru hem de değer belirtilirse başvuru önceliği alır. ref çalışma zamanında çözümlenemezse değer kullanılır.

yok İsteğe bağlı

<TimeUnit> öğesi

Kota için geçerli olan zaman birimini belirtmek üzere kullanın.

Örneğin, TimeUnit değeri hour olan 24 Interval değeri, kotanın 24 saatlik bir süre içinde hesaplanacağı anlamına gelir.

<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
Varsayılan: yok
Bulunma: Gerekli
Tür:

Dize. minute, hour, day, week veya month arasından seçim yapın.

Özellikler

Özellik Açıklama Varsayılan Varlık
referans Bir kotanın zaman birimini içeren bir akış değişkeni belirtmek için kullanın. ref, açık aralık değerine göre önceliklidir. ref, çalışma zamanında çözümlenemezse değer kullanılır. yok İsteğe bağlı

<StartTime> öğesi

type, calendar, değerine ayarlandığında herhangi bir uygulamadan istek alınıp alınmadığından bağımsız olarak, kota sayacın saymaya başlayacağı tarihi ve saati belirtir.

type açıkça calendar, olarak ayarlandığında açık bir StartTime sağlamanız gerekir. Akış değişkenine başvuru kullanamazsınız. type değeri ayarlanmadığında StartTime değeri belirtirseniz bir hata alırsınız.

Örneğin:

<StartTime>2017-7-16 12:00:00</StartTime>
Varsayılan: yok
Bulunma: type, calendar olarak ayarlandığında zorunludur.
Tür:

ISO 8601 tarih ve saat biçimindeki dize.

<Dağıtılmış> öğe

Edge kurulumunda, istekleri işlemek için bir veya daha fazla Mesaj İşleyici kullanılabilir. Politikanın merkezi bir sayaç sağlaması ve tüm Mesaj İşleyicileri genelinde sürekli olarak senkronize etmesi gerektiğini belirtmek için bu öğeyi true olarak ayarlayın. Mesaj işlemcileri, farklı kullanılabilirlik alt bölgeleri ve/veya bölgeler olabilir.

Varsayılan false değerini kullanıyorsanız her bir Mesaj İşleyicinin sayısı paylaşılmadığından kotanızı aşabilirsiniz:

<Distributed>true</Distributed>

Sayaçların senkronize edilmesini ve her istekte güncellenmesini sağlamak için <Distributed> ve <Synchronous> değerlerini true olarak ayarlayın:

<Distributed>true</Distributed>
<Synchronous>true</Synchronous>
Varsayılan: false
Bulunma: İsteğe bağlı
Tür: Boole

<Synchronous> öğesi

Dağıtılmış bir 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 edilirken yapıldığı anlamına gelir. Kotayı aşan API çağrılarına izin vermemeniz şartsa bu değeri true olarak ayarlayın.

Kota sayacını eşzamansız olarak güncellemek için false olarak ayarlayın. Yani merkezi depodaki kota sayacının eşzamansız olarak güncellendiği zamana bağlı olarak, kotayı aşan bazı API çağrılarının sonuçlanması mümkündür. Ancak eşzamanlı güncellemelerle ilgili 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: false
Bulunma: İsteğe bağlı
Tür: Boole

<AsyncConfiguration> öğesi

<Synchronous> politika yapılandırma öğesi mevcut olmadığında veya mevcut olduğunda ve false değerine ayarlandığında 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 veya mesaj sayısından sonra senkronize edebilirsiniz. Birbirini dışlar. Örneğin,

<AsynchronousConfiguration>
   <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
</AsynchronousConfiguration>

veya

<AsynchronousConfiguration>
   <SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>
Varsayılan: SyncIntervalInSeconds = 10 saniye
Bulunma: İsteğe bağlı; <Synchronous>, true olarak ayarlandığında yoksayılır.
Tür:

Yerleşke

<AsyncConfiguration>/<SyncIntervalInSeconds> öğesi

eşzamansız güncellemelerin 10 saniyelik bir aradan sonra gerçekleştirildiği varsayılan davranışı geçersiz kılmak için bunu kullanın.

<AsynchronousConfiguration>
   <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
</AsynchronousConfiguration>

Senkronizasyon aralığı, Sınırlar konusunda açıklandığı gibi en az 10 saniye olmalıdır.

Varsayılan: 10
Bulunma: İsteğe bağlı
Tür:

Tamsayı

<AeşzamansızConfiguration>/<SyncMessageCount> öğesi

Tüm Apigee mesaj işlemcilerinde kota güncellemeleri arasındaki istek sayısını belirtir.

<AsynchronousConfiguration>
   <SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>

Bu örnek, her Apigee Edge mesaj işlemcisinde kota sayısının her 5 istekte bir güncellendiğini belirtir.

Varsayılan: Yok
Bulunma: İ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şkeni tarafından tanımlanan özellikler için benzersiz sayaçlar oluşturabilirsiniz. Örneğin, kotayı belirli bir geliştiriciye bağlamak için geliştirici e-posta adresini kullanabilirsiniz. Kota tanımlamak için API Anahtarını Doğrulama politikasında sunulanlar gibi özelleştirilebilen değişkenler veya önceden tanımlanmış değişkenler kullanıyor olabilirsiniz. Değişkenler referansı bölümüne de göz atın.

Bu öğeyi kullanmazsanız politika, kotaya uygulanan tek bir sayaç kullanır.

Bu unsur, şu Apigee Topluluğu gönderisinde de ele alınmıştır: http://community.become.com/questions/2807/how-does-the-edge-QUOTA-policy-work-when-no-identi.html.

<Identifier ref="verifyapikey.verify-api-key.client_id"/>
Varsayılan: Yok
Bulunma: İsteğe bağlı
Tür:

Dize

Özellikler

Özellik Açıklama Varsayılan Varlık
referans

İstek için kullanılacak sayacı tanımlayan bir akış değişkenini belirtir. Tanımlayıcı; her uygulama, uygulama kullanıcısı, uygulama geliştirici, API ürünü veya diğer özellikler için benzersiz bir HTTP üst bilgisi, sorgu parametresi, form parametresi veya mesaj içeriği olabilir.

Uygulamaları benzersiz şekilde tanımlamak için en yaygın olarak kullanılan <Identifier>, client_id öğesidir. client_id, API anahtarının veya tüketici anahtarının diğer adıdır ve Apigee Edge'deki bir kuruluşta kayıtlı uygulamalar için oluşturulur. Bu tanımlayıcıyı, API'niz için API anahtarını veya OAuth yetkilendirme politikalarını etkinleştirdiyseniz kullanabilirsiniz.

Bazı durumlarda (ör. güvenlik politikasının geçerli olmadığı) client_id kullanılamadığında Kota ayarları alınmalıdır. Bu tür durumlarda, uygun API ürün ayarlarını almak için Erişim Varlık Politikası'nı kullanabilir, ardından Değişkenleri kullanarak değerleri ayıklayabilir ve daha sonra Kota politikasında ayıklanan bağlam değişkenini kullanabilirsiniz. Daha fazla bilgi için Access Entity politikasını inceleyin.

Yok İsteğe bağlı

<Messageweight> öğesi

Her mesaja atanan ağırlığı belirtmek için kullanın. Örneğin, diğerlerinden daha fazla 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ı GET mesajlarına kıyasla iki kat "ağır" veya pahalı olarak saymak istersiniz. Dolayısıyla, MessageWeight değerini POST için 2 ve GET için 1 olarak ayarlarsınız. Dilerseniz isteğin sayacı etkilememesi için MessageWeight değerini 0 olarak da ayarlayabilirsiniz. Bu örnekte, kota dakikada 10 mesaj ve POST istekleri için MessageWeight değeri 2 ise kota, herhangi bir 10 dakikalık aralıkta 5 POST isteğine izin verir. Sayaç sıfırlama işlemleri reddedilmeden önceki tüm ek istekler (POST veya GET).

MessageWeight değerini temsil eden değer bir akış değişkeniyle belirtilmelidir ve HTTP üst bilgilerinden, sorgu parametrelerinden, XML veya JSON istek yükünden ya da diğer herhangi bir akış değişkeninden çıkarılabilir. Örneğin, bunu weight adlı bir üstbilgide ayarlarsınız:

<MessageWeight ref="message_weight"/>
Varsayılan: Yok
Bulunma: İ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ığı içinde kullanılan geçerli 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

Kotanın süresinin dolacağı ve yeni kota aralığının başladığı zamanı belirleyen UTC zamanını milisaniye cinsinden döndürür.

Kota politikası türü rollingwindow olduğunda, kota aralığı hiçbir zaman sona ermediğinden bu değer geçerli olmaz.

ratelimit.{policy_name}.identifier Dize Salt Okunur Politikaya ekli (istemci) tanımlayıcı referansını döndürür
ratelimit.{policy_name}.class Dize Salt Okunur İstemci 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ıf içinde 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ıftaki sınırı aşan isteklerin 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. Böylece tüm kota aralıkları için class.exceed.count toplamıdır.
ratelimit.{policy_name}.failed Boole Salt Okunur

Politikanın başarısız olup olmadığını belirtir (doğru veya yanlış).

Hata referansı

Bu bölümde, bu politika bir hatayı tetiklediğinde Edge tarafından ayarlanan hata kodları ile hata mesajları ve döndürülen hata mesajları ile Edge tarafından ayarlanan hata değişkenleri açıklanmaktadır. Bu bilgiyi, hataları ele almak için hata kuralları geliştirip geliştirmediğinizi bilmeniz önemlidir. Daha fazla bilgi için Politika hataları hakkında bilmeniz gerekenler ve Hataları işleme bölümlerine bakın.

Çalışma zamanı hataları

Politika yürütüldüğünde bu hatalar ortaya çıkabilir.

Hata kodu HTTP durumu Neden Düzelt
policies.ratelimit.FailedToResolveQuotaIntervalReference 500 <Interval> öğesi Kota politikası kapsamında tanımlanmazsa meydana gelir. Bu öğe zorunludur ve kota için geçerli olan zaman aralığını belirtmek için kullanılır. Zaman aralığı, <TimeUnit> öğesiyle tanımlandığı gibi dakika, saat, gün, hafta veya ay olabilir.
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference 500 <TimeUnit> öğesi Kota politikası kapsamında tanımlanmazsa meydana gelir. Bu öğe zorunludur ve kota için geçerli olan zaman birimini belirtmek için kullanılır. Zaman aralığı dakika, saat, gün, hafta veya ay cinsinden olabilir.
policies.ratelimit.InvalidMessageWeight 500 Bir akış değişkeni aracılığıyla belirtilen <MessageWeight> öğesinin değeri geçersizse (tam sayı olmayan bir değer) ortaya çıkar.
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ığı tam sayı değilse API proxy'sinin dağıtımı başarısız olur. Örneğin, <Interval> öğesinde belirtilen kota aralığı 0, 1 ise API proxy'sinin dağıtımı başarısız olur.
InvalidQuotaTimeUnit <TimeUnit> öğesinde belirtilen zaman birimi desteklenmiyorsa API proxy'sinin dağıtımı başarısız olur. Desteklenen zaman birimleri şunlardır: minute, hour, day, week ve month.
InvalidQuotaType <Quota> öğesindeki type özelliği tarafından belirtilen kota türü geçersizse API proxy'sinin dağıtımı başarısız olur. 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, ISO 8601 tarih ve saat biçimi olan yyyy-MM-dd HH:mm:ss şeklindedir. Örneğin, <StartTime> öğesinde belirtilen zaman 7-16-2017 12:00:00 ise API proxy'sinin dağıtımı başarısız olur.
StartTimeNotSupported Kota türü calendar türünde olmayan <StartTime> öğesi belirtilirse API proxy'sinin dağıtımı başarısız olur. <StartTime> öğesi yalnızca calendar kota türü için desteklenir. Örneğin, <Quota> öğesinde type özelliği flexi veya rolling window olarak ayarlanırsa API proxy'sinin dağıtımı başarısız olur.
InvalidTimeUnitForDistributedQuota <Distributed> öğesi true, <TimeUnit> öğesi ise second değerine ayarlanırsa API proxy'sinin dağıtımı başarısız olur. second zaman birimi dağıtılmış kota için geçersiz.
InvalidSynchronizeIntervalForAsyncConfiguration Kota politikasındaki <AsynchronousConfiguration> öğesi içinde yer alan <SyncIntervalInSeconds> öğesi için belirtilen değer sıfırdan küçükse API proxy'sinin dağıtımı başarısız olur.
InvalidAsynchronizeConfigurationForSynchronousQuota Aynı zamanda <AsynchronousConfiguration> öğesi kullanılarak tanımlanmış eşzamansız yapılandırmaya sahip bir Kota politikasında <AsynchronousConfiguration> öğesinin değeri true olarak ayarlanırsa API proxy'sinin dağıtımı başarısız olur.

Hata değişkenleri

Bu değişkenler, bu politika bir hatayı tetiklediğinde ayarlanır. Daha fazla bilgi için Politika hataları hakkında bilmeniz gerekenler bölümüne bakın.

Değişkenler Konum Örnek
fault.name="fault_name" fault_name, yukarıdaki Çalışma zamanı hataları tablosunda listelenen 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"
   }
}

Hata kuralı örneği

<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

Sıfırla Kota politikası

SpikeArrest politikası

Kota, Artış Arrest ve Eşzamanlı Hız Sınırı Politikalarının Karşılaştırması