github.com/wangyougui/gf/v2@v2.6.5/net/ghttp/ghttp_server_openapi.go (about)

     1  // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
     2  //
     3  // This Source Code Form is subject to the terms of the MIT License.
     4  // If a copy of the MIT was not distributed with this file,
     5  // You can obtain one at https://github.com/wangyougui/gf.
     6  
     7  package ghttp
     8  
     9  import (
    10  	"context"
    11  
    12  	"github.com/wangyougui/gf/v2/net/goai"
    13  	"github.com/wangyougui/gf/v2/text/gstr"
    14  )
    15  
    16  // initOpenApi generates api specification using OpenApiV3 protocol.
    17  func (s *Server) initOpenApi() {
    18  	if s.config.OpenApiPath == "" {
    19  		return
    20  	}
    21  	var (
    22  		ctx     = context.TODO()
    23  		err     error
    24  		methods []string
    25  	)
    26  	for _, item := range s.GetRoutes() {
    27  		switch item.Type {
    28  		case HandlerTypeMiddleware, HandlerTypeHook:
    29  			continue
    30  		}
    31  		if item.Handler.Info.IsStrictRoute {
    32  			methods = []string{item.Method}
    33  			if gstr.Equal(item.Method, defaultMethod) {
    34  				methods = SupportedMethods()
    35  			}
    36  			for _, method := range methods {
    37  				err = s.openapi.Add(goai.AddInput{
    38  					Path:   item.Route,
    39  					Method: method,
    40  					Object: item.Handler.Info.Value.Interface(),
    41  				})
    42  				if err != nil {
    43  					s.Logger().Fatalf(ctx, `%+v`, err)
    44  				}
    45  			}
    46  		}
    47  	}
    48  }
    49  
    50  // openapiSpec is a build-in handler automatic producing for openapi specification json file.
    51  func (s *Server) openapiSpec(r *Request) {
    52  	if s.config.OpenApiPath == "" {
    53  		r.Response.Write(`OpenApi specification file producing is disabled`)
    54  	} else {
    55  		r.Response.WriteJson(s.openapi)
    56  	}
    57  }