Documentation

You are viewing the documentation for the 2.3.x release series. The latest stable release series is 2.4.x.

§İçerik müzakeresi

İçerik müzakeresi aynı kaynağın (URI) farklı görünümlerini sunabilmeyi mümkün kılan bir mekanizmadır. Değişik biçimlerde (XML, JSON, vb.) çıktı veren Web Servisleri yazmak için kullanılabilir. Sunucu-sürülen müzakere temel olarak Accept* istek başlıkları kullanılarak gerçekleştirilir. HTTP specification içerisinde içerik müzakeresi hakkında daha fazla bilgiye ulaşabilirsiniz.

§Dil

Bir istek için kabul edilen dillerin listesini, bu dilleri Accept-Language başlığından çıkaran ve onları kalite değerlerine göre sıralayan play.api.mvc.RequestHeader#acceptLanguages metodunu kullanarak elde edebilirsiniz. Play bunu play.api.mvc.Controller#lang metodunda kullanır. Bu metod action’larınızın en iyi dili kullanmaları için örtük bir play.api.i18n.Lang sağlar (eğer uygulamanız tarafından destekleniyorsa, aksi halde uygulamanın varsayılan dili kullanılır).

§İçerik

Benzer şekilde play.api.mvc.RequestHeader#acceptedTypes metodu bir istek için kabul edilen yanıt MIME türlerini verir. Bu türleri Accept istek başlığından alır ve onları kalite faktörlerine göre sıralar.

Aslında Accept başlığı gerçekten MIME türleri barındırmak yerine medya aralıkları içerir (örneğin tüm metin yanıtlarını kabul eden bir istek text/* aralığını setleyebilir; */* aralığı tüm yanıt türleri kabul edilir anlamına gelir). Controller’lar medya aralıklarını yönetmeniz için yüksek seviyeli bir render metodu sunar. Örnek olarak aşağıdaki action tanımını inceleyin:

val list = Action { implicit request =>
  val items = Item.findAll
  render {
    case Accepts.Html() => Ok(views.html.list(items))
    case Accepts.Json() => Ok(Json.toJson(items))
  }
}

Accepts.Html() ve Accepts.Json() verilen medya aralığının sırasıyla text/html ve application/json ile eşleştiğini test eden çıkarıcılardır. render metodu play.api.http.MediaRange’ten play.api.mvc.Result’a bir kısmi fonksiyon alır ve onu isteğin Accept başlığında bulunan her bir medya aralığı için tercih sırasına göre uygulamaya çalışır. Eğer kabul edilen medya aralıklarından hiçbiri fonksiyonunuz tarafından desteklenmiyorsa NotAcceptable yanıtı döndürülür.

Örneğin bir istemci Accept başlığında */*;q=0.5,application/json değeri ile bir istek yaptığında ki bu tüm yanıt türlerini kabul ettiği fakat JSON tercih ettiği anlamına gelir, yukarıdaki kod JSON görünümünü döndürecektir. Eğer başka bir istemci Accept başlığı için yalnızca XML kabul ettiğini belirten application/xml değerini kullanırsa yukarıdaki kod NotAcceptable döndürür.

§İstek çıkarıcılar

Play tarafından render metodunda dahili olarak desteklenen MIME türlerinin bir listesine erişmek için play.api.mvc.AcceptExtractors.Accepts nesnesinin API dokümantasyonuna bakınız. İstediğiniz MIME türü için play.api.mvc.Accepting case class’ını kullanarak kolayca kendi çıkarıcınızı yazabilirsiniz. Örneğin aşağıdaki kod audio/mp3 MIME türü ile eşleşen medya aralıklarını test eden bir çıkarıcı yaratır:

  val AcceptsMp3 = Accepting("audio/mp3")
  render {
    case AcceptsMp3() => ???
  }
}

Sonraki: Asenkron HTTP programlama


Dokümantasyonun bu çevirisi Play ekibi tarafından yapılmamaktadır. Eğer bir hata bulduysanız, bu sayfanın kaynak kodu burada bulunmaktadır. Dokümantasyon yönergelerini okuduktan sonra lütfen katkı yapmaktan çekinmeyin.