UNPKG

@aws/pdk

Version:

All documentation is located at: https://aws.github.io/aws-pdk

149 lines (124 loc) 3.36 kB
# OpenAPI Model This project defines the API operations and their inputs and outputs, using [OpenAPI v3](https://swagger.io/specification/v3/). The entrypoint for the API is `src/main/openapi/main.yaml`. You can add more yaml files (and subfolders) in the `src/main/openapi` directory and these will be included in your API definition so long as they are referencable from `main.yaml`. Resources: - [OpenAPI v3 Documentation](https://swagger.io/specification/v3/) - [Type Safe API Documentation](https://aws.github.io/aws-pdk/developer_guides/type-safe-api/index.html) ## Adding Operations To add an operation, we must edit the `paths` section of the OpenAPI document. We add the desired path and HTTP method for the operation, as well as its inputs and outputs, for example: ```yaml paths: /foo/{myUrlParam}: post: operationId: CreateFoo parameters: - name: myUrlParam in: path schema: type: string required: true requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateFooRequest' responses: 200: description: Successful response content: application/json: schema: $ref: '#/components/schemas/CreateFooResponse' ``` Notice we used `$ref` to reference `components` in the OpenAPI specification. We define these next: ```yaml components: schemas: CreateFooRequest: type: object properties: someParameter: type: string anotherParameter: type: double required: - someParameter CreateFooResponse: type: object properties: foo: $ref: '#/components/schemas/Foo' required: - foo Foo: type: object properties: myProperty: type: integer required: - myProperty ``` Notice above we also used a reference to `Foo` in the `CreateFooResponse` After adding the operation, please follow the remaining instructions in the [main README](../README.md). ## Breaking Up The Model You may find that a single `main.yaml` file becomes unwieldy as the API grows. You can split the file up using references to local files within the `src/main/openapi` directory. For example, you might choose to structure your spec as follows: ``` |_ src/main/openapi/ |_ main.yaml |_ paths/ |_ index.yaml |_ sayHello.yaml |_ schemas/ |_ index.yaml |_ helloResponse.yaml ``` Where `main.yaml` looks as follows: ```yaml openapi: 3.0.3 info: version: 1.0.0 title: Example API paths: $ref: './paths/index.yaml' components: schemas: $ref: './schemas/index.yaml' ``` `paths/index.yaml`: ```yaml /hello: get: $ref: './sayHello.yaml' ``` `paths/sayHello.yaml`: ```yaml operationId: sayHello parameters: - in: query name: name schema: type: string required: true responses: '200': description: Successful response content: 'application/json': schema: $ref: '../schemas/helloResponse.yaml' ``` `schemas/index.yaml`: ```yaml HelloResponse: $ref: './helloResponse.yaml' ``` `schemas/helloResponse.yaml`: ```yaml type: object properties: message: type: string required: - message ```