Script politikası ile istek veya yanıt mesajlarındaki başlık (header), parametre (parameter), gövde (body) ve hata mesajı (error message) içerikleri seçilen script dili ile işlenebilir.

Politika ayarlarını içeren görsele aşağıda yer verilmiştir:


Politika konfigürasyonu için kullanılan alanlar aşağıdaki tabloda görülmektedir.

AlanAçıklama

Açıklama

(Description)

Politikanın kullanımını ve yönetimini kolaylaştırmak için açıklama yazılabilir.

Execution Tipi 

(Execution Type)

Çalıştırılacak olan Script'in Senkron yada Asenkron olarak çalışması belirlenebilir.

Script Dili

(Script Language)

Yazılacak olan Script'in tipidir. Javascript veya Groovy olabilir.

Script Gövdesi

(Script Body)

Çalıştırılacak olan Script kodu yazılır.

Mesajın bölgelerine göre verilen değişkenlere ait linklere tıklayarak gövde alanına eklenebilir.

Dene

(Try it)

Çalıştırılacak olan scriptin denemesinin yapılabilmesi için yeni bir pencere açılmasını sağlar.

Script Politikasının Çalışması Hakkında

Gelen istek mesajın orijinal hali ile dönen yanıt mesajının orijinal hali üzerinde değişiklik yapılamaz, bu veriler üzerinde sadece okuma yapılabilir.

Backend API'ye gönderilecek olan istek ile istemciye dönecek yanıt üzerinde ise hem okuma hem de değişiklik yapılabilir.

Yapılacak olan okuma ve değişiklik işlemleri mesajın başlık, parametre ve gövde kısımlarını içerir. Bu alanlara script üzerinde erişim için çeşitli anahtar kelimeler kullanılmıştır. Bu anahtar kelimeler erişilmek istenen bölgeye göre değişmektedir.

Anahtar kelimeleri formülüze etmek istersek aşağıdaki şekilde ifade edebiliriz:

  • Başlıklara erişmek için → <request|response>HeaderMap<From|To><Client|TargetAPI>
  • URL parametrelerine erişmek için → <request>UrlParamMap<From|To><Client|TargetAPI>
  • Form URL Encoded parametrelerine erişmek için → <request>FormUrlEncodedList<From|To><Client|TargetAPI>
  • Form Data parametrelerine erişmek için → <request>FormDataList<From|To><Client|TargetAPI>
  • Gövdeye erişmek için → <request|response>BodyText<From|To><Client|TargetAPI>
  • Politikayı sonlandırıp özelleştirilmiş hata mesajı döndürmek için → <request|response>ErrorMessage<From|To><Client|TargetAPI> gösterimini kullanmanız gerekir.
  • Durum kodunu değiştirmek için→statusCode<From|To><Client|TargetAPI>

Bu anahtar kelimeler dışında kullanılan anahtar kelimeler:

  • requestUrlFromClient: Mesajın geldiği URL path'ini tutar
  • requestBackendUrlToTargetAPI: Eğer isteği gideceği Backend URL kapsam yolu(context path) değiştirilmek istenirse bu değişken ayarlanabilir.
  • customVariableMap: İş mantığına özel olarak değişken oluşturulabilir, bu değişkenlere istek ve yanıt hattında okuma ve yazma işlemi yapılabilir. İş kuralı politikasında da map'e eklenen anahtar kelime üzerinden değerinin kullanılması sağlanabilir.
  • contextValues: Apinizer'ın her bir istek için isteğe özel tuttuğu verileri okumak için bu değerlerden faydalanabilir. Bu değerler üzerinde sadece okuma yapılabilir.

Örneğin;

  • İstemciden gelen istek Apinizer'a ulaştığında yani isteğin orijinal halinin gövde içeriğine erişmek isteniyorsa requestBodyTextFromClient değişkenini,
  • Apinizer gelen isteği Backend API'ye iletirkenki halinin başlıklarına erişmek isteniyorsa requestHeaderMapToTargetAPI değişkenini,
  • Backend API'den yanıt Apinizer'a iletildiğindeki halinin başlıklarına erişmek isteniyorsa responseHeaderMapFromTargetAPI değişkenini,
  • Apinizer'ın istemciye döndürdüğü yanıtın gövdesine erişmek için responseBodyTextToClient değişkenini kullanabilirsiniz.

Akış Değişkenleri

Akış DeğişkenleriHatSahip Olduğu Değerin YeriVeri Tipiİzin Verilen İşlemAçıklamaÖrnek Kullanım
requestHeaderMapFromClientİstekClient → ApinizerMap<String, String>Okumaİstemciden gelen istek Apinizer'a ulaştığı andaki orijinal halinin başlık(header) değerlerine erişmek için kullanılır.String value= requestHeaderMapFromClient.get("Content-Type");
requestUrlParamMapFromClientİstekClient → ApinizerMap<String, String>Okumaİstemciden gelen istek Apinizer'a ulaştığı andaki orijinal halinin sorgu(query) parametre değerlerine erişmek için kullanılır.String value= requestUrlParamMapFromClient.get("param");
requestBodyTextFromClientİstekClient → ApinizerStringOkumaİstemciden gelen istek Apinizer'a ulaştığı andaki orijinal halinin gövde değerine erişmek için kullanılır.String value= requestBodyTextFromClient;

requestFormUrlEncodedListFromClient

İstekClient → Apinizer

List<BasicNameValuePair>

Okumaİstemciden gelen istek Apinizer'a ulaştığı andaki orijinal halinin "Form-URL-Encoded" parametrelerine erişmek için kullanılır.

import org.apache.http.message.BasicNameValuePair

String selectedValue;
for (BasicNameValuePair nameValuePair : requestFormUrlEncodedListFromClient) {
   if("test".equals(nameValuePair.getName())){
       selectedValue=nameValuePair.getValue();
   }

}

requestFormDataListFromClient

İstekClient → ApinizerList<ApinizerRequestBodyPart>Okumaİstemciden gelen istek Apinizer'a ulaştığı andaki orijinal halinin "Form-Data" parametrelerine erişmek için kullanılır.

import com.apinizer.common.global.apinizerrequest.*;

for (ApinizerRequestBodyPart bodyPart : requestFormDataListFromClient) {
    if(bodyPart.getBodyPartType().isText()){
        ApinizerRequestTextBody textBodyPart = ((ApinizerRequestTextBody)bodyPart));
        String text=textBodyPart.getText();
        //do some logic
    }else{//bodyPart.getBodyPartType().isBinary()
        ApinizerRequestBinaryBody binaryBodyPart = ((ApinizerRequestBinaryBody)bodyPart));
        byte[] byteArr=binaryBodyPart.getContent();
        String fileName=binaryBodyPart.getFileName();
        //do some logic
    }
}

requestHeaderMapToTargetAPIİstekApinizer → Backend APIMap<String, String>Okuma, YazmaApinizer'dan Backend API'ye giden isteğin başlık(header) değerlerine erişmek için kullanılır. Bu alandaki değerler istek hattındaki yapılan değişikleri içerir ve değerleri Apinizer'e gelen orijinal istekten farklılaşabilir.

String value= requestHeaderMapToTargetAPI.get("Content-Type");

requestHeaderMapToTargetAPI.put("Content-Type","application/json");

requestUrlParamMapToTargetAPIİstekApinizer → Backend APIMap<String, String>Okuma, YazmaApinizer'dan Backend API'ye giden isteğin sorgu(query) parametresindeki değerlerine erişmek için kullanılır. Bu alandaki değerler istek hattındaki yapılan değişikleri içerir ve değerleri Apinizer'e gelen orijinal istekten farklılaşabilir.

String value= requestUrlParamMapToTargetAPI.get("param");

requestHeaderMapToTargetAPI.put("param","value");

requestBodyTextToTargetAPIİstekApinizer → Backend APIStringOkuma, YazmaApinizer'dan Backend API'ye giden isteğin gövde değerine erişmek için kullanılır. Bu alandaki değer istek hattındaki yapılan değişikleri içerir ve değeri Apinizer'e gelen orijinal istekten farklılaşabilir.

String value= requestBodyTextToTargetAPI;

requestBodyTextToTargetAPI= "<body>";

requestFormUrlEncodedListToTargetAPI

İstekApinizer → Backend API

List<BasicNameValuePair>

Okuma, YazmaApinizer'dan Backend API'ye giden isteğin "Form-Url Encoded" parametrelerindeki değerlerine erişmek için kullanılır. Bu alandaki değerler istek hattındaki yapılan değişikleri içerir ve değerleri Apinizer'e gelen orijinal istekten farklılaşabilir.

import org.apache.http.message.BasicNameValuePair

String selectedValue;
for (BasicNameValuePair nameValuePair : requestFormUrlEncodedListToTargetAPI) {
   if("test".equals(nameValuePair.getName())){
       selectedValue=nameValuePair.getValue();
   }

}

requestFormDataListToTargetAPI

İstekApinizer → Backend APList<ApinizerRequestBodyPart>Okuma, YazmaApinizer'dan Backend API'ye giden isteğin "Form-Data" parametrelerindeki değerlerine erişmek için kullanılır. Bu alandaki değerler istek hattındaki yapılan değişikleri içerir ve değerleri Apinizer'e gelen orijinal istekten farklılaşabilir.

import com.apinizer.common.global.apinizerrequest.*;

for (ApinizerRequestBodyPart bodyPart : requestFormDataListToTargetAPI) {
    if(bodyPart.getBodyPartType().isText()){
        ApinizerRequestTextBody textBodyPart = ((ApinizerRequestTextBody)bodyPart));
        String text=textBodyPart.getText();
        //do some logic
    }else{//bodyPart.getBodyPartType().isBinary()
        ApinizerRequestBinaryBody binaryBodyPart = ((ApinizerRequestBinaryBody)bodyPart));
        byte[] byteArr=binaryBodyPart.getContent();
        String fileName=binaryBodyPart.getFileName();
        //do some logic
    }
}

requestErrorMessageToTargetAPIİstekApinizer → Backend APIStringYazmaİstek hattında akış kesilerek istemciye mesaj dönülmek isteniyorsa, dönülecek olan mesaj bu değişkene girilir. Script'in işletilmesi sonucu bu mesajın dolu olması halinde akış kesilerek istemciye bu değer döndürülür. requestErrorMessageToTargetAPI= "<body>";
statusCodeToTargetAPIİstekApinizer → Backend APIIntegerYazmaİstek hattında akış kesilerek istemciye mesaj dönülmek isteniyorsa, dönülecek olan durum kodu bu değişkene girilir. Tek başına bu değerin girilmesi akışın durdurulması için yeterli değildir, akışın durdurulması için requestErrorMessageToTargetAPI değerinin dolu olması gerekir.statusCodeToTargetAPI=500;
requestBackendUrlToTargetAPIİstekApinizer → Backend APIStringYazmaBackend API URL'sinin bağlam yolu değiştirilmek istenirse bu alan kullanılabilir. Bu değişkenin varsayılan değeri boştur ve bu değişkene bir değer ayarlanırsa hedef bağlam yolu bu değerle değiştirilir.

Mevcut routing adresi: "https://apinizer.com/api" olsun,

Gelen istek kapsam yolu: "/findByStatus?param=value" olsun.

Bu durumda istek şu adrese gider:

  • "https://apinizer.com/api/findByStatus?param=value"

Aşağıdaki kod yazıldığında: 

  • requestBackendUrlToTargetAPI="/new/path/value?p=v";

İstek şu adrese gider:

  • "https://apinizer.com/api/new/path/value?p=v"


responseHeaderMapFromTargetAPIYanıtBackend API → ApinizerMap<String, String>OkumaBackend API'den dönen sonuç Apinizer'a ulaştığı andaki orijinal halinin başlık(header) değerlerine erişmek için kullanılır.String value= responseHeaderMapFromTargetAPI.get("Content-Type");
responseBodyTextFromTargetAPIYanıtBackend API → ApinizerStringOkumaBackend API'den dönen sonuç Apinizer'a ulaştığı andaki orijinal halinin gövde değerine erişmek için kullanılır.String value= responseBodyTextFromTargetAPI;
statusCodeFromTargetAPIYanıtBackend API → ApinizerIntegerOkumaBackend API'den dönen sonuç Apinizer'a ulaştığı andaki orijinal halinin durum kodu değerine erişmek için kullanılır.

int value=statusCodeFromTargetAPI;

responseHeaderMapToClientYanıtApinizer → ClientMap<String, String>Okuma, YazmaApinizer'dan İstemciye dönen yanıtın başlık(header) değerlerine erişmek için kullanılır. Bu alandaki değerler yanıt hattındaki yapılan değişikleri içerir ve değerleri Apinizer'e dönen orijinal yanıttan farklılaşabilir.

String value= responseHeaderMapToClient.get("Content-Type");

responseHeaderMapToClient.put("Content-Type","application/json");

responseBodyTextToClientYanıtApinizer → ClientStringOkuma, YazmaApinizer'dan İstemciye dönen yanıtın gövde değerine erişmek için kullanılır. Bu alandaki değer yanıt hattındaki yapılan değişikleri içerir ve değeri Apinizer'e dönen orijinal yanıttan farklılaşabilir.

String value= responseBodyTextToClient;

responseBodyTextToClient= "<body>";

responseErrorMessageToClientYanıtApinizer → ClientStringOkuma, YazmaYanıt hattında akış kesilerek istemciye mesaj dönülmek isteniyorsa, dönülecek olan mesaj bu değişkene girilir. Script'in işletilmesi sonucu bu mesajın dolu olması halinde akış kesilerek istemciye bu değer döndürülür. responseErrorMessageToClient= "<body>";
statusCodeToClientYanıtApinizer → ClientIntegerOkuma, YazmaYanıt hattında akış kesilerek istemciye mesaj dönülmek isteniyorsa, dönülecek olan durum kodu bu değişkene girilir. Tek başına bu değerin girilmesi akışın durdurulması için yeterli değildir, akışın durdurulması için responseErrorMessageToClient değerinin dolu olması gerekir.

int value=statusCodeToClient;

statusCodeToClient=401;

Script tipi Groovy ise;

kullanılması, mesaj işleme işlemini oldukça kolaylaştırır.

Hata mesajı değişkenleri ile istek bloke olduğunda istemciye, hata mesajı olarak Hata Yanıt Şablonu (Error Message Template) yerine bu değişkenin değerine ne yazıldıysa o dönmektedir.

Mesaj Değişkenleri

Akış DeğişkenleriSahip Olduğu Değerin YeriVeri Tipiİzin Verilen İşlemAçıklamaÖrnek Kullanım

İstek Hattı Değişkenleri

