Merging Specs

Spectrum merges multiple OpenAPI 3 specs into a single spec — useful for assembling one API document from per-service or per-domain fragments.

Merge files

merged, err := openapi3.MergeFiles(
    []string{"users.yaml", "orders.yaml", "billing.yaml"},
    nil, // *MergeOptions, or nil for defaults
)
if err != nil {
    log.Fatal(err)
}

Merge a directory

Merge every spec in a directory:

merged, count, err := openapi3.MergeDirectory("specs/", nil)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("merged %d specs\n", count)

Merge two specs

Merge combines a master spec with an extra spec. The specExtraNote is used to annotate provenance of the merged-in content:

merged, err := openapi3.Merge(master, extra, "from orders service", nil)

Options

Pass *MergeOptions to control conflict handling. A skip-on-collision policy is available via NewMergeOptionsSkip():

opts := openapi3.NewMergeOptionsSkip()
merged, err := openapi3.MergeFiles(files, opts)

Finer-grained helpers exist when you only need to merge a subset: MergePaths, MergeParameters, MergeResponses, MergeSchemas, and MergeTags.