akka/akka-http

Support for Query Parameter Flags

Open

#2,171 opened on Aug 22, 2018

View on GitHub
 (2 comments) (3 reactions) (0 assignees)Scala (598 forks)batch import
1 - triagedhelp wantednice-to-have (low-prio)t:routingt:server

Repository metrics

Stars
 (1,311 stars)
PR merge metrics
 (Avg merge 1d 10h) (2 merged PRs in 30d)

Description

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?

Contributor guide