search
Giriş
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 oy
720 gösterim
Bir API yazdığınızı düşünürsek, API'lere gelen requestleri nasıl kontrollerden geçirirsiniz?
Genel Kavramlar kategorisinde 167 puan
yeniden etikenlendirildi
"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?
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?
Sorulara devam ettiğin sürece bunu yorum olarak yazarsan okuması daha kolay olur :) Şimdi cevabına geçelim.

1 cevap

0 oy

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.

 

6.2k puan

İlgili sorular

0 oy
1 cevap 694 gösterim
694 gösterim
API Gateway nedir?
15 Eylül 2020 Genel Kavramlar kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 1.4K gösterim
1.4K gösterim
Kütüphanelerin yazılımcılara kod tekrarının önüne geçme amacıyla yazılmış kod yığınları diye biliyorum. Yazılımcıların kütüphanelere doğrudan erişim olurken, API ise bu kütüphanelere bir ara yüz ile doğrudan değilde dolaylı yoldan erişilmesini sağlıyor diye ... api kullanmıyoruz? Hangi durumda library hangi durumda api yazılmalı/ kullanılmalıdır anlamaya çalışıyorum. Yardımcı olur musunuz?
12 Şubat 2019 Genel Kavramlar kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 1.3K gösterim
1.3K gösterim 25 Nisan 2017 Genel Kavramlar kategorisinde Semih 120 puan sordu
0 oy
1 cevap 1K gösterim
1K gösterim
Programlama ile alakalı araştırma yaparken çeşitli sitelerde API kavramı ile karşılaşıyorum. Tam olarak ne anlama geliyor?
24 Ekim 2016 Genel Kavramlar kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 480 gösterim
480 gösterim
Php içinde bir linkim var, örneğin: localhost:80/public/index.php ben direk olarak localhost:80/ yazılınca public/index.php çalışsın istiyorum nasıl yapabilirim.
25 Nisan 2018 Php kategorisinde kenan 6.2k puan sordu