See the previous sections, starting with the first on finding an ancient CGI script.
We don't need an OpenAPI specification. But, it is so helpful to formalize the behavior of a web site that it's hard for me to imagine working without it.
In this case, the legacy script only have a few paths, so the OpenAPI specification is relatively small.
openapi: 3.0.1 info: title: CGI Conversion version: 1.0.0 paths: /resources/{type}/: get: summary: Query Form operationId: form parameters: - name: type in: path required: true schema: type: string responses: 200: description: Form content: {} post: summary: Add a document operationId: update requestBody: description: document content: application/json: schema: $ref: '#/components/schemas/Document' required: true parameters: - name: type in: path required: true schema: type: string responses: 201: description: Created content: text/html: {} 405: description: Invalid input content: text/html: {} /resources/{type}/{guid}: get: summary: Find documents operationId: find parameters: - name: type in: path required: true schema: type: string - name: guid in: path required: true schema: type: string responses: 200: description: successful operation content: text/html: {} 404: description: Not Found content: text/html: {} components: schemas: Document: type: object properties: fname: type: string lname: type: string
This shows the rudiments of the paths and the responses. There are three "successful" kinds of responses, plus two additional error responses that are formally defined.
There is a lot of space in this document for additional documentation and details. Every opportunity should be taken to capture details about the application, what it does now, and what it should do when it's rewritten.
In our example, the form (and resulting data structure) is a degenerate class with a pair of fields. We simply write the repr() string to a file. In a practical application, this will often be a bit more complex. There may be validation rules, some of which are obscure, hidden in odd places in the application code.
What's essential here is continuing the refactoring process to more fully understand the underlying data model and state processing. These features need to be disentangled from HTML output and CGI input.
The OpenAPI spec serves as an important part of the definition of done. It supplements the context diagram with implementation details. In a very real and practical way, this drives the integration test suite. We can transform OpenAPI to Gherkin and use this to test the overall web site. See https://medium.com/capital-one-tech/spec-to-gherkin-to-code-902e346bb9aa for more on this topic.