Skip to content

Add support for behavior on undefined query parameters #142

Description

@ahenket

Roaster ignores query parameters. If you want to explicitly send a client error on undefined query parameters, you could write some middleware. It would be nicer if you could make it explicit using the OpenAPI definition.

Propose to add support for x-allow-unknown-query-parameters as boolean under the method. Default value = true

Support could look like:

declare function parameters:in-request ($request as map(*), $response as map(*)) as map(*)+ {
    if (not(map:contains($request?config, "parameters")))
    then ($request, $response) (: route expects no parameters, return request unchanged :)
    else if (not($request?config?parameters instance of array(*)))
    then error($errors:OPERATION, "Parameter definition must be an array: " || $request?pattern, $request)
    else (
        let $errorUnknownParams := 
            exists($request?config?x-allow-unknown-query-parameters[. = false()])
        let $unsupported-params := 
            if ($errorUnknownParams) then 
                request:get-parameter-names()[not(. = $request?config?parameters?*[?in = "query"]?name)] 
            else ()
        let $unsupported-params := 
            if (empty($unsupported-params)) then () else (
                error($errors:BAD_REQUEST, "Unsupported parameter(s): " || string-join($unsupported-params, ', '))
            )
        
        let $maps := for-each($request?config?parameters?*, parameters:retrieve#1)

        (: extend previous parameters map with new values :)
        let $merged := map:merge(($request?parameters, $maps))

        return (
            map:put($request, "parameters", $merged),
            $response
        )
    )
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions