Skip to content

Instantly share code, notes, and snippets.

@takungsk
Created April 8, 2012 16:07
Show Gist options
  • Save takungsk/2338185 to your computer and use it in GitHub Desktop.
Save takungsk/2338185 to your computer and use it in GitHub Desktop.
Dispatch の Request と Handler

Dispatch の Request と Handler

##Request RequestはHTTPアクセスに必要な情報を持っています。

どのような値が設定されているか確認するには、次のメソッド(変数)で確認します。

class Request {
  val body: Option[HttpEntity]
  val creds: Option[Credentials]
  val headers: Headers
  val host: HttpHost
  val method: String
  val path: String
}

####Constructor

  • /\
    EmptyのRequestを作成します。

  • :/(host, port)
    hostドメインとportからRequestを作成します。 hostは www.dlrowb.com の形で指定します。 Request.hostが http://host:port となります。

  • :/(host)
    hostドメインからRequestを作成します。 portの無いバージョンです。

  • /(path)
    pathからRequestを作成します。 pathは /foo/bar の形で指定します。 Request.pathが/pathとなります。 Request.hostは設定されません。

  • url(url)
    urlからRequestを作成します。 urlは http://host/path の形で指定します。 Request.hostが http://host となります。 Request.pathが/pathとなります。

####Path

  • <<?(values)
    Request.pathにパラメータを追加します。 valuesにはMap(“key1″ -> “value1″, “key2″ -> “value2″)の形で指定します。 Request.pathは/xxx/?key1=value1&key2=value2となります。

  • /(path)
    pathを追加します。 Request.pathが/xxx/pathとなります。

####Content

  • <<<(text)
    textをRequest.bodyに追加します。 Request.methodをPUTに変更します。

  • <<<(file, content_type)
    content_typeを指定したfileをRequest.bodyに追加します。 content_typeはtext/html、application/pdfのように指定します。 Request.methodをPUTに変更します。

  • <<<(values)
    valuesをurlエンコードし、Request.bodyに追加します。 valuesはMap(“key” -> “value”)の形で指定します。 Request.methodをPUTに変更します。

####Transform

  • <:<(map)
    mapはMap(“key” -> “value”)の形で指定します。 Request.headersに(key, value)を追加します。

  • as(user, password)
    basic認証もしくはdigest認証を行うように設定します。 Request.credsにSome(Credentials(user,password))を設定します。

  • as_!(user, password)
    basic認証のときに401レスポンスを待ちません。 Request.credsにSome(Credentials(user,password))を設定します。

  • gzip
    Request.headersに(Accept-Encoding,gzip)を追加します。 (HTTP応答がgzip圧縮されます。)

  • POST
    Request.methodをPOSTにします。

  • PUT
    Request.methodをPUTにします。

  • DELETE
    Request.methodをDELETEにします。

  • HEAD
    Request.methodをHEADにします。

####Misc

  • secure
    SSL通信を有効にします。 Request.hostを@https://…にします

  • <&(request)
    requestに指定したRequestと統合します。 引数のrequestが優先されます。

  • >\(charset)
    character setをcharsetで指定したものに変更します。

  • to_uri
    hostとpathからuriを返します。

##Handler Handlerは通信により得られたデータを処理する方法を提供します。 RAWデータ、文字列データ、HTMLデータ、XMLデータ、JSONデータなどレスポンスタイプ毎に異なる型の記述方法(演算子)が用意されています。

####Function

  • >>((in, charset) => result)
    charsetを変更した入力を、in: java.io.InputStreamとして引数に取ります。

  • >>((in) => result)
    in: java.io.InputStreamとして引数に取ります。

  • >~((source) => result)
    source: scala.io.Sourceとして引数に取ります。

  • >-((text) => result)
    text: Stringとして引数に取ります。

  • >>~((reader) => result)
    reader: java.io.Readerとして引数に取ります。

  • <>((elem) => result)
    elem: xml.Elem(XML)として引数に取ります。

  • </>((nodeseq) => result)
    nodeseq: xml.NodeSeq(XHTML)として引数に取ります。 dispatch.XhtmlParsingをインポートする必要があります。

  • >#((json) => result)
    json: dispatch.json.JsValueとして引数に取ります。 (この機能を使う場合、dispatch.jsonとdispatch.json.JsHttpをimportする必要があります。)

  • >|
    入力を捨てます。

####Method

  • ~>((conversion) => result)
    Handler[T]型の結果Tについて処理を行い、結果Rを返します。

  • >!(listener)
    ExceptionListenerを追加します。

####Misc

  • as_source
    >~ {s => s} と同じです。

  • as_str
    >- {t => t} と同じです。

  • >>>(out)
    out: java.io.OutputStreamとして >> {in => out} と同じです。 (適切に変換されると仮定しています)

  • >:>((map) => result)
    map: Map[String,Set[String]]型のレスポンスヘッダを引数に取ります。

  • >+(block)
    blockはr: Requestを取り、(h1: Handler, h2: Handler)の二つのHandlerを返り型に取ります。 同一のリクエストに対して、二つの異なる処理を行う場合に使います。

  • >+>(block)
    blockはr: Requestを取り、Hanlder[Hanlder[T]]を返り型に取ります。 二つのHandlerを順番に処理します。

##Document API
Periodic Table of Dispatch Operators
参考BLOG "B_____ World""

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment