OpenAPI3 to TypeSpec
Converting OpenAPI 3 into TypeSpec
This package includes the tsp-openapi3 CLI for converting OpenAPI 3 specs into TypeSpec.
The generated TypeSpec depends on the @typespec/http, @typespec/openapi and @typespec/openapi3 libraries.
Usage
- via the command line
tsp-openapi3 ./openapi3spec.yml --output-dir ./tsp-outputtsp-openapi3 arguments
The path to the OpenAPI3 yaml or json file must be passed as a position argument.
The named arguments are:
| Name | Type | Required | Description |
|---|---|---|---|
| output-dir | string | required | The output directory for generated TypeSpec files. Will be created if it does not exist. |
| help | boolean | optional | Show help. |
Examples
1. Convert component schemas into models
All schemas present at #/components/schemas will be converted into a model or scalar as appropriate.
| OpenAPI3 | TypeSpec |
|
|
Detailed Example for Converting Component Schemas
This example demonstrates how to convert component schemas from OpenAPI3 to TypeSpec.
OpenAPI3
components: schemas: Product: type: object required: - id - name properties: id: type: string name: type: string price: type: number format: floatTypeSpec
model Product { id: string; name: string; price: float;}In this example, the Product schema from OpenAPI3 is converted into a TypeSpec model.
Detailed Example for Converting Component Parameters
This example demonstrates how to convert component parameters from OpenAPI3 to TypeSpec.
OpenAPI3
components: parameters: ProductId: name: id in: path required: true schema: type: stringTypeSpec
model Product { @path id: string;}In this example, the ProductId parameter from OpenAPI3 is converted into a TypeSpec model with a @path decorator.
Detailed Example for Converting Path Routes to Operations
This example demonstrates how to convert path routes from OpenAPI3 to TypeSpec operations.
OpenAPI3
paths: /products/{id}: get: operationId: getProduct parameters: - name: id in: path required: true schema: type: string responses: "200": description: Successful response content: application/json: schema: $ref: "#/components/schemas/Product"TypeSpec
/** * Successful response */model getProduct200ApplicationJsonResponse { @statusCode statusCode: 200; @bodyRoot body: Product;}
@route("/products/{id}") @get op getProduct(@path id: string): getProduct200ApplicationJsonResponse;In this example, the getProduct path route from OpenAPI3 is converted into a TypeSpec operation with a response model.
2. Convert component parameters into models or fields
All parameters present at #/components/parameters will be converted to a field in a model. If the model doesn’t exist in #/components/schemas, then it will be created.
| OpenAPI3 | TypeSpec |
|
|
|
|
3. Convert path routes to operations
All routes using one of the HTTP methods supported by @typespec/http will be converted into operations at the file namespace level. A model is also generated for each operation response.
At this time, no automatic operation grouping under interfaces is performed.
| OpenAPI3 | TypeSpec |
|
|