oas
Parse an open api (previously swagger) spec.
gleam add oas@1
The oas
library provides a decoder that is designed to be used with JSON or YAML.
import gleam/json
import oas
pub fn main() {
let raw = todo as "some schema content"
let result = json.decode(raw, oas.decoder)
case result {
Ok(oas.Document(paths: paths, components: components, ..)) -> {
// use oas spec
}
Error(_) -> panic as "could not decode"
}
}
Further documentation can be found at https://hexdocs.pm/oas.
Development
gleam run # Run the project
gleam test # Run the tests
Missing features
The following have not been present in the API’s I have worked with. Notably security is usually described in human readable language as part of API docs.
Contributions to add these are welcome. They will not require a breaking change to upgrade so I am committing to a 1.0 release
- Webhooks
- external docs
- security schemas
Notes
Nullability
OpenAPI 3.0.x was build on “JSON Schema Specification Wright Draft 00”
The OpenAPI spec defines a nullable
field on all schema data types.
As an extension to the JSON Schema draft.
OpenAPI 3.1.x uses “https://tools.ietf.org/html/draft-bhutton-json-schema-validation-00#section-6.1.1”
This version of the spec allows lists of types in the data model.
A nullable type should be represented by "type": ["null", "string"]
While nullable
is not needed it is still supported for backwards compatability.
Several specs still exist on 3.0.x versions, for example githubs.
Nullable and not required
To create full fidelity with the API such a field should have a type of Option(Option(T))
In most cases there is no value exposing this to the users.
The one API where it is worth exposing is if posting to an endpoint with patch semantics. A missing field indicates no change. A present field with value of null means set the field to null.
Boolean JSON schemas
https://json-schema.org/draft/2020-12/json-schema-core#section-4.3.2
A schema value of true
is equivalent to an empty schema {}
and will always validate.
A schema value of false
is equivalent to a schema that will never validate.
These “types” are decoded as oas.AlwayPasses
and oas.AlwaysFails
respectively.
Credit
Created for EYG, a new integration focused programming language.