request_remoteAddress

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Remote Address" değerine erişmek için kullanılır.

String value= request_remoteAddress;

request_remoteAddress= "<new value>";

request_httpMethod

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "HTTP Method" değerine erişmek için kullanılır.

String value= request_httpMethod;

request_httpMethod= "<new value>";

request_contentType

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Content Type" değerine erişmek için kullanılır.

String value= request_contentType;

request_contentType= "<new value>";

request_pathInfo

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Path Info" değerine erişmek için kullanılır.

String value=request_pathInfo ;

request_pathInfo= "<new value>";

request_contextPath

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Context Path" değerine erişmek için kullanılır.

String value= request_contextPath;

request_contextPath= "<new value>";

request_queryString

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Query String" değerine erişmek için kullanılır.

String value= request_queryString;

request_queryString= "<new value>";

request_remoteUser

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Remote User" değerine erişmek için kullanılır.

String value= request_remoteUser;

request_remoteUser= "<new value>";

request_usernameOrKey

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Username veya API Key" değerine erişmek için kullanılır.

Bu değer Apinizer üzerindeki bir güvenlik politikası ile doğrulanmış ise Apinizer tarafından bu değer atanır, veya veri manipülasyon politikaları ile de manuel olarak değer atanabilir.

String value= request_usernameOrKey;

request_usernameOrKey= "<new value>";

request_requestedSessionId

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Requested Session Id" değerine erişmek için kullanılır.

String value= request_requestedSessionId;

request_requestedSessionId= "<new value>";

request_requestURI

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Request URI" değerine erişmek için kullanılır.

String value= request_requestURI;

request_requestURI= "<new value>";

request_characterEncoding

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Character Encoding" değerine erişmek için kullanılır.

String value= request_characterEncoding;

request_characterEncoding= "<new value>";

request_charset

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Charset" değerine erişmek için kullanılır.

String value= request_charset;

request_charset= "<new value>";

request_contentLength

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Content Length" değerine erişmek için kullanılır.

String value= request_contentLength;

request_contentLength= "<new value>";

request_protocol

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Protocol" değerine erişmek için kullanılır.

String value= request_protocol;

request_protocol= "<new value>";

request_scheme

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Scheme" değerine erişmek için kullanılır.

String value= request_scheme;

request_scheme= "<new value>";

request_serverName

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Server Name" değerine erişmek için kullanılır.

String value= request_serverName;

request_serverName= "<new value>";

request_serverPort

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Server Port" değerine erişmek için kullanılır.

String value= request_serverPort;

request_serverPort= "<new value>";

request_remoteHost

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Remote Host" değerine erişmek için kullanılır.

String value= request_remoteHost;

request_remoteHost = "<new value>";

request_remotePort

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Remote Port" değerine erişmek için kullanılır.

String value= request_remotePort;

request_remotePort= "<new value>";

request_localName

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Local Name" değerine erişmek için kullanılır.

String value= request_localName;

request_localName= "<new value>";

request_localAddr

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Local Address" değerine erişmek için kullanılır.

String value= request_localAddr;

request_localAddr= "<new value>";

request_localPort

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "Local Port" değerine erişmek için kullanılır.

String value= request_localPort;

request_localPort= "<new value>";

request_xForwardedFor

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istekteki "X-Forwarded-For" değerine erişmek için kullanılır.

String value= request_xForwardedFor;

request_xForwardedFor= "<new value>";

request_isSoapToRest

Client → Apinizer

boolean

Okuma

İstemciden gelen istek Apinizer'da yorumlandıktan sonra isteğin SoapToRest dönüşümü yapılan bir API Proxy'e gelip gelmediği bilgisidir. Bu değişkenin değeri "true" ya da "false" olabilir.

boolean value= request_isSoapToRest;

request_isSoapToRest= true/false;

request_isApiProxy

Client → Apinizer

boolean

Okuma

İstemciden gelen istek Apinizer'da yorumlandıktan sonra isteğin API Proxy'e gelip gelmediği bilgisidir. Bu değişkenin değeri "true" ya da "false" olabilir.

boolean value= request_isApiProxy;

request_isApiProxy = true/false;

request_isApiProxyGroup

Client → Apinizer

boolean

Okuma

İstemciden gelen istek Apinizer'da yorumlandıktan sonra isteğin API Proxy Group'a gelip gelmediği bilgisidir. Bu değişkenin değeri "true" ya da "false" olabilir.

boolean value= request_isApiProxyGroup;

request_isApiProxyGroup= true/false;

request_data_isXwwwFormUrlEncoded

Client → Apinizer

boolean

Okuma, Yazma

İstemciden gelen istek Apinizer'da yorumlandıktan sonra isteğin application/x-www-form-urlencoded başlığı içerip içermediği bilgisidir. Bu değişkenin değeri "true" ya da "false" olabilir.

boolean value= request_data_isXwwwFormUrlEncoded;

request_data_isXwwwFormUrlEncoded= true/false;

request_data_isFormData

