< Home

Rest Servis Standartları

Posted on 6 August 2019

Idempotent Nedir?

Bir HTTP request endpointe her ulaştığında sistem üzerinde bir değişikliğe sebep olmuyorsa idempotent’dir.

Örneğin bir DELETE metodunun endpointe geldiğini varsayalım.

DELETE /trade/4e3e341e-af72–11e9-a2a3–2a2ae2dbcce4

Bu işlem sonucunda ID’si 4e3e341e-af72–11e9-a2a3–2a2ae2dbcce4 olan kayıt silinecektir. Aynı istek tekrar gönderildiği zaman sistemde herhangi bir state değişikliğe sebep olmayacaktır.

HTTP Request Metotları

GET

GET metodu kayıtların read işlemleri için kullanılan HTTP request metodudur. İstek endpointe her geldiğinde sistem üstünde herhangi bir değişikliğe sebep olmaz.

POST

POST yeni bir kayıt oluşturmak için kullanılmaktadır. Aynı HTTP POST isteği aynı endpointe her geldiğinde yeni bir kayıt oluşturacaktır.

PUT

PUT bir kaydı varsa günceller, yoksa yenisini oluştur. Eğer aynı put isteği arka arkaya yapılırsa sistem üstünde herhangi bir state değişikliğine sebep olmayacaktır. Bu yüzden idempotent olarak kabul edilir.

DELETE

DELETE bir kaydın silinmesinde kullanılan HTTP request metodudur. İstek arka arkaya geldiği zaman sistem üstünde herhangi bir state değişikliğine sebebiyet vermez.

PATCH

PATCH verinin bir kısmının güncellenmesi isteniyorsa kullanılabilir HTTP metodudur. Idempotent’lik durumu ise yazılacak olan akışa göre değişebilmektedir. Daha açık olmak gerekirse PATCH’i idempotent yapabileceğimiz gibi non-idempotent de yapabiliriz. Literatürde PATCH non-idempotent geçmektedir. Eğer PATCH ile gelinen servis bir iterasyona sebep oluyorsa bu durumda non-idempotent yapıdadır. Eğer sabit bir alanın güncellenmesi işlemini yapıyorsa bu durumda idempotent olarak kabul edilmektedir.

HTTP Response Code

200 OK : GET PUT DELETE sonucunda sunucuya giden isteğin başarılı olduğunu gösterir.

201 Created : POST sonucunda yeni bir kayıt oluşturulduğu bilgisini döner.

202 Accepted : Eğer POST ve DELETE ulaştı ancak henüz commitlenmediyse döner.

204 No Content : DELETE sonucunda eğer herhangi bir kayıt silinmemişse dönecektir.

400 Bad Request : İsteğin (request) uygun olmadığı durumlarda döner. Örneğin sizin yazdığınız servis POST metodunu beklerken siz PUT ile işlem yapmaya çalıştığınızda alacağınız hata 400 Bad Request olacaktır.

401 Unauthorized : Bu endpointe erişiminizin olmadığını, yetkisiz erişim yapmayı denediğinizi gösterir. Kullanılan authentication bilgilerinin yanlış olması durumunda döner.

403 Forbidden : İlgili endpointe erişim yetkiniz olmadığı durumda dönecektir. Authentication bilgileriniz doğrudur ancak erişiminiz kısıtlanmıştır.

404 Not Found : İlgili kaynağın erişilemez olduğu durumda dönecektir.

410 Gone : Endpointin artık var olmadığını göstermektedir.

404 ve 410 arasındaki fark : 404 artık bu endpointte olmadığını ama başka bir yerde olduğunu ifade eder. 410 ise artık bu endpointin hiç bir şekilde kullanılmayacağını belirtir.

500 Internal Server Error : Server üstünde bir hata olduğunu belirtir. İstek valid ama sunucu tarafında hata alındığı durumda ortaya çıkar.

503 Service Unavailable : Endpointin ayakta olmadığını belirtir. Genellikle bakım çalışmalarında, sürümlemelerde response olarak alınır.

Endpoint Standartları

Fiiler değil isimler tercih edilmelidir.

Örneğin bir kredi kullandırım işleminde olası pathler aşağıdaki şekilde olacaktır.

GET /banking/credit/application :Tüm kredi başvurularını getirir.

GET /banking/credit/application/cbd8b6f3-e8df-478a-9202-b77044e45248 : Mevcut kredi detaylarını getirir.

POST /banking/credit/application : Yeni başvuru işlemi için

PUT /banking/credit/application : Mevcut başvuruyu varsa güncelle yoksa yeniden oluştur.

PATCH /banking/credit/application/cbd8b6f3-e8df-478a-9202-b77044e45248 : Mevcut kredinin ilgili alanlarını günceller.

DELETE /banking/credit/application/cbd8b6f3-e8df-478a-9202-b77044e45248 : Mevcut kredi başvurusunu siler.