Rest Servis Best Practises 2

1.289

Okumadıysanız öncelikle Rest Servis Best Practises başlığı altındaki ilk makaleyi okumanızı öneririm.

Rest Servislerin kullanıldığı birçok projede post ve put metodlarının birbiri yerine kullanıldığı görülmektedir. Birbirleri yerine kullanılmaları çok büyük sorun olarak görülmese de yapılan işlemin bir şekilde tekrar edilmesi durumunda sorunlar orta çıkabilir. Gelin tekrarlı durumu biraz da matemetikten yardım alarak birlikte inceleyelim.

HTTP Metotlar iki başlık altından incelenirler.

  • Yapısal durumlarına göre yani veri üzerinde yaptıkları işlemlere göre ve
  • Tekrar tekrar çalıştırıldıklarında yaptıkları işlemlere incelenirler.

Yapısal Durum

  1. GET, sadece okuma yapar, değişiklik yapamaz.
  2. PUT, POST, DELETE veri üzerinde değişiklik yapabilirler.

Tekralanma Durumu

Metodları tekrarlanabilir ya da tekrarlanamaz olarak inceler.

  • Bunun için matematikten biraz yardım alalım.

Idempotency

Idempotent; Matematik ve bilgisayar biliminde bir fonksiyonun bir defa uygulanması ile birden fazla uygulanması sonucu değiştirmiyor ise bu fonksiyon Idempotent’dir denilir.

Burada bir metodun bir defa çağrılması ile birden fazla çağrılması veriyi değiştiriyor mu değiştirmiyor mu sorusuna cevap aranmaktadır. Bu soruya verilen cevaba bağlı olarak metodların kullanımı veri güvenliğini garanti edecek ya da verilerin bozulmasına neden olacaktır.

Get Metot

İstenildiği kadar tekrar gönderilsin veri değişikliğe uğramaz. Bu durumda get metot,

• Tekrarlanabilir.

Delete Metot

Delete metodu /messages/55 ifadesi ile çağrıldığında id=55 değerine sahip mesajı silecektir. Bu çağrı tekrar yapıldığında id=55 değerine sahip bir mesaj olmayacağından herhangi bir silme işlemi yapılmayacaktır. Yani verilerde bozulma olmayacaktır. O zaman bu operasyonda tekrarlanabilir, yani tekrarlanması güven ortamını bozmaz. Bu tekrarlamalar bilerek olacak diye bir şey yok yanlışlık aynı request tekrar gönderilebilir. Bu durumda delete metot,

• Tekrarlanabilir.

Put Metot

Put metodu /messages/550 ifadesi ile çağrıldığında id=550 değerine sahip mesaj içeriğini değiştirecektir. Yani güncelleyecektir. Bu metodun tekrarlanması da veri bozulmasına neden olmayacaktır. id=550 değerine yapılan çağrı hiçbir değişikliğe uğramadan tekrarlandığında sürekli aynı veri eklenecektir. Yani mesaj sürekli aynı veri ile güncellenecektir. O zaman bu operasyonda tekrarlanabilir, yani tekrarlanması güven ortamını bozmaz. Bu duruna put metot,

• Tekrarlanabilir.

Post Metot

Post metodu /messages ifadesi ile çağrıldığında yeni mesaj yaratılmaktadır. Burada yanlışlıkla yapılacak bir tekrarlama işlemi ile aynı mesajdan bir tane daha hatta tekrarlandığı kadar yaratılacaktır. Bu da bu operasyon tekrarlanamaz demektir, tekrarlanması güven ortamını yani veri güvenliğini bozar. Birden çok mesaj yaratma ihtiyacı yok ise bu metod tekrarlanmamalıdır. Bu durumda post metot,

• Tekrarlanamaz.

Bu tanımlamalara göre
get, delete ve put metotları idempotent metottur.
post ise non-idempotent metottur.

PUT ve POST metodları arasındaki farkı bu durum belirlemektedir.

  • Yeni veri yaratma işleminin POST ile yapılmasında yarar vardır.
    • Güncelleme işlemi ise PUT ile yapılmalıdır.

Put – Post aynı işlemleri yapabildiklerinden birbirleri yerlerine kullanılmaları durumunda bazı karışıklıklar çıkabilir. Client, serveri tam anlayamayabilir. Put, Post ayrımında kafası karışabilir. Anlamlı veriye en kolay yoldan ulaşmak önemlidir. Bu nedenler metodlar yerli yerinde kullanılmalıdırlar.

Diğer dikkat çekici bir nokta ise post metod çalıştırıldığında her browser alarma geçer ve dikkatli olmaya çalışır. Örneğin bir mesaj yaratılıyorken browser uyarı verir. Bu içeriği daha önce göndermiştiniz, tekrar göndermek istediğinize emin misiniz diye sorar. Bu da clienti korumaya yönelik bir durumdur. Put gönderide browser bu güvenliği clienta sağlamayacaktır.

Kaynak : Enterprise Java

Yorum yaz

Email adresiniz yayınlanmayacaktır.