Awesome Go

libopenapi

CategoryThird-party APIs
SubcategoryThird-party APIs
Stars879

Parse, validate, and work with OpenAPI, Swagger, Overlays, and Arazzo specifications

About libopenapi

libopenapi - enterprise grade OpenAPI tools for golang.

Pipeline GoReportCard codecov discord Docs

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.


Sponsors & users

If your company is using libopenapi, please considering supporting this project, like our very kind sponsors:

scalar

apideck


Come chat with us

Need help? Have a question? Want to share your work? Join our discord and come say hi!

Check out the libopenapi-validator

Need to validate requests, responses, parameters or schemas? Use the new libopenapi-validator module.

Documentation

See all the documentation at https://pb33f.io/libopenapi/

Generating TypeScript models

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.


Quick-start tutorial

šŸ‘€ Get rolling fast using libopenapi with the Parsing OpenAPI files using go guide šŸ‘€

Or, follow these steps and see something in a few seconds.

Step 1: Grab the petstore

curl https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/_archive_/schemas/v3.0/pass/petstore.yaml > petstorev3.json

Step 2: Grab libopenapi

go get github.com/pb33f/libopenapi

Step 3: Parse the petstore using 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

Frequently Asked Questions

What is libopenapi?

libopenapi is a Third-party APIs library for the Go programming language. Parse, validate, and work with OpenAPI, Swagger, Overlays, and Arazzo specifications

How do I install libopenapi?

Install libopenapi with the Go module system using `go get pb33f/libopenapi`. Check the repository for the current installation instructions.

What category does libopenapi belong to?

libopenapi is listed under Third-party APIs, specifically Third-party APIs.

← Back to Third-party APIs