Insomnia ile API Test Etme: Postman’a Güçlü Bir Alternatif
API geliştirme sürecinde doğru araçları kullanmak, hem zaman kazandırır hem de hata ayıklama süreçlerini ciddi ölçüde kolaylaştırır. Postman yıllardır bu alanda standart araç olarak kullanılsa da son zamanlarda lisanslama politikası değişiklikleri, bulut bağımlılığı ve şişirilmiş arayüzü nedeniyle pek çok geliştirici ve sistem yöneticisi alternatif aramaya başladı. İşte tam bu noktada Insomnia devreye giriyor. Açık kaynak kodlu, hafif ve son derece işlevsel olan bu araç, API testlerinde Postman’e güçlü bir alternatif sunuyor.
Insomnia Nedir ve Neden Tercih Edilmeli?
Insomnia, Kong tarafından geliştirilen açık kaynaklı bir REST, GraphQL ve gRPC istemcisidir. Masaüstü uygulaması olarak çalışır ve verilerini varsayılan olarak yerel olarak saklar. Bu da özellikle güvenlik odaklı ortamlarda çalışan sistem yöneticileri için büyük bir avantaj.
Postman’den geçiş yapmak istemeye başlamanın en yaygın sebepleri şunlar:
- Zorunlu hesap girişi: Postman, 2023 sonrasında yerel çalışma özelliğini kısıtladı ve neredeyse her şeyi buluta taşıdı
- Performans sorunları: Electron tabanlı olmasına rağmen Postman zamanla oldukça ağır bir uygulama haline geldi
- Fiyatlandırma baskısı: Takım özelliklerinin büyük çoğunluğu ücretli plana taşındı
- Veri gizliliği endişeleri: Kurumsal ortamlarda API isteklerinin bulutta saklanması güvenlik riski oluşturuyor
Insomnia ise şu avantajları sunuyor:
- Tamamen yerel çalışma: İnternet bağlantısı olmadan da kullanılabilir
- Açık kaynak:
insomnia-coreGitHub’da herkese açık - Hafif yapı: Postman’e kıyasla çok daha hızlı açılıp çalışıyor
- Git senkronizasyonu: Koleksiyonları Git reposuyla senkronize edebiliyorsunuz
- Güçlü şablonlama: Nunjucks template engine desteği var
Kurulum
Linux Üzerinde Kurulum
Debian/Ubuntu tabanlı sistemlerde kurulum oldukça basit:
# Snap ile kurulum
sudo snap install insomnia
# Ya da .deb paketi ile
wget https://github.com/Kong/insomnia/releases/latest/download/Insomnia.Core-2023.5.8.deb
sudo dpkg -i Insomnia.Core-2023.5.8.deb
sudo apt-get install -f
RPM tabanlı sistemler için:
# Fedora/RHEL/CentOS
wget https://github.com/Kong/insomnia/releases/latest/download/Insomnia.Core-2023.5.8.rpm
sudo rpm -i Insomnia.Core-2023.5.8.rpm
# Ya da dnf ile
sudo dnf install Insomnia.Core-2023.5.8.rpm
AppImage formatını tercih edenler için:
# AppImage indir ve çalıştırılabilir yap
wget https://github.com/Kong/insomnia/releases/latest/download/Insomnia.Core-2023.5.8.AppImage
chmod +x Insomnia.Core-2023.5.8.AppImage
./Insomnia.Core-2023.5.8.AppImage
Windows Üzerinde Kurulum
# Winget ile kurulum (en temiz yöntem)
winget install Kong.Insomnia
# Chocolatey kullanıyorsanız
choco install insomnia-rest-api-client
Temel Arayüzü Tanımak
Insomnia’yı ilk açtığınızda karşınıza oldukça sade bir arayüz geliyor. Sol panelde koleksiyonlarınız ve istekleriniz yer alıyor. Ortada istek detayları, sağ tarafta ise yanıt görüntüleniyor.
Workspace: En üst seviye organizasyon birimi. Farklı projeler için ayrı workspace oluşturabilirsiniz.
Collection: İlgili API isteklerini gruplandırdığınız yer. Postman’deki koleksiyonlarla birebir aynı mantık.
Environment: Farklı ortamlar için değişken setleri. Örneğin geliştirme, test ve production ortamları için ayrı ayrı tanımlayabilirsiniz.
Request: Tek bir API çağrısı. HTTP method, URL, header, body gibi tüm detayları burada ayarlıyorsunuz.
Environment (Ortam) Yönetimi
Gerçek dünyada bir API’yi genellikle birden fazla ortamda test edersiniz. Insomnia’nın environment sistemi bu işi gayet güzel hallediyor.
Örneğin şöyle bir yapı kurabilirsiniz:
Development ortamı:
{
"base_url": "http://localhost:3000",
"api_version": "v1",
"auth_token": "dev-token-123",
"timeout": 5000
}
Production ortamı:
{
"base_url": "https://api.sirketim.com",
"api_version": "v1",
"auth_token": "{{ _.prod_token }}",
"timeout": 30000
}
İsteklerde bu değişkenleri {{ base_url }}/{{ api_version }}/users şeklinde kullanıyorsunuz. Ortamı değiştirdiğinizde tüm istekler otomatik olarak güncelleniyor. Çok basit ama son derece etkili.
İlk API İsteğini Oluşturmak
Basit bir GET isteğinden başlayalım. Diyelim ki bir kullanıcı listesi döndüren endpoint’i test ediyoruz:
# Insomnia'da simüle ettiğimiz istek
GET {{ base_url }}/api/v1/users
Authorization: Bearer {{ auth_token }}
Content-Type: application/json
Accept: application/json
X-Request-ID: {{ uuid() }}
{{ uuid() }} gibi built-in fonksiyonlar Insomnia’nın güçlü yönlerinden biri. Her istek gönderildiğinde otomatik olarak benzersiz bir UUID üretiliyor.
POST İsteği ve Request Body
Yeni bir kullanıcı oluşturmak için:
POST {{ base_url }}/api/v1/users
Content-Type: application/json
Authorization: Bearer {{ auth_token }}
{
"name": "Ahmet Yılmaz",
"email": "[email protected]",
"role": "admin",
"department": "IT",
"created_at": "{{ now() }}"
}
Body bölümünde JSON, XML, form-data ve multipart/form-data gibi formatları seçebiliyorsunuz. Binary dosya yüklemeleri de destekleniyor.
Kimlik Doğrulama Yöntemleri
Insomnia’nın en güçlü yanlarından biri geniş authentication desteği. Şimdi bunları inceleyelim.
Bearer Token Authentication
En yaygın kullanılan yöntem. Auth sekmesinde Bearer Token seçip tokeni giriyorsunuz, Insomnia otomatik olarak header’a ekliyor:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
OAuth 2.0
OAuth 2.0 için Insomnia’nın yerleşik desteği oldukça olgun. Client Credentials, Authorization Code, Password, ve Implicit akışlarının hepsini destekliyor.
# Client Credentials akışı için Insomnia'da girmeniz gerekenler:
Grant Type: Client Credentials
Access Token URL: https://auth.sirketim.com/oauth/token
Client ID: my-client-id
Client Secret: {{ oauth_secret }}
Scope: read:users write:users
Basic Auth ve API Key
# Basic Auth - Insomnia bunu otomatik Base64'e çeviriyor
Username: admin
Password: {{ admin_password }}
# Header olarak API Key
X-API-Key: {{ api_key }}
# Query param olarak API Key
GET {{ base_url }}/api/users?api_key={{ api_key }}
Chaining Requests: İstekler Arası Veri Aktarımı
Bu özellik Insomnia’yı gerçekten güçlü kılan şey. Bir isteğin yanıtından aldığınız değeri başka bir istekte kullanabiliyorsunuz. Login endpoint’inden aldığınız token’ı diğer isteklerde kullanmak için şu yaklaşımı kullanabilirsiniz:
İlk olarak login isteği:
POST {{ base_url }}/auth/login
Content-Type: application/json
{
"username": "{{ username }}",
"password": "{{ password }}"
}
Bu isteğin yanıtı şöyle bir şey döndürüyor diyelim:
{
"access_token": "eyJhbGci...",
"refresh_token": "dGhpcyBp...",
"expires_in": 3600,
"user_id": "usr_123456"
}
Sonraki istekte Response Reference kullanarak bu token’ı çekebilirsiniz. Insomnia’da bunu yapmak için değişken olarak şu syntaxı kullanıyorsunuz:
GET {{ base_url }}/api/v1/profile
Authorization: Bearer {% response 'body', 'req_login_id', '$.access_token', 'when-expired', 60 %}
Bu sayede token süresi dolduğunda Insomnia otomatik olarak login isteğini yeniden çalıştırıp taze token alıyor. Gerçekten hayat kurtaran bir özellik.
Script ile Test Yazma
Insomnia, yanıt doğrulama için test scriptleri yazmanıza izin veriyor. Bu özellik özellikle CI/CD entegrasyonunda çok işe yarıyor.
# Pre-request script - istek gönderilmeden önce çalışır
const timestamp = Date.now();
insomnia.environment.set('request_timestamp', timestamp);
insomnia.environment.set('signature',
CryptoJS.HmacSHA256(timestamp.toString(), secret).toString()
);
Post-request test scriptleri ise şöyle görünüyor:
# Response test scriptleri
const response = JSON.parse(insomnia.response.body);
// Status code kontrolü
expect(insomnia.response.status).to.equal(200);
// Response time kontrolü
expect(insomnia.response.time).to.be.below(2000);
// Body içerik kontrolü
expect(response).to.have.property('data');
expect(response.data).to.be.an('array');
expect(response.data.length).to.be.greaterThan(0);
// İlk kullanıcının gerekli alanlara sahip olduğunu kontrol et
const firstUser = response.data[0];
expect(firstUser).to.have.property('id');
expect(firstUser).to.have.property('email');
expect(firstUser.email).to.include('@');
GraphQL Desteği
REST API’lerin yanı sıra GraphQL’i de yerel olarak destekliyor. Schema introspection çalışıyor, otomatik tamamlama var ve query’lerinizi kolayca yazabiliyorsunuz.
# GraphQL isteği örneği
POST {{ base_url }}/graphql
Content-Type: application/json
Authorization: Bearer {{ auth_token }}
query GetUser($id: ID!) {
user(id: $id) {
id
name
email
role
createdAt
orders {
id
status
total
}
}
}
# Variables
{
"id": "usr_123456"
}
Insomnia GraphQL editor’ünde şema otomatik olarak yükleniyor ve field adlarını yazarken otomatik tamamlama devreye giriyor. Bu özellik özellikle büyük ve karmaşık GraphQL şemalarıyla çalışırken çok değerli.
Insomnia’yı CI/CD’ye Entegre Etmek
Gerçek dünya senaryolarında API testlerini otomatize etmek isteyeceksiniz. Insomnia CLI aracı olan Inso bu iş için kullanılıyor.
# Inso CLI kurulumu
npm install -g insomnia-inso
# Ya da npx ile doğrudan çalıştır
npx insomnia-inso --version
Koleksiyonunuzu dışa aktarıp CI pipeline’ına ekleyebilirsiniz:
# Inso ile test çalıştırma
inso run test "API Test Suite"
--env production
--reporter spec
--bail
# Spesifik bir koleksiyon ID'si ile
inso run test col_abc123
--env staging
--verbose
GitLab CI/CD örneği:
# .gitlab-ci.yml
stages:
- test
api-tests:
stage: test
image: node:18-alpine
before_script:
- npm install -g insomnia-inso
script:
- inso run test "API Regression Suite"
--env staging
--reporter min
--ci
variables:
INSOMNIA_ENV_base_url: "https://staging.api.sirketim.com"
INSOMNIA_ENV_auth_token: $STAGING_API_TOKEN
artifacts:
when: always
reports:
junit: test-results.xml
GitHub Actions için:
# .github/workflows/api-tests.yml
name: API Tests
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
api-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install Inso CLI
run: npm install -g insomnia-inso
- name: Run API Tests
run: |
inso run test "Smoke Tests"
--env ci
--reporter spec
env:
INSOMNIA_ENV_base_url: ${{ secrets.API_BASE_URL }}
INSOMNIA_ENV_auth_token: ${{ secrets.API_TOKEN }}
Koleksiyonları Git ile Yönetmek
Insomnia koleksiyonlarınızı JSON formatında export edip Git reposunda saklayabilirsiniz. Bu kurumsal ortamlar için son derece değerli bir özellik.
# Koleksiyonu export et
# File > Export > Current Collection
# Versiyonla
git add insomnia-collection.json
git commit -m "feat: payment API endpoint testleri eklendi"
git push origin main
# Başka bir makinede import et
# File > Import > From File
Ekip içinde koleksiyon paylaşımı bu şekilde Git üzerinden yapılıyor. Herkes aynı koleksiyonu kullanıyor, değişiklikler takip edilebiliyor ve merge conflict’ler JSON diff ile görülebiliyor.
Gerçek Dünya Senaryosu: Mikroservis API Testi
Diyelim ki bir e-ticaret platformunun mikroservislerini test ediyorsunuz. Şu servislerin olduğunu varsayalım:
- Auth Service (port 3001)
- Product Service (port 3002)
- Order Service (port 3003)
- Payment Service (port 3004)
Environment yapısı:
{
"auth_service": "http://localhost:3001",
"product_service": "http://localhost:3002",
"order_service": "http://localhost:3003",
"payment_service": "http://localhost:3004",
"test_user_email": "[email protected]",
"test_user_password": "TestP@ss123"
}
Bu ortamda bir sipariş akışını test eden koleksiyon şöyle görünebilir:
# 1. Kullanıcı girişi
POST {{ auth_service }}/login
Body: { "email": "{{ test_user_email }}", "password": "{{ test_user_password }}" }
# 2. Ürün listesi çek
GET {{ product_service }}/products?category=electronics&limit=10
Authorization: Bearer {{ auth_token }}
# 3. Sepete ürün ekle
POST {{ order_service }}/cart/items
Authorization: Bearer {{ auth_token }}
Body: { "product_id": "prod_789", "quantity": 2 }
# 4. Sipariş oluştur
POST {{ order_service }}/orders
Authorization: Bearer {{ auth_token }}
Body: { "cart_id": "cart_456", "shipping_address_id": "addr_123" }
# 5. Ödeme yap
POST {{ payment_service }}/payments
Authorization: Bearer {{ auth_token }}
Body: { "order_id": "ord_101", "payment_method": "credit_card", "card_token": "tok_test" }
Her adım birbirinin çıktısını kullanıyor ve tüm akış Insomnia’nın response chaining özelliğiyle otomatize edilebiliyor.
Plugin Ekosistemi
Insomnia’nın plugin sistemi oldukça güçlü. Marketplace’ten kurulabilen bazı popüler pluginler:
- insomnia-plugin-aws-auth: AWS Signature v4 imzalama için
- insomnia-plugin-save-variables: Yanıt değerlerini environment’a kaydetmek için
- insomnia-plugin-faker: Fake test verisi üretmek için
- insomnia-plugin-jsonpath: JSONPath ile veri çekme işlemleri için
Plugin kurulumu çok basit:
# Preferences > Plugins sekmesinden npm package adını yazıp Install'a basıyorsunuz
# Ya da npm ile global kurulum
npm install -g insomnia-plugin-aws-auth
Postman’den Insomnia’ya Geçiş
Mevcut Postman koleksiyonlarınızı Insomnia’ya taşımak son derece kolay. Postman v2 formatını doğrudan import ediyor.
# Postman'de koleksiyonu export et:
# Collection > ... > Export > Collection v2.1
# Insomnia'da import et:
# File > Import > From File > postman_collection.json seçin
Ortam değişkenleri için:
# Postman'de environment export et:
# Environments > ... > Export
# Insomnia'da import et
# File > Import > postman_environment.json
Dikkat etmeniz gereken bazı farklılıklar var:
- Postman’in
pm.prefix’i: Insomnia’dainsomnia.prefix’i kullanılıyor - Pre-request script syntaxı: Bazı küçük farklılıklar olabiliyor, özellikle karmaşık scriptlerde
- Runner özelliği: Postman’deki Collection Runner’a karşılık Insomnia’da Inso CLI kullanılıyor
Güvenlik Değerlendirmeleri
Sistem yöneticisi bakış açısıyla Insomnia kullanırken dikkat edilmesi gereken noktalar:
- Senkronizasyon ayarları: Varsayılan olarak yerel çalışıyor ama isteğe bağlı cloud sync aktifleştirilebiliyor. Kurumsal ortamlarda bu özelliği kapalı tutun
- Hassas değişkenler: Environment’lardaki password, token gibi hassas değerleri asla koleksiyon export’una dahil etmeyin
- Secret masking: Insomnia’da hassas değerleri
{{ _.secret_value }}syntax’ı ile secret olarak işaretleme özelliği var - TLS/SSL: Self-signed sertifikalar için SSL validation’ı geçici olarak devre dışı bırakabilirsiniz ama bunu sadece geliştirme ortamında yapın
Sonuç
Insomnia, özellikle son dönemde Postman’in aldığı kararlar nedeniyle ciddi bir alternatif haline geldi. Açık kaynak olması, yerel çalışma odaklı yapısı ve güçlü özellik seti ile hem bireysel geliştiriciler hem de kurumsal ekipler için sağlam bir seçenek sunuyor.
Pratikte baktığımda Insomnia’nın en güçlü yanları şunlar: ortam yönetimi son derece temiz ve mantıklı, response chaining özelliği gerçekten kullanışlı, GraphQL desteği olgun ve Inso CLI ile CI/CD entegrasyonu düzgün çalışıyor. Plugin ekosistemi Postman kadar geniş olmasa da temel ihtiyaçları karşılıyor.
Eğer hala Postman kullanıyorsanız ve özellikle hesap bağımlılığından ya da veri gizliliği endişelerinden rahatsız oluyorsanız Insomnia’ya geçiş yapmak için iyi bir zaman. Mevcut Postman koleksiyonlarınızı import etmek birkaç dakika alıyor ve öğrenme eğrisi son derece düşük. Bir kez alıştıktan sonra daha hızlı ve daha az dikkat dağıtıcı bir araçla çalıştığınızı fark edeceksiniz.
Özellikle güvenlik politikaları katı olan kurumlarda çalışan sistem yöneticileri için internet erişimi gerektirmeyen ve tamamen yerel çalışabilen bu araç gerçekten kıymetli. API testlerini ciddiye alıyorsanız Insomnia’yı araç setinize ekleyin, pişman olmayacaksınız.
