-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fixes #86 add tutorial for json object as query parameter
- Loading branch information
Showing
4 changed files
with
139 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
29 changes: 29 additions & 0 deletions
29
content/en/tutorial/rest/openapi/parameter-serialization/_index.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
--- | ||
title: "Parameter Serialization" | ||
date: 2019-05-13T15:16:43-04:00 | ||
description: "" | ||
categories: [] | ||
keywords: [] | ||
slug: "" | ||
aliases: [] | ||
toc: false | ||
draft: false | ||
reviewed: true | ||
--- | ||
|
||
For most users, their use cases are straightforward in term of parameters; however, we do have some users have advanced use cases with [parameter serialization][]. | ||
|
||
OpenAPI 3.0 supports arrays and objects in operation parameters (path, query, header, and cookie) and lets you specify how these parameters should be serialized. The serialization method is defined by the `style` and `explode` keywords: | ||
|
||
* `style` defines how multiple values are delimited. Possible styles depend on the parameter location – path, query, header or cookie. | ||
|
||
* `explode` (true/false) specifies whether arrays and objects should generate separate parameters for each array item or object property. | ||
|
||
OpenAPI serialization rules are based on a subset of URI template patterns defined by RFC 6570. Tool implementers can use existing URI template libraries to handle the serialization, as explained below. | ||
|
||
In this tutorial, we are going to include some examples so that users can learn from them. | ||
|
||
* [JSON query parameter](/tutorial/rest/openapi/parameter-serialization/json-query-param/) | ||
|
||
[parameter serialization]: https://swagger.io/docs/specification/serialization/ | ||
|
89 changes: 89 additions & 0 deletions
89
content/en/tutorial/rest/openapi/parameter-serialization/json-query-param.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
--- | ||
title: "JSON Query Parameter" | ||
date: 2019-05-13T15:51:43-04:00 | ||
description: "" | ||
categories: [] | ||
keywords: [] | ||
slug: "" | ||
aliases: [] | ||
toc: false | ||
draft: false | ||
reviewed: true | ||
--- | ||
|
||
`style` and `explode` cover the most common serialization methods, but not all. For more complex scenarios (for example, a JSON-formatted object in the query string), you can use the content keyword and specify the media type that defines the serialization format. Or you can use schema to define the JSON object. For more information, please visit [schema vs content][]. | ||
|
||
In this tutorial, we are going to create a service with one endpoint that accepts a JSON object as a query parameter. The use case is provided by one of our contributors @Dasanko in this [issue](https://github.com/networknt/light-rest-4j/issues/67) | ||
|
||
To generate the example project, we need to create a specification file named openapi.yaml and a config.json for the light-codegen. | ||
|
||
You can find these two files and a README.md in the [model-config][] repository. The following is the specification. | ||
|
||
``` | ||
openapi: 3.0.0 | ||
info: | ||
title: TestProject | ||
version: 1.0.0 | ||
servers: | ||
- url: 'https://localhost:8443/api' | ||
paths: | ||
/testEndPoint: | ||
get: | ||
parameters: | ||
- in: query | ||
name: TestObject | ||
schema: | ||
$ref: '#/components/schemas/TestObject' | ||
responses: | ||
'200': | ||
description: History something something | ||
content: | ||
application/json: | ||
schema: | ||
type: string | ||
components: | ||
schemas: | ||
TestObject: | ||
type: object | ||
properties: | ||
testProperty: | ||
type: string | ||
``` | ||
|
||
To generate the project with light-codegen. | ||
|
||
``` | ||
cd ~/networknt | ||
rm -rf light-example-4j/rest/openapi/json-query-param | ||
java -jar light-codegen/codegen-cli/target/codegen-cli.jar -f openapi -o light-example-4j/rest/openapi/json-query-param -m model-config/rest/openapi/json-query-param/openapi.yaml -c model-config/rest/openapi/json-query-param/config.json | ||
``` | ||
|
||
If you don't want to generate the project yourself, you can check the generated project in the [light-example-4j][] | ||
|
||
Now you can start the server in the light-example-4j folder. | ||
|
||
``` | ||
cd ~/networknt/light-example-4j/rest/openapi/json-query-param | ||
mvn clean install exec:exec | ||
``` | ||
|
||
Once the server is up and running, you can issue the following commands from another terminal. | ||
|
||
``` | ||
curl -k -X GET https://localhost:8443/api/testEndPoint?TestObject={testProperty=testing} | ||
curl -k -X GET https://localhost:8443/api/testEndPoint?TestObject=testProperty,testing | ||
curl -k -X GET https://localhost:8443/api/testEndPoint?testProperty=testing | ||
curl -k -X GET https://localhost:8443/api/testEndPoint?TestObject[testProperty]=testing | ||
``` | ||
|
||
All the above commands should pass the light-rest-4j OpenAPI validator without any error. As there is no business logic implemented in the example application, the response body is empty with a response code of 200. | ||
|
||
If you are interested, you can add the business logic to get the input parameter and return something meaningful. | ||
|
||
[schema vs content]: https://swagger.io/docs/specification/describing-parameters/#schema-vs-content | ||
[model-config]: https://github.com/networknt/model-config/tree/master/rest/openapi/json-query-param | ||
[light-example-4j]: https://github.com/networknt/light-example-4j/tree/master/rest/openapi/json-query-param |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters