> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apinizer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Oluşturulan Mock API Üzerinden JSON Transformation ve Script Poliçesinin Uygulanması

> Apinizer üzerinde Mock API oluşturma, JSON Transformation ve Script poliçelerini uygulama, API Proxy oluşturma ve test etme adımlarını içeren detaylı senaryo rehberi.

Bu senaryoda Apinizer üzerinde oluşturulan Mock API'ye **JSON Transformation** ve **Script** poliçesinin uygulanması test edilecektir.

Aşağıdaki grafikte yer alan numaralandırmalar işlemlerin **yapılış sırasına aittir.**

* **API Client**, **Apinizer'a istekte** bulunur.
* **Apinizer**, **Cars Mock API**'ye istekte bulunur.
* **Cars Mock API**'den dönen yanıt içerisinde yer alan **tip, yıl, fiyat** **key'leri** **JSON Transformation poliçesi** uygulanarak **type, year, price key** ifadelerine dönüştürülür ve Apinizer'a iletilir.
* **Script poliçesinin** çalışması ise **opsiyoneldir.** Çünkü bu poliçe **API Client'dan** gelen **istek içerisinde** herhangi bir **Order By parametresi** varsa çalışmaktadır.
* **Apinizer'dan API Client'a yanıt** verilir.

<img src="https://mintcdn.com/apinizer/s1G0_sxxeD_lU0Dx/images/tutorials/mock-api-json-transformation-scenario.png?fit=max&auto=format&n=s1G0_sxxeD_lU0Dx&q=85&s=5d359488f0b69d9bd5cf564baf553390" alt="Senaryo Akışı" width="1000" data-path="images/tutorials/mock-api-json-transformation-scenario.png" />

## Mock API'nin Oluşturulması

İlk olarak istekte bulunulacak **Mock API'nin** tasarımı gerçekleştirilir.

Bunun için **Development** menüsü altında yer alan **API Creator** menüsünde bulunan **Mock API** seçeneği seçilir.

<img src="https://mintcdn.com/apinizer/s1G0_sxxeD_lU0Dx/images/tutorials/mock-api-menu.png?fit=max&auto=format&n=s1G0_sxxeD_lU0Dx&q=85&s=d1073dc90d78ffc146b7999434e294cb" alt="Mock API Menüsü" width="200" data-path="images/tutorials/mock-api-menu.png" />

Daha önceden herhangi bir **Mock API** oluşturulmadığı için **No records found** ifadesi sayfada yer almaktadır.

Sağ üst köşede yer alan **Create** butonuna tıklanır ve **Mock API** oluşturmaya başlanır.

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/create-mock-api.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=e588788cf522ec9f25bce3324fb6d9e0" alt="Create Mock API" width="1000" data-path="images/tutorials/create-mock-api.png" />

Bu ekran üzerinde yer alan ifadeler tek tek incelenecek olursa,

* İki farklı şekilde **Mock API** oluşturma seçeneği yer almaktadır.
* **Blank** ifadesi seçili olduğunda **Name** ve **Description** ifadeleri yer almaktadır.
* **Name** alanı ile API'nin ismi belirlenir.
* **Description** ifadesi ile de bu API'ye ait açıklamalar yazılabilir.
* **Generate Crud Operations** ifadesi ile de oluşturulacak Mock API içerisinde **GET**, **POST**, **DELETE**, **PUT** operasyonlarının hazır bir şekilde gelmesi belirtilir.

<img src="https://mintcdn.com/apinizer/uEpU4gYmDePkcYS7/images/tutorials/import-spec-option.png?fit=max&auto=format&n=uEpU4gYmDePkcYS7&q=85&s=3817e7d3c4af8bc49608cbce828047b6" alt="Import Spec Seçeneği" width="1000" data-path="images/tutorials/import-spec-option.png" />

* Eğer **Import Spec** seçeneği seçilirse aşağıda yer alan görseldeki gibi sayfa oluşacaktır.
* Bu ifade ile hazırda bulunan bir **API** Apinizer'a dahil edilebilir.
* **API Spec Type** ifadesi altında yer alan seçenekler eklenecek olan API'nin hangi tipte olduğu belirtilir.
* **Import Type** ise ekleme işleminin nasıl yapılacağını belirtir.

Bu senaryoda boş bir **Mock API** oluşturulacaktır bu yüzden "Blank" ifadesi seçilir ve ilgili alanlar görseldeki gibi doldurulur.

**Save and Next** butonuna tıklanarak işlem kaydedilip bir sonraki adıma geçilir.

<img src="https://mintcdn.com/apinizer/uEpU4gYmDePkcYS7/images/tutorials/mock-api-definition.png?fit=max&auto=format&n=uEpU4gYmDePkcYS7&q=85&s=f0d1dd6f58c5c9fa954c97743ea89e3e" alt="Mock API Definition" width="1000" data-path="images/tutorials/mock-api-definition.png" />

Bu ekran üzerinde yer alan ifadeler tek tek incelenecek olursa,

* **Definition - API Information** alanında API'ye ait isim ve açıklama bilgisi görülmektedir.
* **API Endpoints -Endpoints of the API** alanında ise **Mock API'nin** sahip olduğu **endpoint'ler** yer almaktadır.
* Yine bu alan içerisinde bulunan **Add** butonu ile yeni bir endpoint eklenebilir ya da var olan endpoint'ler seçilerek bunlar üzerinde de değişiklikler yapılabilir.

<img src="https://mintcdn.com/apinizer/s1G0_sxxeD_lU0Dx/images/tutorials/response-body-edit.png?fit=max&auto=format&n=s1G0_sxxeD_lU0Dx&q=85&s=b62cfbf83b95947d43af63dd0e312862" alt="Response Body Edit" width="1000" data-path="images/tutorials/response-body-edit.png" />

<Info>
  Bu senaryoda "GET" türünde "/getCarList" isimli endpoint üzerinden testler gerçekleştirilecektir.
</Info>

İlgili endpoint seçildikten sonra oluşacak olan sayfada yer alan alanlar incelenecek olursa;

* **HTTP Method** alanı ile oluşturulacak endpoint'in türü belirlenmektedir.
* Hemen yanında yer alan alanda ise endpoint'in ismi belirtilir.
* **Description** ifadesi ile de bu endpoint'e bir açıklama eklenebilir.
* **Response Information - Enter Response Details** alanı ile istek yapıldığı zaman alınacak olan yanıtlar belirlenir.
* Bu alan içerisinde yer alan içerisinde "+" bulunan buton ile de yeni yanıtlar oluşturulabilir.
* Bu senaryoda sadece **"200"** yanıtı dönen bir **response** tasarımı gerçekleştirilecektir.
* İçerisinde kalem ikonu bulunan buton ise ilgili dönecek yanıtın düzenleme işlemlerinin gerçekleştirilmesini sağlar.

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/create-api-proxy-button.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=cde518a4bec747c9a23cdd24e77b30fa" alt="Create API Proxy Button" width="1000" data-path="images/tutorials/create-api-proxy-button.png" />

Bu ekran üzerinde yer alan ifadeler tek tek incelenecek olursa,

* **Response Body** içerisinde endpoint'e istekte bulunduğunda alınacak yanıt belirtilmektedir.
* Bu alan içerisinde tipi, yılı ve fiyatı verilen bir liste bulunmaktadır.
* **Status Code** alanı ile dönecek olan yanıtın türü , **Response Content Type** alanı ile de dönecek olan içeriğin tipi belirlenir.
* Yanıt içerisinde bir **Headers** parametresi gönderilecek olursa eğer **Headers** alanı içerisinde belirtilir.
* Bu yanıt içerisinde bir koşul oluşturmak istenirse de **Condition** alanı içerisinden kural tanımı yapılabilir.
* Bu yapılan değişikliklerden sonra ise **Edit** butonuna tıklanarak düzenlemeler kaydedilir.

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/api-proxy-settings-mock.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=d28cb1e9f94da92e35718051de413438" alt="API Proxy Settings" width="1000" data-path="images/tutorials/api-proxy-settings-mock.png" />

Sağ alt köşede yer alan **Save** butonuna tıklanarak değişiklikler kaydedilir.

Sağ üst köşede yer alan **Create API Proxy** butonu ile de Mock API'den bir API Proxy oluşturulur.

<img src="https://mintcdn.com/apinizer/uEpU4gYmDePkcYS7/images/tutorials/deploy-proxy-mock.png?fit=max&auto=format&n=uEpU4gYmDePkcYS7&q=85&s=48057fbe62a5c5b48e90d24c2af2eaa6" alt="Deploy Proxy" width="1000" data-path="images/tutorials/deploy-proxy-mock.png" />

## Mock API'den API Proxy Oluşturulması

Proxy'nin kullanımı ve kategorisi belirlenir.

Proxy'ye uygun bir **Relative Path** verilir ve sağ üst köşede yer alan **Save** butonuna tıklanır.

