Set a request body as optional
If the input body parameter is specified with the WSOptional
attribute,
functions that update a resource have the option of not getting a request body.
It is typical to specify an input body parameter when performing an HTTP PUT, POST, or PATCH request to a resource; otherwise error-9106 is raised.
You can set
WSOptional
on the ATTRIBUTE()
clause of an input body parameter if a body is not always
required. When set as optional, the fglrestful tool generates two Genero BDL
functions for the same service in the stub file: - the standard function, where you provide the input body parameter.
- a second function, suffixed with "NoRequestBody", where there is no input body parameter. For
example:
PUBLIC FUNCTION TestRecord NoRequestBody() RETURNING (INTEGER, INTEGER)
Note: If you have multipart input bodies and
any one input body is optional, then all input parameters must set the
WSOptional
attribute; otherwise fglcomp will raise error-9138. Example: Optional input body
This example sets WSOptional
attribute on the parameter (rec
)
for the input message body.
You must code in the function to have WSContext
detect whether the client has
sent a body at runtime. If the request does not have an input body parameter, the GWS sets the
"NoRequestBody
" entry in the WSContext
variable to true.
PRIVATE DEFINE Context DICTIONARY ATTRIBUTE(WSContext) OF STRING
PUBLIC
FUNCTION TestRecord(rec RECORD ATTRIBUTE(WSOptional) a INTEGER, b INTEGER END RECORD)
ATTRIBUTE (WSPut, WSPath="/record")
RETURNS (INTEGER)
IF Context.contains("NoRequestBody") THEN
DISPLAY Context["NoRequestBody"]
RETURN 0
ELSE
RETURN rec.a + rec.b
END IF
END FUNCTION