Skip to content

Latest commit

 

History

History
141 lines (72 loc) · 5.84 KB

ScalaRouting.md

File metadata and controls

141 lines (72 loc) · 5.84 KB

HTTP yönlendirme

Yerleşik HTTP router

Router gelen her HTTP isteğini bir Action'a dönüştüren bileşendir.

Bir HTTP isteği MVC çatısı tarafından bir olay olarak görülür. Bu olay iki önemli bilgi parçası içerir:

  • query string de dahil olmak üzere istek yolu (örneğin /clients/1542, /photos/list)
  • HTTP metodu (GET, POST, vb.)

Yönlendirmeler conf/routes dosyasında tanımlanmıştır. Bu dosya da derlenen bir dosyadır. Bu nedenle yönlendirme hatalarını doğrudan tarayıcınızda görürsünüz:

[[images/routesError.png]]

routes dosyası sözdizimi

conf/routes router tarafından kullanılan ayar dosyasıdır. Bu dosya uygulama tarafından ihtiyaç duyulan bütün yönlendirmeleri listeler. Her yönlendirme bir HTTP metodu ve URI deseninden oluşur ve bir Action üretici ile ilişkilidir.

Bir yönlendirme tanımının neye benzediğine bir bakalım:

@clients-show

Her yönlendirme bir HTTP metodu ile başlar ve URI deseni ile devam eder. Son eleman ise action çağrısı tanımıdır.

routes dosyasına # karakteri ile yorum satırları ekleyebilirsiniz.

@clients-show-comment

HTTP metodu

HTTP metodu HTTP tarafından desteklenen metodlardan herhangi biri olabilir (GET, POST, PUT, DELETE, HEAD).

URI deseni

URI deseni yönlendirmenin istek yolunu tanımlar. İstek yolunun belli kısımları değişken olabilir.

Sabit yol

Örneğin gelen GET /clients/all isteğini yakalamak için aşağıdaki yönlendirmeyi tanımlayabilirsiniz:

@static-path

Değişken kısımlar

Eğer bir kaynağı ID ile getiren bir yönlendirme tanımlamak isterseniz değişken bir kısım eklemeniz gerekir:

@clients-show

URI deseninin birden fazla değişken kısmı olabileceğini unutmayın.

Bir değişken kısım için varsayılan kısım eşleme stratejisi şu düzenli ifade ile tanımlanır: [^/]+. Bu, :id şeklinde tanımlanan bir değişken kısmın yalnız bir URI kısmına eşleneceği anlamına gelir.

Birden fazla / içeren değişken kısımlar

Eğer bir değişken kısmın / ile ayrılan birden fazla URI yol kısmını yakalamasını isterseniz, .+ düzenli ifadesini kullanan *id sözdizimini kullanarak bir değişken kısım tanımlayabilirsiniz:

@spanning-path

Burada GET /files/images/logo.png gibi bir istek için değişken kısım images/logo.png değerini yakalayacaktır.

Özel düzenli ifadeler ile değişken kısımlar

Değişken kısım için $id<regex> sözdizimini kullanarak kendi düzenli ifadenizi de tanımlayabilirsiniz:

@regex-path

Action üretici metodu çağırma

Yönlendirme tanımının son kısmı çağrı kısmıdır. Bu kısım bir play.api.mvc.Action değeri döndüren bir metoda geçerli bir çağrı tanımlamalıdır. Bu tanım doğal olarak bir controller action metodu olacaktır.

Eğer metot hiçbir parametre tanımlamıyorsa yalnızca tam metot adını vermeniz yeterlidir:

@home-page

Eğer action metodu bazı parametreler tanımlıyorsa tüm bu parametreler istek URI içerisinde aranacak ve doğrudan URI yolundan ya da query string'inden elde edilecektir.

@page

Ya da:

@page

Aşağıda buna karşılık gelen controllers.Application controller'ındaki show metot tanımı bulunuyor.

@show-page-action

Parametre türleri

String türündeki parametreler için parametre türünü yazmaya gerek yoktur. Eğer Play'in gelen parametreyi belirli bir Scala türüne dönüştürmesini istiyorsanız bir tür belirtebilirsiniz:

@clients-show

Ve aynısını karşılık gelen controllers.Clients controller'ındaki show metodu için de yapmalısınız:

@show-client-action

Sabit değerli parametreler

Bazen bir parametre için sabit bir değer belirtmek isteyebilirsiniz:

@page

Varsayılan değerli parametreler

Ayrıca gelen istekte bir değer bulunamadığında kullanılacak varsayılan bir değer belirtebilirsiniz:

@clients

Seçimli parametreler

Tüm isteklerde bulunması zorunlu olmayan seçimli bir parametre de tanımlayabilirsiniz:

@optional

Yönlendirme önceliği

Farklı yönledirmeler aynı istekle eşleşebilir. Eğer bir çakışma varsa ilk yönlendirme (tanım sırasına göre) kullanılır.

Tersine yönlendirme

Router ayrıca bir Scala çağrısından bir URL oluşturmak için de kullanılabilir. Bu yöntem tüm URI desenlerinizin ortak bir ayar dosyasında bulunmasını sağlar. Böylece uygulamanızı daha güvenle yeniden düzenleyebilirsiniz.

routes dosyasında belirtilen her bir controller için router routes paketinde bir ‘reverse controller’ oluşturur. Bu controller da aynı imza ile aynı action metotlarına sahiptir. Fakat bu action metotlar play.api.mvc.Action yerine play.api.mvc.Call döndürürler.

play.api.mvc.Call bir HTTP çağrısı tanımlayarak bir HTTP metodu ile bir URI belirtir.

Örneğin aşağıdaki gibi bir controller oluşturursanız:

@reverse-controller

Ve conf/routes dosyasında şöyle eşlerseniz:

@route

hello action metoduna giden URL'i controllers.routes.Application reverse controller'ı kullanarak elde edebilirsiniz:

@reverse-router

Sonraki: [[Yanıtları işlemek | ScalaResults]]