<img src="https://mintcdn.com/apinizer/Q2GnWLLPNjT0-SZY/images/tutorials/test-endpoint-mock.png?fit=max&auto=format&n=Q2GnWLLPNjT0-SZY&q=85&s=57b9024b85fdb1b2cee7e726d6e2ee34" alt="Test Endpoint" width="1000" data-path="images/tutorials/test-endpoint-mock.png" />

**Deploy** butonuna tıklanır ve **proxy** deploy edilir.

<img src="https://mintcdn.com/apinizer/s1G0_sxxeD_lU0Dx/images/tutorials/response-without-policy.png?fit=max&auto=format&n=s1G0_sxxeD_lU0Dx&q=85&s=2cc2b8cb52214beda5e6159408b5f468" alt="Response Without Policy" width="1000" data-path="images/tutorials/response-without-policy.png" />

**Develop** menüsü altında yer alan **/getCarList** endpoint'i seçilir ve **Test Endpoint** butonuna tıklanır.

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/add-policy-json-transformation.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=e17ced033e80f493343b0c0d18b3c627" alt="Add Policy" width="1000" data-path="images/tutorials/add-policy-json-transformation.png" />

<Info>
  İlk olarak gerçekleştirilecek testte hiçbir şekilde poliçe uygulaması yapılmayacaktır.
</Info>

URL alanı içerisinde bulunan adrese istekte bulunulduğunda yanıt olarak **Response** alanı içerisinde yer alan **JSON verisi** görülmektedir.

Dönen yanıt incelenecek olunursa eğer içerisinde **"tip"**, **"yil"** ve **"fiyat"** **key** ifadeleri bulunan bir liste dönmektedir.

<img src="https://mintcdn.com/apinizer/s1G0_sxxeD_lU0Dx/images/tutorials/select-json-transformation.png?fit=max&auto=format&n=s1G0_sxxeD_lU0Dx&q=85&s=b5e92201077366dc139fdfd52b0d0e45" alt="Select JSON Transformation" width="1000" data-path="images/tutorials/select-json-transformation.png" />

## JSON Transformation Poliçesinin Eklenmesi

Senaryoda yer alan **key** ifadelerinin değişmesini sağlamak için bir poliçe eklenmesi gereklidir.

Bu poliçede API'den Client'a yanıt olarak gidecek olan alan içerisinde yer alacaktır.

Aşağıdaki görselde görülen alanda yer alan **Add Policy** ifadesine tıklanır.

<img src="https://mintcdn.com/apinizer/uEpU4gYmDePkcYS7/images/tutorials/json-transformation-settings.png?fit=max&auto=format&n=uEpU4gYmDePkcYS7&q=85&s=3eda928b90f1bfc6a3297c0294b26804" alt="JSON Transformation Settings" width="1000" data-path="images/tutorials/json-transformation-settings.png" />

Açılan ekranda aşağıdaki görselde de işaretlenmiş olan **JSON Transformation** poliçesi seçilir.

<img src="https://mintcdn.com/apinizer/s1G0_sxxeD_lU0Dx/images/tutorials/response-with-json-transformation.png?fit=max&auto=format&n=s1G0_sxxeD_lU0Dx&q=85&s=d31dcf3cf9278c40c3bf48f54bcd4dde" alt="Response With JSON Transformation" width="1000" data-path="images/tutorials/response-with-json-transformation.png" />

Bu ekran üzerinde yer alan ifadeler incelenecek olursa;

* **Description** alanı ile kullanılacak olan poliçeye açıklama eklenebilir.
* **Configuration - Enter the policy configurations** alanı ile de değiştirilecek mesaj için gerekli olan **Jolt Değeri** yazılır.
* **Test Jolt** ifadesi ile de yazılan konfigürasyon test edilir.
* Oluşturulan poliçe **Save** butonuna tıklanarak kaydedilir.
* Yapılan değişikliklerin geçerli olması için **Redeploy** butonuna tıklanır.
* Seçili olan endpoint'in test edilmesine geçilir.

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/add-script-policy.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=8e4a3e6cd8852a4ba5f21deca75cecbd" alt="Add Script Policy" width="1000" data-path="images/tutorials/add-script-policy.png" />

Aşağıdaki görselde de görüldüğü üzere, belirtilen **endpoint'e** istekte bulunulduğunda **Mock API'den** dönmekte olan yanıttaki **key** ifadelerinin değiştiği görülmektedir.

<img src="https://mintcdn.com/apinizer/s1G0_sxxeD_lU0Dx/images/tutorials/script-policy-settings.png?fit=max&auto=format&n=s1G0_sxxeD_lU0Dx&q=85&s=1368dc726af57857833f850a28d1dc02" alt="Script Policy Settings" width="1000" data-path="images/tutorials/script-policy-settings.png" />

## Script Poliçesinin Eklenmesi

Sırada ise istemciden gönderilecek "Order By" parametre değerine göre sıralama yapacak olan **script'in** çalıştırılması vardır.

Bunun için Mock API'den istemciye gönderilen yanıtın bulunduğu alana **Script poliçesinin** eklenmesi gereklidir.

**Add Policy** ifadesine tıklanır ve buradan **Script poliçesi** seçilir.

<img src="https://mintcdn.com/apinizer/s1G0_sxxeD_lU0Dx/images/tutorials/policy-order.png?fit=max&auto=format&n=s1G0_sxxeD_lU0Dx&q=85&s=a24a2def6312095451aed4ca4ef4d672" alt="Policy Order" width="1000" data-path="images/tutorials/policy-order.png" />

Bu ekran üzerinde yer alan ifadeler tek tek incelenecek olursa,

* **Script Language** alanı ile oluşturulacak olan **Script'in** hangi programlama dili ile yazılacağı seçilir.
* **Script Body** alanı içerisinde hem script yazılacak alan hem de script yazarken kullanımı kolaylaştıran hazır fonksiyonlar bulunmaktadır.
* Bu senaryoda **ResponseBodyTextToClient** isimli fonksiyon kullanılacaktır.
* Diğer hazır fonksiyonlar hakkında bilgi almak için [buradaki](/tr/develop/politikalar/script) linke tıklayabilirsiniz.
* Kullanılacak olan script yazıldıktan sonra ise **Save** butonuna tıklanır ve poliçe kaydedilir.

<img src="https://mintcdn.com/apinizer/Q2GnWLLPNjT0-SZY/images/tutorials/test-without-order.png?fit=max&auto=format&n=Q2GnWLLPNjT0-SZY&q=85&s=612c9748cceda67a53a390401ba7db15" alt="Test Without Order" width="1000" data-path="images/tutorials/test-without-order.png" />

Proxy üzerinde son yapılan eklemelerin ardından **Redeploy** edilir.

İlk olarak **JSON Transformation** poliçesinin çalıştırılıp daha sonra **Script** poliçesinin çalıştırılması gereklidir.

Bunun için **JSON Transformation** poliçesine ait ikonun sona alınması gereklidir. Oluşturulmak istenen kullanım aşağıdaki görselde yer almaktadır.

<img src="https://mintcdn.com/apinizer/Q2GnWLLPNjT0-SZY/images/tutorials/test-with-order-year.png?fit=max&auto=format&n=Q2GnWLLPNjT0-SZY&q=85&s=02410707cea6a5f41d8700e1af7927fa" alt="Test With Order Year" width="1000" data-path="images/tutorials/test-with-order-year.png" />

## API Proxy'nin Test Edilmesi

**Test Endpoint** ifadesine tıklanır.

İlk testte mock API'ye hiçbir query parametresi gönderilmez ve "Response" alanı içerisinde yer alan cevap elde edilir.

<img src="https://mintcdn.com/apinizer/Q2GnWLLPNjT0-SZY/images/tutorials/test-with-order-price.png?fit=max&auto=format&n=Q2GnWLLPNjT0-SZY&q=85&s=a87846218fc886325dbc14198056caf5" alt="Test With Order Price" width="1000" data-path="images/tutorials/test-with-order-price.png" />

Daha sonra ise **order=year** query parametresi eklenerek alınacak olan yanıtın yıla göre sıralanması sağlanır.

<img src="https://mintcdn.com/apinizer/5OaccE6GrE8Reusq/images/tutorials/mock1.png?fit=max&auto=format&n=5OaccE6GrE8Reusq&q=85&s=4aa0f2e7768a4deaccc16de314a8c66d" alt="Test With Order Price" width="1000" data-path="images/tutorials/mock1.png" />

Son olarak **order=price** query parametresi eklenerek alınacak olan yanıtın yıla göre sıralanması sağlanır.

<img src="https://mintcdn.com/apinizer/5OaccE6GrE8Reusq/images/tutorials/mock2.png?fit=max&auto=format&n=5OaccE6GrE8Reusq&q=85&s=ed8b438a8644c76d5005dc3acecac89a" alt="Test With Order Price" width="1000" data-path="images/tutorials/mock2.png" />
