API ve API TESTİ NEDİR?

okan arslan
Kuka Mobile Tech
Published in
7 min readSep 17, 2021

Merhabalar, bu yazımda yazılım test mühendisi veya test uzmanı olarak yazılım dünyasında kariyer yapma hedefi olan arkadaşlar için önemli bir konu olduğunu düşündüğüm API’nin ve API testinin ne olduğuna teorik anlamda değinmeye çalışacağım.

API NEDİR?

API (Application Programming Interface) dilimize göre anlamı “Uygulama Programlama Arayüzü”, uygulamanın işlevlerine dışarıdan veya uzaktan erişilerek bu işlevlerin kullanılmasını sağlayan bir arayüzdür. API, bir sunucunun, uygulamaya farklı platformlardan ulaşmasına ve yanıt vermesine olanak sağlar.

API kullanımının asıl amacına değinmek gerekirse bir uygulamanın tüm ya da bazı metodlarını diğer uygulamalara açarak dışardan gelecek veri ve bilgi isteklerini hızlı ve rahat bir şekilde cevaplamaktır.

API’nin Kullanıldığı Başlıca Platformlar

· Uygulama Sunucuları

· Bulut Kaynakları

· Bulut Tabanlı Servisler

· Mobil Uygulamalar

· Database

· Web Uygulamaları

Günlük hayatta kullanılan API’lere örnek vermek gerekirse:

— Google Haritalar
— Analytics
— Youtube
— Google Translate
— Twitter
— Facebook

API Tipleri

REST (Representational State Transfer / Temsili Durum Transferi) API

Client (istemci) ve server (sunucu) arasında hızlı ve kolay şekilde iletişim kurulmasını sağlayan bir servis yapısıdır. Diğer bir tanımla, yazılımlarda kullanılan bir veri transfer yöntemidir.
Genellikle mesajlar XML veya JSON formatlı gönderilir. Ama bazı zamanlarda text olarak da gönderim sağlanabilir.

SOAP ( Simple Access Protocol / Basit Nesne Erişim Protokolu) API

Temel anlamda, internet üzerinde belirli bilgileri ya da mesajları aktarma protokolüdür. SOAP API’lerde genel olarak “HTTP” protokolü kullanılır. Kimi zamanlarda da “TCP/IP” protokolü kullanılır.
SOAP API’lerde mesajlar XML formatlıdır. SOAP API’ler genel olarak kurumsal projelerde tercih edilir.

REST Servis HTTP Metodları

GET: Veri listeleme ve veri görüntüleme için kullanılır. GET request’ler güvenli olmalıdır. Aynı parametrelerde tekrar edilmesine bakılmaksızın sonuçlar hep aynıdır. GET ile veri gönderimi adres çubuğunda gönderildiğinde sonuçlar görülebilir olduğundan güvenilir değildir.

POST: Veri eklemek için kullanılmasının yanında mevcut olan veriyi güncellemek için de kullanılır. Doğrudan sayfaya veri gönderilir ve veriler adres çubuğunda gösterilmez.

PUT: Verileri güncellemek için kullanılmaktadır. PUT’un POST’tan farkı etkisiz olmasıdır. Yani bir istek birden fazla olsa da sonucu değişmez. Varolan veriyi günceller ya da üzerine veri ekler.

PATCH: Verinin sadece bir parçasını güncellemek için kullanılır.

DELETE: Kaynaktan veriyi silmek için kullanılır. Ancak ID’si verilen bir veriyi silebiliriz.

OPTIONS: Kabul edilen istekler doğrultusunda bilgi iletilir.

REST Servis HTTP Sonuç Durum Kodları

Bilgilendirici
100 / 101 / 102
100 -> (Continue): Şimdiye kadar her şeyin yolunda gittiğinin ve isteğin henüz sunucu tarafından reddedilmediğinin bir göstergesidir.
101 -> (Switching Protocol): Bu aşamada, sunucunun bir istemci tarafından talep edildiği gibi protokolü değiştirdiğini belirtir.
102 -> Processing (WebDAV): Sunucunun isteği aldığını ve işlediğini, ancak henüz bir yanıt olmadığını gösterir.

Başarılı
200 / 201 / 204 / 226
200 -> (OK): Yanıtın başarılı olduğunu gösterir. Yani, istemci ile sunucu arasındaki iletişim herhangi bir hata olmadan sorunsuz bir şekilde yürütülmüştür.
201 -> Created (Başarılı istek ve veriler için): Bu, talebin sadece başarılı olmadığını, aynı zamanda bir kaynağın da yaratıldığını gösterir. Bu durum kodu, sunucuya gönderilen kaynağı tanımladığı için genellikle bir POST isteğiyle birlikte gelir.
204 -> No Content (Boş cevaplar için): Bu, gönderilen isteğin alındığı, ancak yanıt yükünde gönderilecek ek veri olmadığı anlamına gelir. PUT yöntemi çoğunlukla 204 yanıtı için kullanılır ve varsayılan olarak önbelleğe alınabilir.

