libopenapi is a fully featured, high performance OpenAPI 3.2, 3.1, 3.0, Overlays and Arazzo parser, library, validator and toolkit for go applications.
See the code
libopenapi has full support for OpenAPI 3, 3.1 and 3.2. It can handle the largest and most complex specifications you can think of.
Overlays and Arazzo are also fully supported.
If your company is using libopenapi, please considering supporting this project,
like our very kind sponsors:
Need help? Have a question? Want to share your work? Join our discord and come say hi!
libopenapi-validatorNeed to validate requests, responses, parameters or schemas? Use the new libopenapi-validator module.
See all the documentation at https://pb33f.io/libopenapi/
generator/typescript renders the component schemas of an OpenAPI document as
a type-only TypeScript module, built from the same model as the Go generator.
file, err := typescript.RenderSchemas(docModel.Model.Components.Schemas)
os.WriteFile("api.gen.ts", file.Source, 0o644)
See generator/typescript/README.md for how each schema shape maps to TypeScript.
👀 Get rolling fast using libopenapi with the
Parsing OpenAPI files using go guide 👀
Or, follow these steps and see something in a few seconds.
curl https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/_archive_/schemas/v3.0/pass/petstore.yaml > petstorev3.json
go get github.com/pb33f/libopenapi
Copy and paste this code into a main.go file.
package main
import (
"fmt"
"os"
"github.com/pb33f/libopenapi"
)
func main() {
petstore, _ := os.ReadFile("petstorev3.json")
document, err := libopenapi.NewDocument(petstore)
if err != nil {
panic(fmt.Sprintf("cannot create new document: %e", err))
}
docModel, err := document.BuildV3Model()
if err != nil {
panic(fmt.Sprintf("cannot create v3 model from document: %e", err))
}
// The following fails after the first iteration
for schemaName, schema := range docModel.Model.Components.Schemas.FromOldest() {
if schema.Schema().Properties != nil {
fmt.Printf("Schema '%s' has %d properties\n", schemaName, schema.Schema().Properties.Len())
}
}
}
Run it, which should print out:
Schema 'Pet' has 3 properties
Schema 'Error' has 2 properties
Read the full docs at https://pb33f.io/libopenapi/
Logo gopher is modified, originally from egonelbre
(top 24 of 28)
662 followers · starred Mar 2024
513 followers · starred Aug 2024
201 followers · starred Aug 2024
129 followers · starred Jun 2024
libopenapi is a fully featured, high performance OpenAPI 3.2, 3.1, 3.0, Overlays and Arazzo parser, library, validator and toolkit for go applications.
See the code
libopenapi has full support for OpenAPI 3, 3.1 and 3.2. It can handle the largest and most complex specifications you can think of.
Overlays and Arazzo are also fully supported.
If your company is using libopenapi, please considering supporting this project,
like our very kind sponsors:
Need help? Have a question? Want to share your work? Join our discord and come say hi!
libopenapi-validatorNeed to validate requests, responses, parameters or schemas? Use the new libopenapi-validator module.
See all the documentation at https://pb33f.io/libopenapi/
generator/typescript renders the component schemas of an OpenAPI document as
a type-only TypeScript module, built from the same model as the Go generator.
file, err := typescript.RenderSchemas(docModel.Model.Components.Schemas)
os.WriteFile("api.gen.ts", file.Source, 0o644)
See generator/typescript/README.md for how each schema shape maps to TypeScript.
👀 Get rolling fast using libopenapi with the
Parsing OpenAPI files using go guide 👀
Or, follow these steps and see something in a few seconds.
curl https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/_archive_/schemas/v3.0/pass/petstore.yaml > petstorev3.json
go get github.com/pb33f/libopenapi
Copy and paste this code into a main.go file.
package main
import (
"fmt"
"os"
"github.com/pb33f/libopenapi"
)
func main() {
petstore, _ := os.ReadFile("petstorev3.json")
document, err := libopenapi.NewDocument(petstore)
if err != nil {
panic(fmt.Sprintf("cannot create new document: %e", err))
}
docModel, err := document.BuildV3Model()
if err != nil {
panic(fmt.Sprintf("cannot create v3 model from document: %e", err))
}
// The following fails after the first iteration
for schemaName, schema := range docModel.Model.Components.Schemas.FromOldest() {
if schema.Schema().Properties != nil {
fmt.Printf("Schema '%s' has %d properties\n", schemaName, schema.Schema().Properties.Len())
}
}
}
Run it, which should print out:
Schema 'Pet' has 3 properties
Schema 'Error' has 2 properties
Read the full docs at https://pb33f.io/libopenapi/
Logo gopher is modified, originally from egonelbre
(top 24 of 28)
662 followers · starred Mar 2024
513 followers · starred Aug 2024
201 followers · starred Aug 2024
129 followers · starred Jun 2024