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?

贡献者指南