Client → Apinizer

boolean

Okuma, Yazma

İstemciden gelen istek Apinizer'da yorumlandıktan sonra isteğin "form data" verisi içerip içermediği bilgisidir. Bu değişkenin değeri "true" ya da "false" olabilir.

boolean value= request_data_isFormData;

request_data_isFormData= true/false;

request_data_isByteArray

Client → Apinizer

boolean

Okuma, Yazma

İstemciden gelen istek Apinizer'da yorumlandıktan sonra isteğin "byte array" verisi içerip içermediği bilgisidir. Bu değişkenin değeri "true" ya da "false" olabilir.

boolean value= request_data_isByteArray;

request_data_isByteArray= true/false;

request_data_hasAttachment

Client → Apinizer

boolean

Okuma

İstemciden gelen istek Apinizer'da yorumlandıktan sonra isteğin "attachment" verisi içerip içermediği bilgisidir. Bu değişkenin değeri "true" ya da "false" olabilir.

boolean value=request_data_hasAttachment ;

request_data_hasAttachment = true/false;

request_encoding_gzip

Client → Apinizer

boolean

Okuma, Yazma

İstemciden gelen istek Apinizer'da yorumlandıktan sonra isteğin veri formatının "gzip" olup olmadığı bilgisidir. Bu değişkenin değeri "true" ya da "false" olabilir.

boolean value= request_encoding_gzip;

request_encoding_gzip= true/false;

request_encoding_deflate

Client → Apinizer

boolean

Okuma, Yazma

İstemciden gelen istek Apinizer'da yorumlandıktan sonra isteğin veri formatının "deflate" olup olmadığı bilgisidir. Bu değişkenin değeri "true" ya da "false" olabilir.

boolean value= request_encoding_deflate;

request_encoding_deflate= true/false;

Yanıt Hattı Değişkenleri

response_data_isByteArray

Backend API → Apinizer

boolean

Okuma, Yazma

Backend API'den dönen yanıt Apinizer'da yorumlandıktan sonra yanıtın "byte array" verisi içerip içermediği bilgisidir. Bu değişkenin değeri "true" ya da "false" olabilir.

boolean value= response_data_isByteArray;

response_data_isByteArray= true/false;

response_encoding_gzip

Backend API → Apinizer

boolean

Okuma, Yazma

Backend API'den dönen yanıt Apinizer'da yorumlandıktan sonra yanıtın veri formatının "gzip" olup olmadığının bilgisidir. Bu değişkenin değeri "true" ya da "false" olabilir. Eğer değeri false ise ve script içinde true olarak ayarlanırsa istemciye dönen veri gzip yapılarak dönülür.

boolean value= response_encoding_gzip;

response_encoding_gzip= true/false;

response_encoding_deflate

Backend API → Apinizer

boolean

Okuma, Yazma

Backend API'den dönen yanıt Apinizer'da yorumlandıktan sonra yanıtın veri formatının "deflate" olup olmadığının bilgisidir. Bu değişkenin değeri "true" ya da "false" olabilir. Eğer değeri false ise ve script içinde true olarak ayarlanırsa istemciye dönen veri deflate yapılarak dönülür.

boolean value= response_encoding_deflate;

response_encoding_deflate= true/false;

response_encoding_br

Backend API → Apinizer

boolean

Okuma, Yazma

Backend API'den dönen yanıt Apinizer'da yorumlandıktan sonra yanıtın veri formatının "br" olup olmadığının bilgisidir. Bu değişkenin değeri "true" ya da "false" olabilir. Eğer değeri false ise ve script içinde true olarak ayarlanırsa istemciye dönen veri br yapılarak dönülür.

boolean value= response_encoding_br;

response_encoding_br= true/false;

response_statusCode

Backend API → Apinizer

Integer

Okuma, Yazma

Backend API'den dönen yanıtın durum kodu değerini içerir.

Integer value= response_statusCode;

response_statusCode= 400;

Mesaj Değişkenleri

message_correlationId

Client → Apinizer

String

Okuma, Yazma

İstemciden gelen istek Apinizer'a düştüğü anda Apinizer tarafından isteği benzersiz bir ID verilir ve bu ID yanıta da eklenir. Bu değişken ile bu benzersiz ID değerine erişilebilir.

String value= message_correlationId;

message_correlationId= "<new value>";

environment_id

Client → Apinizer

String

Okuma

API Trafiğin karşılandığı ve cevaplandığı Ortamın ID bilgisidir.

String value= environment_id;

environment_name

Client → Apinizer

String

Okuma

API Trafiğin karşılandığı ve cevaplandığı Ortamın İsim bilgisidir.

String value= environment_name;

Ortam Değişkenleri

apiProxyGroup_id

Client → Apinizer

String

Okuma

İstemciden gelen istek API Proxy Grup tarafından karşılanmış ise karşılanan API Proxy Grup'un ID bilgisine erişmek için kullanılır.

String value= apiProxyGroup_id;

apiProxyGroup_name

Client → Apinizer

String

Okuma

İstemciden gelen istek API Proxy Grup tarafından karşılanmış ise karşılanan API Proxy Grup'un isim bilgisine erişmek için kullanılır.

String value= apiProxyGroup_name;

apiProxy_id

Client → Apinizer

String

Okuma

İstemciden gelen istek API Proxy tarafından karşılanmış ise karşılanan API Proxy'nin ID bilgisine erişmek için kullanılır.

String value= apiProxy_id;

apiProxy_name

Client → Apinizer

String

Okuma

İstemciden gelen istek API Proxy tarafından karşılanmış ise karşılanan API Proxy'nin isim bilgisine erişmek için kullanılır.

String value= apiProxy_name;

apiMethod_id

Client → Apinizer

String

Okuma

İstemciden gelen istek API Proxy Metodu tarafından karşılanmış ise karşılanan API Proxy Metodunun ID bilgisine erişmek için kullanılır.

String value= apiMethod_id;

apiMethod_name

Client → Apinizer

String

Okuma

İstemciden gelen istek API Proxy Metodu tarafından karşılanmış ise karşılanan API Proxy Metodunun isim bilgisine erişmek için kullanılır.

String value= apiMethod_name;

apiMethod_soapAction

Client → Apinizer

String

Okuma

İstemciden gelen istek API Proxy Metodu tarafından karşılanmış ise karşılanan API Proxy Metodunun "Soap Action" değerine erişmek için kullanılır. SOAP tipi API Proxylerde geçerlidir.

String value= apiMethod_soapAction;

apiMethod_httpMethod

Client → Apinizer

String

Okuma

İstemciden gelen istek API Proxy Endpoint'i tarafından karşılanmış ise karşılanan API Proxy Endpoint'in "Http Metod" değerine erişmek için kullanılır.

String value= apiMethod_httpMethod;

apiMethod_endpoint

Client → Apinizer

String

Okuma

İstemciden gelen istek API Proxy Endpoint'i tarafından karşılanmış ise karşılanan API Proxy Endpoint'in değerine erişmek için kullanılır.

String value= apiMethod_endpoint;

apiMethod_backend_httpMethod

Client → Apinizer

String

Okuma

İstemciden gelen istek API Proxy Endpoint'i tarafından karşılanmış ise karşılanan API Proxy Endpoint'in Backend API'de hangi "Http Metod" değerine gideceğini tutan değere erişmek için kullanılır.

String value= apiMethod_backend_httpMethod;

apiMethod_backend_endpoint

Client → Apinizer

String

Okuma

İstemciden gelen istek API Proxy Endpoint'i tarafından karşılanmış ise karşılanan API Proxy Endpoint'in Backend API'de hangi "Endpoint" değerine gideceğini tutan değere erişmek için kullanılır.

String value= apiMethod_backend_endpoint;

dateTime_year

Çalışma Zamanı

Integer

Okuma

Çalışma zamanındaki yıl bilgisine erişmek için kullanılır.

Integer value= dateTime_year;

dateTime_month

Çalışma Zamanı

Integer

Okuma

Çalışma zamanındaki ay bilgisine erişmek için kullanılır.

Integer value= dateTime_month;

dateTime_dayOfWeek

Çalışma Zamanı

Integer

Okuma

Çalışma zamanındaki haftanın gün bilgisine erişmek için kullanılır. 1 (Pazartesi) ve 7 (Pazar) arasında değer alır.

Integer value= dateTime_dayOfWeek;

dateTime_dayOfMonth

Çalışma Zamanı

Integer

Okuma

Çalışma zamanındaki ayın gün bilgisine erişmek için kullanılır. 1 ve 31 arasında değer alır.

Integer value= dateTime_dayOfMonth;

dateTime_hour

Çalışma Zamanı

Integer

Okuma

Çalışma zamanındaki günün saat bilgisine erişmek için kullanılır. 0 ve 23 arasında değer alır. 

Integer value= dateTime_hour;

dateTime_minute

Çalışma Zamanı

Integer

Okuma

Çalışma zamanındaki UTC zamanındaki saatin dakika bilgisine erişmek için kullanılır. 0 ve 59 arasında değer alır.

Integer value= dateTime_minute;

dateTime_second

Çalışma Zamanı

Integer

Okuma

Çalışma zamanındaki UTC zamanındaki dakikanın saniye bilgisine erişmek için kullanılır. 0 ve 59 arasında değer alır.

Integer value= dateTime_second;

dateTime_epochMillis

Çalışma Zamanı

Long

Okuma

Çalışma zamanındaki UTC zamanındaki epoch milisaniye bilgisine erişmek için kullanılır. 1970-01-01T00:00:00Z tarihinden erişim anına kadar olan milisaniye bilgisine erişilir.

Long value= dateTime_epochMillis;

dateTime_formattedText

Çalışma Zamanı

String

Okuma

Çalışma zamanındaki UTC zamanındaki tarih zaman bilgisine "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" formatında  erişmek için kullanılır.

