4. bölümde örnek API olarak kullandığım Demo Conference API ‘ı Azure API Management ‘a (APIM) tanımlayıp bir de Product tanımı yapmıştım. Bu bölümde de bu API üzerinde farklı policy tanımları yaparak kod tarafında maliyetli olan işlemlerin APIM üzerinden nasıl hızlı ve kolay bir şekilde yapabileceğimizi göstermek istiyorum.
Öncelikle Postman kullanarak APIM ‘e bir request göndermek istiyorum. Resim-1‘de göreceğiniz gibi, request url olarak APIM üzerinde tanımladığım Demo Conference API adresini ve Header’a da Ocp-Apim-Subscription-Key değerini giriyorum. Bu key’e APIM üzerindeki Test ekranından ulaşabilirsiniz. GetSessions metodunu başarıyla çağırdım.
Resim-1
Şimdi APIM üzerinden Policy’ler ekleyerek bazı kısıtlamalar yapalım. Inbound processing‘e Limit call rate policy ekleyerek belirli bir süre içerisinde belirtilen sayıdan fazla istek gelmesi durumunda gelen istekleri engellemesini istiyorum. Burada 5 saniye içerisinde 2’den fazla istek gelmesi halinde bu istekleri kabul etmeyeceğim. Counter key ile bunu subscription, IP adresi ya da custom (context.Request ya da request.Headers gibi objeleri kullanarak kontroller ekleyerek) bazlı olarak yapabilirsiniz.
Resim-2
Değişiklikleri kaydettikten sonra Inbound processing altında rate-limit-by-key adında bir policy eklendiğini görebilirsiniz. Şimdi Postman üzerinden bir deneme yapmak ve gerçekten işe yaramış mı görmek istiyorum. Arka arkaya 3 kez istek gönderdiğimde 429 status kodu ile “Rate limit is exceeded. Try again in 3 seconds.” mesajını dönüyor. Herhangi bir kod yazmadan hızlıca rate limit eklemiş oldum.
Resim-3
Şimdi de gelen istekteki header’a bir kontrol eklemek istiyorum. Bu kez code editör üzerinden Resim-4‘te göreceğiniz gibi check-header policy ekliyorum, burada whois adında bir header ve değeri de mert değilse geriye 401 hata kodunu dönecek şekilde bir tanımlama yaptım.
Resim-4
Herhangi bir header değeri eklemen aynı isteği gönderdiğimde Resim-5‘te göreceğiniz gibi policy’de belirtiğim gibi hata kodu ve mesajını aldım.
Resim-5
Bu kez bir üst katmana yani All Operations‘a set-header policy tanımlayarak, GetSessions methodunda kontrol ettiğim whois header’ını ve mert değerini tanımlıyorum.
Resim-6
Bu şekilde Postman üzerinden herhangi bir header eklemeden çağırdığımda ise başarılı bir şekilde response değerini alabiliyorum. Nedeni ise XML’de göreceğiniz <base />, yani bir üst katmana ait policy’ler. Burada sıralamaya göre policy’leri çalıştırdığı için hangi sırada çalışmasını istiyorsanız o sırada yazmanız gerekiyor. Eğer GetSessions için <base /> tag’ini check-header altına taşırsanız yine 401 almaya başlayacaksınız.
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar
https://docs.microsoft.com/en-gb/azure/api-management/
https://conferenceapi.azurewebsites.net/?format=json
TAGs: Azure, Azure Portal, Yazılım Geliştiriciler için Azure, API, API Management, API, Application Programming Interface, Policy, Product, Subscription, Subscriber, Demo Conference API, Rate Limit, HTTP Header, Postman