Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
API Test Araçları Haritası: curl, .http Dosyaları, Postman, Bruno ve OpenAPI UI'ları Arasında Seçim
Aracı seçerken asıl soru, istek tanımlarının nerede durduğu: repo'da yaşayan .http dosyaları ve Bruno collection'ları API koduyla aynı pull request'te değişir, bulut collection'ı ise geride kalır. Bookstore.Api'ye login ve JWT ekleyip ortak senaryoyu curl ile koşuyor, OpenAPI dokümanına Bearer şemasını yazdırıyor, Scalar'ın yerini, Postman'in Mart 2026'dan beri tek kullanıcılı ücretsiz planını ve Bruno'nun sürümlerini karşılaştırıyoruz.
curl ile API Test Etmek: Method, Header, --json, Authentication, Upload, Hata Kodları ve Script'te Kullanmak
curl'ü script'te güvenle kullanmanın kuralı, 401 ve 500'de de 0 dönen çıkış koduna güvenmemek: --fail-with-body hem 22 ile çıkar hem ProblemDetails'i basar. Bookstore.Api'ye karşı -v ve --trace-ascii, -d ile --json farkı (415), token'ı --variable ve -H @dosya ile history'den uzak tutmak, -F ile kapak yükleme ve antiforgery hatası, --retry sınırları, bir smoke script'i, Windows'ta curl.exe tırnak sorunu, Invoke-RestMethod ve xh gerçek çıktılarla.
.http Dosyalarıyla Repo İçinde API Testi: Visual Studio, Rider ve VS Code'da Variable, Environment ve Request Chaining
.http dosyaları repo'da yaşar ama aynı uzantının üç dialect'i var: Visual Studio'nun {{login.response.body.$.accessToken}}, $dotenv ve $shared'ı, JetBrains HTTP Client'ta (ijhttp 2026.2) çözülmeden gidiyor ve 401'ler test yazılmadıkça hata sayılmıyor. Bookstore için iki dosya, http-client.env.json ve secret provider'lar, VS Code ayarları, client.test ile JUnit raporu, .gitignore'un korumadığı http-client.private.env.json ve gitleaks'in yakaladığı token gerçek koşularla.
Postman Derinlemesine: Collection, Environment, Variable Scope'ları, Script'ler, Test'ler, Mock Server ve CLI
Postman collection'ını repo'da tutup CI'da Newman ya da Postman CLI ile koşmak, Mart 2026'dan beri tek kullanıcılı ücretsiz plana karşı en sağlam yol. Bookstore için elle yazılmış v2.1 collection: OpenAPI'den import, variable scope önceliği, shared ve local value farkı, token'ı bir kez alıp saklayan pre-request script, pm.test, data dosyasıyla düşen bir iterasyon, JUnit raporu ve Postman CLI'ın yerel mock'unun neden işe yaramaz veri döndürdüğü gerçek koşularla.
Git Dostu API Client'ı: Bruno ile Collection'ı Repo'da Tutmak, OpenCollection YAML ve CLI ile CI'da Koşmak
Bruno collection'ı OpenCollection YAML dosyaları olarak repo'da tutup GitHub Actions'ta Bruno CLI ile koşmak, istek değişikliklerini code review'da okunur bir diff'e çeviriyor. Bookstore için auth miras alan bir collection, OpenAPI ve Postman import'u (pm.variables.get'in bru.getVar'a yanlış çevrilmesi), .env ile secret'lar, assertion ve test script'leri, JUnit/HTML raporu, rapor klasörü olmayınca 2 dönen CLI ve YAML collection'ındaki .bru dosyasını sessizce atlayan run gerçek koşularla.