String value= dateTime_formattedText;

date_formattedText

Çalışma Zamanı

String

Okuma

Çalışma zamanındaki UTC zamanındaki tarih bilgisine "yyyy-MM-dd" formatında  erişmek için kullanılır.

String value= date_formattedText;

time_formattedText

Çalışma Zamanı

String

Okuma

Çalışma zamanındaki UTC zamanındaki zaman bilgisine "HH:mm:ss" formatında  erişmek için kullanılır.

String value= time_formattedText;

environment_certificateMap

Çalışma Zamanı

Map<String, X509Certificate>

Okuma

Çalışma zamanında ortama yüklü olan "X509Certificate" değerlerine erişmek için kullanılır. Erişim için varlığın adı kullanılır.

import java.security.cert.X509Certificate;

X509Certificate obj= environment_certificateMap.get("obj-name");

environment_privateKeyMap

Çalışma Zamanı

Map<String, java.security.PrivateKey>

Okuma

Çalışma zamanında ortama yüklü olan "Private Key" değerlerine erişmek için kullanılır.

import java.security.PrivateKey;

PrivateKey obj= environment_privateKeyMap.get("obj-name");

environment_publicKeyMap

Çalışma Zamanı

Map<String, java.security.PublicKey>

Okuma

Çalışma zamanında ortama yüklü olan "Public Key" değerlerine erişmek için kullanılır.

import java.security.PublicKey;

PublicKey obj= environment_publicKeyMap.get("obj-name");

environment_secretKeyMap

Çalışma Zamanı

Map<String, javax.crypto.spec.SecretKeySpec>

Okuma

Çalışma zamanında ortama yüklü olan "Secret Key" değerlerine erişmek için kullanılır.

import javax.crypto.spec.SecretKeySpec;

SecretKeySpec obj= environment_secretKeyMap.get("obj-name");

environment_keyStoreMap

Çalışma Zamanı

Map<String, java.security.KeyStore>

Okuma

Çalışma zamanında ortama yüklü olan "Keystore" değerlerine erişmek için kullanılır.

import java.security.KeyStore

KeyStore obj= environment_keyStoreMap.get("obj-name");

environment_jwkMap

Çalışma Zamanı

Map<String, com.apinizer.common.apigw.jwk.Jwk>

Okuma

Çalışma zamanında ortama yüklü olan "JWK" değerlerine erişmek için kullanılır.

import com.apinizer.common.apigw.jwk.Jwk

Jwk obj= environment_jwkMap.get("obj-name");

Credential Değişkenleri 

credential_username

Çalışma Zamanı

String

Okuma

Politikadan önce ayarlanmış olan credential'ın "kullanıcı adı" bilgisine erişmek için kullanılır. Eğer credential yoksa veya ayarlanmamış ise değeri null olur.

String value= credential_username;

credential_email

Çalışma Zamanı

String

Okuma

Politikadan önce ayarlanmış olan credential'ın "email" bilgisine erişmek için kullanılır. Eğer credential yoksa veya ayarlanmamış ise değeri null olur.

String value= credential_email;

credential_fullName

Çalışma Zamanı

String

Okuma

Politikadan önceayarlanmış olan credential'ın "tam adı" bilgisine erişmek için kullanılır. Eğer credential yoksa veya ayarlanmamış ise değeri null olur.

String value= credential_fullName;

credential_secretKey

Çalışma Zamanı

javax.crypto.

SecretKey

OkumaPolitikadan önce ayarlanmış olan credential'ın "Secret Key" bilgisine erişmek için kullanılır. Eğer credential yoksa veya ayarlanmamış ise değeri null olur.javax.crypto.SecretKey value=credential_secretKey;
credential_certificateÇalışma Zamanı

java.security.cert.

X509Certificate

OkumaPolitikadan önce ayarlanmış olan credential'ın "Certificate" bilgisine erişmek için kullanılır. Eğer credential yoksa veya ayarlanmamış ise değeri null olur.java.security.cert.X509Certificate value=credential_certificate;
credential_publicKeyÇalışma Zamanı

java.security.

PublicKey

OkumaPolitikadan önce ayarlanmış olan credential'ın "Public Key" bilgisine erişmek için kullanılır. Eğer credential yoksa veya ayarlanmamış ise değeri null olur.java.security.PublicKey value=credential_publicKey;
credential_privateKeyÇalışma Zamanı

java.security.

PrivateKey

OkumaPolitikadan önce ayarlanmış olan credential'ın "Private Key" bilgisine erişmek için kullanılır. Eğer credential yoksa veya ayarlanmamış ise değeri null olur.java.security.PrivateKey value=credential_privateKey;
credential_keyStoreÇalışma Zamanı

java.security.

KeyStore

OkumaPolitikadan önce ayarlanmış olan credential'ın "Keystore" bilgisine erişmek için kullanılır. Eğer credential yoksa veya ayarlanmamış ise değeri null olur.java.security.KeyStore value=credential_keyStore;
credential_trustStoreÇalışma Zamanı

