mirror of
https://github.com/grafana/grafana.git
synced 2025-09-19 15:22:53 +08:00
Implementing OpenApi 3 specs (converted from Swagger 2) (#53243)
* Adding OpenApi target to makefile, to covert swagger spec into OpenAPI 3 * Adding endpoint to server swaggerui with new openapi3 specs * Passing output file as parameter for OpenApi3 specs * Implement workaround for missing host and prefix domain
This commit is contained in:
61
scripts/openapi3/openapi3conv.go
Normal file
61
scripts/openapi3/openapi3conv.go
Normal file
@ -0,0 +1,61 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/getkin/kin-openapi/openapi2"
|
||||
"github.com/getkin/kin-openapi/openapi2conv"
|
||||
"github.com/getkin/kin-openapi/openapi3"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
)
|
||||
|
||||
// main This simple script will take the swagger v2 spec generated by grafana and convert them into openapi 3
|
||||
// saving them as new json file to be able lo load and show
|
||||
// The first parameter, if present, will be the input file
|
||||
// The second parameter, if present, will be the output file
|
||||
func main() {
|
||||
outFile := "public/openapi3.json"
|
||||
inFile := "api-merged.json"
|
||||
args := os.Args[1:]
|
||||
|
||||
// first parameter as the input
|
||||
if len(args) > 0 && args[0] != "" {
|
||||
inFile = args[0]
|
||||
}
|
||||
|
||||
// second parameter as output
|
||||
if len(args) > 1 && args[1] != "" {
|
||||
outFile = args[1]
|
||||
}
|
||||
|
||||
fmt.Printf("Reading swagger 2 file %s\n", inFile)
|
||||
byt, err := ioutil.ReadFile(inFile)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
var doc2 openapi2.T
|
||||
if err = json.Unmarshal(byt, &doc2); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
doc3, err := openapi2conv.ToV3(&doc2)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// this is a workaround. In the swagger2 specs there ir no definition of the host, so the converter can not create
|
||||
// a URL. Adding this will ensure that all the api calls start with "/api".
|
||||
doc3.AddServer(&openapi3.Server{URL: "/api"})
|
||||
|
||||
j3, err := doc3.MarshalJSON()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if err = ioutil.WriteFile(outFile, j3, 0644); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Printf("OpenAPI specs generated in file %s\n", outFile)
|
||||
}
|
Reference in New Issue
Block a user