Yönlendirme
300 / 301 / 303 / 308
300 -> (Multiple Choice): Bir kullanıcının seçebileceği çok sayıda seçeneği veya kaynağı gösterir ve her bir seçenek veya kaynak benzersiz bir şekilde tanımlanabilir.
301 -> (Moved Permanently): Kaynağa yapılacak tüm gelecekteki istekler belirli bir URL’ye yönlendirilmelidir. Artık var olmayan bir sayfadan yönlendirme yapmak için kullanılabilir.
303 -> (See Other): HTTP durum kodu, bu isteğin yanıtının başka bir URL’e yönlendirildiğini gösterir. Bu durum kodu, herhangi bir HTTP yöntemi için geçerlidir.

İstemci Hataları
400
-> Bad request (Kötü cevap için. İstek anlaşılamadı veya gerekli parametreler eksikti): Kullanıcı yaptığı istekte ( sorguda ) eksik parametre veya büyük boyut, sahte yönlendirme veya hatalı biçim kullanıyor olabilir. Kısaca gönderilen isteğin hatalı olduğunu belirten durum kodudur.
401 -> Unauthorized (Yetkisiz erişim için. Kimlik doğrulama başarısız oldu veya kullanıcının istenen işlem için izinleri yok): İstek yapılan adreste giriş yetkilendirmesinin olmadığını belirlen durum kodudur.
403 -> Forbidden (Yasak için, erişim reddedildi): Hosting hesabınızın FTP alanında web sunucusunun açabileceği bir index.(html, php vs.) dosyası bulunmuyor demektir. Bu durum dosyaların yanlış klasöre ya da dizine aktarılmasından kaynaklanabileceği gibi, dosyaların eksik aktarılmasından da kaynaklanabilir.
404 -> Not found (Bilgi bulunamadığı için): Temel olarak tarayıcıdan erişilmeye çalışılan sitenin sunucuda bulunmadığını ya da söz konusu sayfada bir sorun olduğunu ifade ediyor.
405 -> Method Not Allowed (İstek desteklenmediği veya metoda izin verilmediği için): Gönderilen sorgu türünü HTTP’nin kabul etmediğini belirtir. Bu bağlamda sorgu türünüzü GET veya POST olarak değiştirip tekrar denemelisiniz.

Sunucu Hataları
500 / 501 / 511
500 -> Internal Server Error (Dahili sunucu hatası): Mobil web ve web sitenizin sunucusunda meydana gelen bir hata hakkında sizi uyaran fakat bu hatanın kaynağını göstermeyen bir HTTP durum kodudur
503 -> Service Unavailable (Kullanılmayan servis için): Kullanıcıya erişmeye çalıştığı internet sitesinin yer aldığı sunucunun geçici olarak mevcut olmadığını göstermektedir.

SOAP ve REST Arasındaki Farklar

Güvenlik: SOAP üzerinde güvenlik sağlamak daha çabuk ve hızlı bir şekilde gerçekleşir. REST güvenlik konusunda daha zayıftır. SOAP servisleri güvenlik protokollerini içinde barındırır. Durum bilgisini istek (request) ve cevaplarda (response) tutar. REST servisler direkt bir URL üzerinden erişilir. Herhangi bir güvenlik protokolü yer almaz.

Data Yapısı: SOAP servislerde format olarak XML çalışılırken, REST servislerde JSON, XML ve hatta Text ile de çalışılır. Eğer data boyutları uygulamanız için kritik ise REST kullanmak daha iyi olacaktır.

Uygulama hızı: Uygulamanızın daha hızlı çalışmasını istiyorsanız SOAP yerine REST kullanmanız yararınıza olacaktır. JSON okumak oldukça kolaydır. XML ise veri değişim işlemlerinde yavaş kalmaktadır. JSON veri tipi, XML’den daha küçük boyutlarda veri tutabildiği için REST ile daha hızlı işlem yapılabilmektedir.

Önbellek:
*REST basit HTTP GET metodunu kullandığı için önbellekleme işlemi daha kolaydır. SOAP ile önbellekleme yapabilmek için karmaşık XML request’ler ile yapılmalıdır. Bir dile ihtiyaç duymadan HTTP metodları ile tasarlanabildiği için REST’i kullanmak ve tasarlamak daha kolaydır.
*SOAP için birçok geliştirme aracı mevcuttur. REST geliştirme araçlarına ihtiyaç duymaz ve tasarlanması kolaydır.
*SOAP olan bir servisi kullanabilmek için servisin WSDL (Web Servisleri Tanımlama Dili) bilgisine ihtiyaç duyarız. Proxy bilgileri ve bileşenleri gerekmektedir. REST mimarisinde ise herhangi bir servisi çağırmak için sadece URL bilgisini bilmek yeterlidir.

API TESTİ

API’nin isteklerinin, parametrelerinin, işlevselliğini doğrulamak, sınır değer analizi yapmak ve hataları ortaya çıkarmak için yapılmaktadır. Farklı uçlara dokunan uygulamalar ve sistemler arasında veri alışverişinin test edilmesi ve işlemlerin verimliliğinin gözlemlenmesi için yapılan testlerdir. API testleri, işlevsellik, performans, güvenilirlik, güvenlik ve kullanılabilirlik konularında güvence sağlamaktadır.

