akka/akka-http

Support for Query Parameter Flags

Aberta

#2.171 aberto em 22 de ago. de 2018

 (2 comentários) (3 reações) (0 responsável)Scala (598 forks)batch import
1 - triagedhelp wantednice-to-have (low-prio)t:routingt:server

Métricas do repositório

Stars
 (1.311 estrelas)
Métricas de merge de PR
 (Mesclagem média 1d 10h) (2 fundiu PRs em 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?

Guia do colaborador