Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın Türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi

0
API'lere gelen requestleri nasıl kontrollerden geçirirsiniz?

Açık 1 Cevaplar 40 Gösterim Genel Kavramlar
Bir API yazdığınızı düşünürsek, API'lere gelen requestleri nasıl kontrollerden geçirirsiniz?
3Yorumlar
(5.1k puan)
"Kontrolden geçirmek" derken kastın nedir?

Belirli şartlara göre uygunluğunu kontrol etmek yani validasyon yapmak mı?

Hangi dil ve hangi framework'u kullanıyorsun?
(167 puan)
taşındı
Bir REST API yazdığımızı düşünelim ve api endpointler sayesinde sizin resourcelarınıza ulaşmaya çalışacaklar. Dediğiniz gibi requestin uygunluğu ve validasyonu nasıl yapılmalı, ne gibi yapılar kullanılıyor?
(5.1k puan)
Sorulara devam ettiğin sürece bunu yorum olarak yazarsan okuması daha kolay olur :) Şimdi cevabına geçelim.

1 cevap

0

Kullandığın programlama diline ve framework bazında değişir.

Old school mantıkla başlayalım.

Herşeyi kendin yapabilirsin. Controller kodunun başında daha gidip if satırlarını sıralayıp bakabilirsin. Biraz zahmetli. Ama bütün dillerde her zaman kullanılabilir. Kesin çözüm.

Biraz daha güzeline bakalım

Mesela Java/Spring ikilisini kullandığını varsayalım. JSR 380 diye bir standard var. Basit validasyonlar için bunu kullanabilirsin. Gerçi bunu kullandıkça sanıyorum dah gelişmiş kullanımlarını da öğreneceksindir. Ama örnek verelim.

import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.constraints.Email;
	 
public class User {
 
    @NotNull(message = "Name cannot be null")
    private String name;
 
    @AssertTrue
    private boolean working;
 
    @Size(min = 10, max = 200, message 
      = "About Me must be between 10 and 200 characters")
    private String aboutMe;
 
    @Min(value = 18, message = "Age should not be less than 18")
    @Max(value = 150, message = "Age should not be greater than 150")
    private int age;
 
    @Email(message = "Email should be valid")
    private String email;
 
    // standard setters and getters 
}

Bu mesela bir User sınıfı burada gördüğün annotation kullanımı bahsettiğim standard üzerinde belirlenmiş. Temel işlemler için çok da kullanışlı oluyor. Bu sınıfı nasıl valide edeceksin, hemen o kısma bakalım. Controller üzerindeki metodunun ilk satırında aşağıdaki gibi kontrol edebilirsin.

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();

Set<ConstraintViolation<User>> violations = validator.validate(user);
for (ConstraintViolation<User> violation : violations) {
   log.error(violation.getMessage()); 
}

Normalde bu standardı Spring kendisi de kontrol ediyor olması lazım ma bunu springe bıraktığım zaman sanki herşeyine erişemiyorum gibi hissediyorum şahsen. Neyse JSR 380 spring kullanımı gibi arattırabilirsin. Unutmaman gereken jsr380 standardını gerçekleştiren bir kütüphaneyi pom/classpath içine eklemen lazım. Sanıyorum en fazla hibernate kullanılıyor. Ya da ben hep öyle gördüm.

Bu kadar java yeter herhalde.

Bir de başka bir dilde inceleyelim. Mesela benim biraz bilgili olduğum php.

Laravel kullanırken https://laravel.com/docs/8.x/validation bu linke bi bakabilirsin ki gayet güzel anlatır. Kısaca aşağıdaki koda bakalım

Validator::make($request->all(), [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
])->validate('post');

Burada yaptığı request içinde title ve body alanlarının olduğunu ve bunların nasıl olduğunu tanımlıyor. Eğer hata varsa ekrana yansıtmak için de aşağıaki kodu kullanıyor.

$errors = $validator->errors();

Eğer biraz daha kodunu parçalamak istersen request nesneleri oluşturup validation kısmını içine de atabilirsin.

Aslında temel olarak anlaman gereken kullandığın framework yapısını biraz anlaman gerekir. Bütün framework yapıları validation kısmına sahiptir sanıyorum.

Ya da eski ekol if yazmaya devam.

 

(5.1k puan)