İşlevsellik
Entegrasyon testlerinin bir parçası olduğundan dolayı işlevsel olarak doğru ve düzgün çalışabilmesi için gereklidir.

Performans
Uygulamanızın oluşabilecek zorlu şartlar altında sistemsel olarak hatasız işleyebilmesi önemlidir.

Güvenilirlik
Uygulamanızın tutarlı ve stabil olduğundan emin olmalısınız.

Güvenlik
Herhangi bir kötü niyete sebep olacak sistemsel açıkların bulunmaması gerekir.

Kullanılabilirlik
Müşteri ya da kullanıcı açısından bakıldığında beklentiyi karşılayıp karşılamadığını görmemiz açısından API testi yapılmaktadır.

API TEST TÜRLERİ

API test türlerini anlamadan uygulama yöntemini bilemezsiniz. Kısaca değinmek gerekirse API test türleri şunlardır:

Unit Testing (Birim Testi):
API testinin en kolay yolu tek bir request (istek) veya bir response (cevap) ya da response setini tek bir endpoint üzerinden test edebilmektir.

Integration Testing (Entegrasyon Testi):
Entegrasyon testi, API’lerin dahili veya üçüncü taraf sunucuların merkezinde olduğu durumlarda, en sık gerçekleştirilen testlerdendir.

End-to-End Testing (Uçtan Uca Test):
Uçtan uca test, birkaç farklı API bağlantısı arasındaki veri ve bilgi akışını doğrulamamıza yardımcı olur.

Performance Testing (Performans Testi):
İlk otomatik performans testi hattınızı (testing pipeline) oluşturmak ilk başta çok zor görünebilir. Sorgular, akış (CI / CD) süreçlerinde hız, güvenlik ve etkinlik bağlamında kullanılır.

API Testinin Önemi

API’nin öncelikle doğru olarak çalıştığından emin olmanız gerekir. API’nin işlevselliği çok önemlidir. Sınır değer analizinin yapılması açısından API testlerinin önemi büyüktür. En büyük faydası ise bug’ların (hataların) bulunması açısından çok önemlidir. API testinin amacı kalitenin arttırılması bakımından yazılan kodun iyileştirilerek ortaya daha iyi bir ürün ya da uygulama çıkarmaktır.

API Testinin Faydaları

· API testi, istediğimiz response (cevapları) ve verileri kolay bir şekilde doğrulamamızı sağlar.

· Kullanıcı arayüzleri nasıl ulaşıldıklarına bağlı olarak değerlendirilmelidir. API testleri kontrollü bir şekilde yönetilebilir.

· API testleri başarısız olduğunda, kısa süre içinde hata tespiti yapılabildiği için kalitenin arttırılması açısından baya faydalıdır.

· Kullanıcı etkinlikleri açısından UI testleri uzun sürebilmektedir. Ancak API testleri kısa süre içinde tamamlanmaktadır. Bu sayede daha kısa zamanda daha fazla hata bulunup düzenlenebilmektedir.

API Testinin Zorlukları

API testinin bazı faydalarının yanında zorluklarının da olduğunu bilmemiz gerekir.

· API Test uzmanları ya da API Test mühendisleri arasında iş mantığı ve kuralları hakkında bilgi eksikliği test hedefi ile ilgili belirsizliğe neden olabilir. Bu da API testinin dezavantajlarından olarak görülebilir.

· API’ler sözleşmeler veya protokoller olarak bilinen bir dizi tanımlanmış kural aracılığıyla birbirleriyle etkileşime girerler. Genellikle protokoller karmaşıktır. Bileşenler arasındaki iletişimin doğru entegrasyonu ve test edilmesine engel teşkil edebilmektedir.

· API’nin yeni bir sürümü olduğunda tüm uygulamaların etkilenmesine sebep olacaktır. Birden çok bağımlı bileşen olduğundan dolayı bir değişikliğin uygulanması oldukça risklidir. KIsacası kodsal değişiklikler API testini çok fazla etkiler.

· Bir uygulamada ya da sistemde yer alan çok sayıda API birbirinden bağımsız hareket edebilir. Bu yüzden de API testi yapan test uzmanlarının güncellemelere hızlı bir şekilde ayak uydurmaları ve bu güncellemelerin genel uygulamayı nasıl etkilediğini anlamaları zorlaşır. API’nin bakımı bu yönden çok önemlidir. Eğer takip sağlanmazsa testler başarısız olur.

Umarım faydalı bir yazı olmuştur. Zaman ayırıp okuduğunuz için teşekkür ederim. Bir aksilik olmazsa sonraki makalemde “POSTMAN ile API testi nasıl yapılır?” konusuna değinmeyi düşünüyorum.

Bir sonraki makalede görüşmek üzere hoşça kalın…

Kaynaklar

https://ceaksan.com/tr/api-testing-ve-fake-apiler
https://smartbear.com/solutions/api-testing/
https://www.testrigtechnologies.com/api-testing-tutorial-how-to-perform-api-testing-types-tools/
https://www.argenova.com.tr/http-durum-ve-hata-kodlari

--

--