java.security.

KeyStore

OkumaPolitikadan önce ayarlanmış olan credential'ın "Truststore" bilgisine erişmek için kullanılır. Eğer credential yoksa veya ayarlanmamış ise değeri null olur.java.security.KeyStore value=credential_trustStore;
credential_jwkForValidationAndSignÇalışma Zamanı

com.apinizer.

common.apigw.

jwk.Jwk

OkumaPolitikadan önce ayarlanmış olan credential'ın "imzalama ve imza doğrulama için kullanılan JWK" bilgisine erişmek için kullanılır. Eğer credential yoksa veya ayarlanmamış ise değeri null olur.com.apinizer.common.apigw.jwk.Jwk value=credential_jwkForValidationAndSign;
credential_jwkForDecryptionAndEncryptionÇalışma Zamanı

com.apinizer.

common.apigw.

jwk.Jwk

Okuma

Politikadan önce ayarlanmış olan credential'ın "şifreleme ve şifre çözme için kullanılan JWK" bilgisine erişmek için kullanılır. Eğer credential yoksa veya ayarlanmamış ise değeri null olur.

com.apinizer.common.apigw.jwk.Jwk value=credential_jwkForDecryptionAndEncryption;


Özel Değişkenler

Akış DeğişkenleriVeri Tipiİzin Verilen İşlemAçıklama

customVariableMap

Map<String, String>Okuma, Yazma

İstek veya Yanıt hattında politikalar ile geçici olarak değişken tanımlanması yapmak ve bir sonraki politikada kullanmak ihtiyacı ortaya çıkabilir. Bu durumda  "customVariableMap" değişkeni kullanılır.

Örneğin; Bir API Proxy'nin script politikasından önceki politikasında iş kuralı politikası ile oluşturulan "testVariable" ismindeki değişkene script politikasında erişmek ve değerini değiştirmek gerekebilir. Bu durumda  customVariableMap.get("testVariable") diyerek bu değişkene atanan değer okunmuş olur. Benzer şekilde script politikasında özel değişken oluşturmak için customVariableMap.put("testVariable","test value") şeklinde kullanım yapılması gerekir. Böylece bir sonraki politikada custom variable tipinde ve "testVariable" adında bir değişken oluşturularak script politikasında eklenen değere erişilebilir.

İstek Hattına eklenen Script Politikası Yanıt Hattındaki değişkenlere erişemez.

Yanıt Hattına eklenen Script Politikası ise İstek Hattındaki değişkenleri sadece okuyabilir. 

Başlık ya da Parametre'nin değerinin çoğul olma durumu

Başlık ve Parametre bilgilerine değer atarken, bazı durumlarda aynı anahtara ait çoklu değer olabilmektedir.

Bu durum script politikasında aşağıdaki şekilde ele alınır. 

Apinizer Script politikasındaki backward compatibility kısıtlamasından dolayı, bu anahtar değeri çoğul ise okuma işlemi yapılırken # ile ayrıştırılabilir. Eğer tekil ise, normal string olarak işlem yapılmalıdır.


Bu veri tipi üzerinde okuma ve yazma işlemleri için aşağıdaki isteğin yapıldığını varsayalım.

Başlık'ın çoklu olması

// reading from header map
String headerVal = requestHeaderMapToTargetAPI.get("multipleHeaderTest");
String[] headerArr = headerVal.split("#");

for (String val:headerArr) {
	// do some stuff with multiple values of "multipleHeaderTest""
}

headerVal = requestHeaderMapToTargetAPI.get("oneHeaderTest");
// do some stuff with single value of "oneHeaderTest"

// adding a new header "value" to existing one 
headerVal = headerVal + "#newHeaderScriptVal";
requestHeaderMapToTargetAPI.put("multipleHeaderTest", headerVal);
CODE

Parametrenin çoklu olması

// reading from param map
String paramVal = requestUrlParamMapToTargetAPI.get("multipleParamTest[]");
String[] paramArr = paramVal.split("#");

for (String val : paramArr) {
  	// do some stuff with multiple values of "multipleParamTest""
}

paramVal = requestUrlParamMapToTargetAPI.get("oneParamTest");
// do some stuff with single value of "oneParamTest"

// adding a new param "value" to existing one 
paramVal = requestUrlParamMapToTargetAPI.get("multipleParamTest[]") + "#newParamScriptVal";
requestUrlParamMapToTargetAPI.put("multipleParamTest[]", paramVal);
CODE


Script'in Test Edilmesi

Konfigürasyon alanının altındaki Dene (Try it) butonu ile yazılan Script test edilebilir.

Script Test ayarlarını içeren dialoga ait görsele aşağıda yer verilmiştir:

Sonuç (Result) bölümünde yalnızca Target alanındaki değişiklikler gösterilir.


Koşullar ve Hata Mesajı Özelleştirme panellerinin açıklamasını görüntülemek için Politikalar (Policies) sayfasını ziyaret edebilirsiniz.