The library library(http/http_parameters) provides two 
predicates to fetch HTTP request parameters as a type-checked list 
easily. The library transparently handles both GET and POST requests. It 
builds on top of the low-level request representation described in
section 3.13.
If a parameter is missing the exception
error( 
is thrown which. If the argument cannot be converted to the requested 
type, a
existence_error(http_parameter, Name), _)error( is 
raised, where the error context indicates the HTTP parameter. If not 
caught, the server translates both errors into a existence_error(Type, Value), _)400 Bad request 
HTTP message.
Options fall into three categories: those that handle presence of the parameter, those that guide conversion and restrict types and those that support automatic generation of documentation. First, the presence-options:
default and optional are 
ignored and the value is returned as a list. Type checking options are 
processed on each value.list(Type).The type and conversion options are given below. The type-language can be extended by providing clauses for the multifile hook http:convert_parameter/3.
;(Type1, Type2)(nonneg;oneof([infinite])) to 
specify an integer or a symbolic value.
The last set of options is to support automatic generation of HTTP 
API documentation from the sources.4This 
facility is under development in ClioPatria; see http_help.pl.
Below is an example
reply(Request) :-
        http_parameters(Request,
                        [ title(Title, [ optional(true) ]),
                          name(Name,   [ length >= 2 ]),
                          age(Age,     [ between(0, 150) ])
                        ]),
        ...
Same as http_parameters(Request, Parameters,[])
call(Goal, +ParamName, -Options) to find the options. 
Intended to share declarations over many calls to http_parameters/3. 
Using this construct the above can be written as below.
reply(Request) :-
        http_parameters(Request,
                        [ title(Title),
                          name(Name),
                          age(Age)
                        ],
                        [ attribute_declarations(param)
                        ]),
        ...
param(title, [optional(true)]).
param(name,  [length >= 2 ]).
param(age,   [integer]).