akka/akka-http

Support for Query Parameter Flags

開放

#2,171 建立於 2018年8月22日

 (2 則留言) (3 個反應) (0 位負責人)Scala (598 個分叉)batch import
1 - triagedhelp wantednice-to-have (low-prio)t:routingt:server

倉庫指標

星標
 (1,311 顆星)
PR 合併指標
 (平均合併 1天 10小時) (30 天內合併 2 個 PR)

描述

Perhaps I'm missing something obvious, but what I'd like is to have a route that refines some API behavior based on the presence or value of a query parameter.

For example

// These do a dry-run
https://example.com/submit?dryrun
https://example.com/submit?dryrun=true
https://example.com/submit?dryrun=yes
https://example.com/submit?dryrun=1

// These do the real thing
https://example.com/submit
https://example.com/submit?dryrun=false
https://example.com/submit?dryrun=no
https://example.com/submit?dryrun=0

Unfortunately, I haven't found a clean way of using the built-in directives:

// Breaks /submit?dryrun
parameter('dryrun.as[Boolean] ? false)

// Breaks /submit
parameter('dryrun.as[Boolean] ? true)

The best I've come up with is my own directive, which you all can probably improve on:

def parameterFlag(name: Symbol): Directive1[Boolean] =
  (parameter(name.?) & parameter(name.as[Boolean] ? true)) tmap {
    case(flag, isTruthy) => flag.isDefined && isTruthy
  }

parameterFlag('dryrun)

Thoughts?

貢獻者指南