Rest API ve Postman’e Giriş

Tuğçe Akın
7 min readNov 25, 2019

--

Yazılım sektöründe kod geliştirmesi ve testleri yapılırken, developer ve testerlar tarafından en çok kullanılan araçlardan birisi Postman’dir. Rest API testlerini kolayca yapabileceğiniz bu tool içerisinde oldukça gelişmiş yapılar mevcuttur.

Öncelikle Postman aracını ve HTTP protokolünü ilk defa kullanacaklar için bir API testinin nasıl oluşturulacağından bahsedeceğim ve HTTP protokolü hakkında bilgi vereceğim. Makalenin 2. serisinde ise oluşturduğumuz API testlerini Collectionlar’da toplayıp farklı kullanıcılarla paylaşmayı ve paylaşılan collectionların import işlemlerini, Collection Runner kullanımını, Synchronized Workspace kullanımı ve kullanıcı yetkilendirme işlemlerinden bahsedeceğim.

Postman kullanımına geçmeden önce REST dünyasında sıkça kullanılan bazı kavramları anlatmakta fayda var.

Server Nedir? Client Nedir?

Http isteklerine yanıt veren yazılımlara “Server-Sunucu”, bu yazılımdaki ilgili metodları harekete geçirmek, bilgi almak veya bilgi girmek için istek yapan kullanıcı veya uygulamalara “Client-İstemci” denilir.

IP ve Domain Name Arasındaki İlişki Nedir?

Bir sunucuya erişebilmek için sunucunun IP adresini bilmemiz gerekir. DNS(Domain Name Server) aracılığı ile sitelerin IP bilgisini bilmeden, almış oldukları Domain Name bilgisini girerek siteye erişebiliriz.

Örneğin “https://www.google.com” bir domain name’dir. Fakat arka planda aslında “216.58.206.174” adresine erişmekteyiz. Sitelere yani sunuculara hem domain name, hemde ip adresi kullanarak erişebiliriz. DNS serverler Domain name bilgisine karşılık gelen IP adreslerine tablo halinde tutarak bizi otomatik olarak sunucuya yönlendirmektedirler.

API Nedir?

API (Application Programing Interfaces — Uygulama Programlama Arayüzleri) sunucudaki belli hizmetleri (Örn: veri okuma, yazma, silme, düzenleme vb.) istemcilere açarak kullanabilmelerini sağlayan, kontrolü yazılımcının elinde bulunan yapılardır. Http protokolü kullanarak dış dünya ile iletişime açılan API’ler belli URL Path’ler ile çağırılmaktadır. Bu pathler “Rest API” olarak da isimlendirilmektedir.

Request ve Response Nedir?

İstemcinin belli bir URL path’e method tipleriyle birlikte yaptığı isteklere “Request” denilmektedir. Sunucu, gelen request’leri işleyerek gerekli hesaplamalar sonucunda bir yanıt oluşturur ve istemciye gönderir. Gönderilen yanıt “Response” olarak adlandırılmaktadır.

REST Nedir?

Rest, client-server arasındaki iletişimi HTTP protokolü ile sağlayan mimaridir. Rest mimarisi ile geliştirilen servislere RESTful servisler denilmektedir. RESTful servislerde yapılacak işlemler Http Requestinin tipi ile ilişkili olarak gerçekleşmesi esas alınır.

Örneğin, varolan bir bilgiyi sunucudan almak için GET, yeni bir bilgi oluşturmak için POST, varolan bilgiyi güncellemek için PUT ve sunucudaki bir bilgiyi silmek için DELETE method tipleri kullanılır. Restful servisler Http protokolünü kullandıkları için platform bağımsız çalışırlar. Http protokolünü kullanan bütün istemcilere yanıt verebilirler. Genellikle yanıt formatları JSON, XML,CSV ve HTML olarak görülmektedir.

HTTP Protokolü Nedir?

HTTP(Hypertext Transfer Protocol) platform bağımsız olarak uygulamalara erişim için geliştirilen bir standarttır. Rest mimarisi kullanan servisler Client-Server arasında Http prokolü üzerinden veri alışverişini sağlar. Farklı dillerde ve platformlarda geliştirilmiş yazılımların ortak bir yöntemle haberleşmesini sağlamaktadır. Request ve Response yapıları tanımlanmış, kullanımı oldukça basit bir protokoldür. Oldukça yaygın kullanılmaktadır.

URL Hangi Parçalardan Oluşur?

URL (Uniform Resource Loader- Tekdüzen Kaynak Bulucu) erişmek istediğimiz internet sayfasının veya bir REST API’nın erişim yolunu barındırmaktadır. Request yapılırken isteğe göre URL parçaları değişmektedir. Bu parçaların detayı aşağıda açıklanmıştır.

Bir URL adresi aşağıdaki örnekte verilen parçalardan oluşmaktadır.

http://www.testapi.com:80/api/users?page=2&sort=asc#SomewhereInTheDocument

http:// → Protokol tipidir. Http veya Https opsiyonları mevcuttur. Https, SSL sertifikalı sunucularda kullanılmaktadır. Bütün paketler SSL sertifikası ile uçtan uca şifrelenerek iletilir.

www.testapi.comDomain Name veya IP adresi

:80 → Port: Sunucunun http isteklerine yanıt verdiği HTTP Server Portudur.

/api/users → Path: İstek yapılacak API’nin adres bilgisidir. Port bilgisinden sonraki ‘/’ itibariyle başlamaktadır.

?page=2&sort=asc → Params: Url ile birlikte gönderilen parametre key ve value’larıdır.

#SomewhereInTheDocument → Anchor: Sayfa içerisinde etiketlenmiş konumlar.

HTTP Metodları Nelerdir?

Veri alışverişlerinde Restful servisler HTTP metodları olan GET, POST, PUT, DELETE metodlarını kullanırlar. GET veri okuma, POST veri gönderme, PUT veri güncelleme, DELETE veri silme işlemi için kullanılır. Bu method tipleri genel olarak yukarıda belirttiğimiz işlemler için kullanılsa da bazı istisnai durumlarda developer insiyatifine göre GET işlemi ile bir kayıt oluşturma yada POST işlemi ile bir kayıt silme gibi işlemler yapılabilmektedir.

GET method tipinde URL den verilen bilgiler kullanılarak backend tarafında kayıtlı bir bilgiyi almak için kullanılır. Request Body’si bulunmamaktadır.

POST method tipi ile genellikle backend tarafında yeni bir bilgi göndermek bir kayıt oluşturmak amacıyla kullanılır. Request Body’si bulunmaktadır. Kullanılması opsiyoneldir.

PUT method tipi, kayıtlı bir bilgiyi güncellemek için kullanılır. URL içerisinde güncellenmesi istenen kayda ait id gönderilmesi sıkça rastlanır. URL’de id bilgisi barındırmaması durumunda gerekli bilginin tamamı Body’de gönderilmektedir.

DELETE method tipi, kayıtlı bir bilgiyi backend tarafından silmek için gönderilen request tipidir. Request Body gönderilebilir, fakat genellikle sadece URL içerisinde silinecek bilgiye ait id bilgisi gönderilerek işlem tamamlanmaktadır.

HEADERS

Http isteği yapılırken backend tarafına bir takım bilgiler URL ya da Body dışarısında gönderilmektedir. Bunlar Authorization bilgisi, gönderilen ve talep edilen Body formatı gibi bilgiler olabilmektedir. Test edilen sisteme göre farklı headerlar kullanılabilmektedir. En sık kullanılan headerslardan birkaçı aşağıda kısaca açıklamalarıyla verilmiştir.

Content-Type: Request body’sinde gönderilen veri formatını belirtmektedir. “application/json”, “application/xml” ve “text/plain” değerleri en çok kullanılan değerleridir. Json, Xml veya düz yazı formatında veri gönderdiğimizi belirtmek için kullanılmaktadır.

Content-Length: Body nin barındırdığı karakter uzunluğudur.

Authorization: Kullanıcının API’lere erişmek için yetkisi olup olmadığını karar vermek için backend tarafında bu headerdaki token datası sıkça kullanılır. Kullanıcı, token üreten bir auth server gibi servise kullanıcı adı ve şifresini gönderdikten sonra response içerisinde gelen token bilgisini alıp bu header ile bütün requestlerde göndermektedir. Bu şekilde o kullanıcıya ait erişim yetkileri ve kullanıcı bilgileri elde edilebilir. Bu yapı dışında güvenlik sistemleri de kullanılabilmektedir. Yukarıda anlatılan sadece bu güvenlik yöntemlerinden birisidir. Cookie veya Session bilgisi kullanarak erişim yetkilerine karar veren sistemlerde mevcuttur.

Accept: Backend tarafından kabul edilecek response Body tipini bu header ile xml yada json formatı olarak belirtebiliriz. Değerleri Content-Type header değerleri ile aynıdır.

BODY

Request Body ve Response Body olarak iki çeşit bulunmaktadır. Request Body gönderdiğimiz HTTP isteğinin Body sidir. Response Body ise sunucu tarafından bize gönderilen yanıtın Body sidir.

Response Code

Http istekleri tamamlandıklarında Response code ile birlikte bize bir yanıt gelmektedir. Bu response code’ların standart karşılıkları mevcuttur. Response kodları kontrol ederek isteğin başarılı olup olmadığı hakkında fikir edinebiliriz. Detaylı inceleme için response body içerisini de kontrol etmemiz gereken durumlar olabilir. En sık kullanılan response codelar aşağıda açıklamalarıyla birlikte verilmiştir.

20X->Başarılı 40X-> İstemci tarafında hata 50X-> Sunucu tarafında hata

200: OK

201: Created

204: Not Content

400: Bad Request

401: Unauthorized

404: Not Found

409: Conflict

500: Internal Server Error

503: Service Unavailable

POSTMAN ile Rest API Testleri Oluşturma

User Get Post Put Delete işlemlerini destekleyen bir restful servis testlerini örnek olarak vereceğim. Service kodlarına “https://github.com/tugceakinn/User-CRUD-RESTFUL” linkinden ulaşabilirsiniz.

GET REQUEST

Aşağıda GET isteği yapılan bir örnek görülmektedir. User servisinde bütün kayıtlı kullanıcıları çekmek için “/api/1.0/user” apisine Get Requesti yapıldı. Response Body ekranında JSON formatında bir user kaydının olduğu görülmektedir. Status code 200 OK, Request-Response Time 65ms olduğu görülüyor.

POST Request’ine geçmeden önce bazı bilgiler vermekte fayda var.

Request’e eklemek istenilen parametreler params sekmesinde key value şeklinde doldurulur. Headers kısmında yapılacak olan istekte Content type, Authorization gibi headers bilgileri key value olarak girilir. Body kısmında ise form-data, urlencoded, binary, raw, json,html gibi başlıklar görülmektedir. Tests bölümünde ise yapılmak istenilen testler yazılır.

POST REQUEST

Bir User nesnesini servis database’ine kaydetmek için POST requestini kullanacağız. “/api/1.0/user” pathine Post requesti göndererek json formatında user datasını gönderdiğimizde User servisi kayıt işlemini gerçekleştirir. Oluşturulacak User nesnesinin property’leri Request body içerisinde gürülmektedir. Kayıt işlemini tamamladıktan sonra backend servisi 201 Created status kodunu göndererek response body içerisinde kaydettiği user modelini json formatında bize göndermektedir.

PUT REQUEST

User sevisinde kayıtlı bir user modelini güncellemek için “/api/1.0/user/{username}” pathine username yerine güncellenmek istenen User modelinin username bilgisi gelecek şekilde request body içerisinde güncel user bilgisi json formatında gönderilir. Url path’de verilen username bilgisi ile user sistemde bulunup body içerisinde verilen property’ler güncellenerek veritabanına kaydedilir. Kayıt edilmiş güncel hali response body içerisinde gönderilmektedir.

DELETE REQUEST

User servisinde kayıtlı bir user nensnesini silmek için “/api/1.0/user/{username}” patihnme silinmek istenen user’a ait username bilgisi url pathde yer alacak şekilde DELETE requesti yaptığımızda servis url path’de verilen username bilgisine sahip user nesnesini bulup veritabanından silmektedir. Silme işleminin sonucunda 204 Not Content status kodu ile boş reponse body göndermektedir.

Chrome Inspect Kullanarak Rest API Testi Oluşturma

Çalışan bir web client’tan Chrome web tarayıcısının inspect aracını kullanarak örnek bir API testini oluşturma işlemine bakalım. Rest API testi yapılacak Web sitesine girdiğimizde boş bir alana sağ tıklayıp “Inspect/Incele” seçeneğine tıklanır. Daha sonra çıkan ekranda aşağıda görüldüğü gibi Elements, Console, Sources, Network, Performance, Memory, Application, Security gibi sekmeleri görebilirsiniz. Gelip giden paketleri görmek için “Network” sekmesini kullanacağız. Sol taraftaki listede bütün gelip giden paketleri görebilmekteyiz. Bu paketleri filtrelemek ve sadece Rest Requestler görmek için “XHR” seçilir. Web Socket bağlantılarını da görmek isteniyorsa “WS” de eklenerek filtrelemeye dahil edilir. Sol tarafta listelenen Rest requestlerden bir tanesi seçilir ve detaylar için “Headers” sekmesine geçilir.

General Headers başlığının altında gördüğümüz başlıklar ve açıklamalar:

Request URL: Rest request yapılan API’ye ait URL bilgisini içermektedir.

Request Method: Rest request tipi görülür.

Status Code: Requestin sunucudan aldığı yanıtı temsil eden response code değeridir.

Remote Address: Request yaptığımız sunucunun ip ve port bilgisini içermektedir.

Request Headers:Önemli alt başlıkları:

Accept: Veri formatının nasıl kabul edileceğini belirler.

Content-Length: Request Body uzunluğu

Content-Type: Request Body formatı

Cookie: User oturum bilgileri

Host: Requestin yapıldığı server

Origin: Requesti oluşturan client

Form Data/Request Payload

Request Body içerisindeki metin

.

.

KAYNAKÇA

https://ivanzramadhanz.blogspot.com/2016/07/instalasi-web-server-dan-database.html

https://pt.dreamstime.com/ilustra%C3%A7%C3%A3o-stock-conceito-seguro-do-servidor-de-dados-image77736972

--

--