Maison  >  Article  >  développement back-end  >  Impossible de charger la définition de l'API à l'aide de go-openapi/runtime/middleware

Impossible de charger la définition de l'API à l'aide de go-openapi/runtime/middleware

王林
王林avant
2024-02-13 21:00:221139parcourir

无法使用 go-openapi/runtime/middleware 加载 API 定义

Lors du processus de développement, l'éditeur de PHP Banana rencontre parfois un problème : il ne peut pas utiliser go-openapi/runtime/middleware pour charger les définitions d'API. Ce problème peut affecter le déroulement normal du projet, il doit donc être résolu à temps. Avant de résoudre ce problème, nous devons comprendre ce qu'est go-openapi/runtime/middleware et pourquoi la définition de l'API ne peut pas être chargée. Dans cet article, nous expliquerons en détail la cause de ce problème et proposerons des solutions pour aider tout le monde à résoudre ce problème en douceur.

Contenu de la question

J'utilise swagger dans Golang's http/net 以及 github.com/go-openapi/runtime/middleware 来探索 go. Utilisez le code suivant :

func setupandrunhttpserver() {
    httpport := envstring("http_port", defaulthttpport)
    httpaddr := net.joinhostport("localhost", httpport)
    service := planting.newplantingservice()
    eps := endpoints.newendpointset(*service)
    httpservermux := transport.newhttphandler(eps)

    // setup the swagger docs and ui.
    var sh http.handler = middleware.swaggerui(middleware.swaggeruiopts{}, nil)
    httpservermux.handle("/docs", sh)

    // the http listener mounts the go kit http handler we created.
    httplistener, err := net.listen("tcp", httpaddr)
    if err != nil {
      os.exit(1)
    }

    // serve using the net/http.servermux creaded in transport package.
    err = http.serve(httplistener, httpservermux)
    if err != nil {
      os.exit(2)
    }
    defer httplistener.close()
  }

Lors de ma visite http://localhost:8088/docs, j'obtiens ce qui suit :

À première vue, net/http 库以及 middleware 无法找到相对于服务器根目录的 swagger.jsonfichier. J'ai ce fichier situé à l'adresse :

matthew.hoggan in ~/go/src/project/root on TemplateServer*
⚡ ls -l ./docs/swagger.json
-rw-r--r--  1 matthew.hoggan  staff  3880 Nov 30 04:47 ./docs/swagger.json

Ma question est la suivante : comment puis-je savoir middleware 在当前目录中哪里可以找到 swagger.json lorsque je teste un projet cloné avant de le déployer ?

Solution de contournement

En regardant le code source, vous devez procéder comme suit :

var sh http.Handler = middleware.SwaggerUI(middleware.SwaggerUIOpts{SpecURL: "./docs/swagger.json"}, nil)

Si specurl n'est pas spécifié, sa valeur par défaut est : /swagger.json

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer