Heim  >  Artikel  >  Backend-Entwicklung  >  Die API-Definition kann nicht mit go-openapi/runtime/middleware geladen werden

Die API-Definition kann nicht mit go-openapi/runtime/middleware geladen werden

王林
王林nach vorne
2024-02-13 21:00:221139Durchsuche

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

Während des Entwicklungsprozesses stößt der Editor von PHP Banana manchmal auf ein Problem: Er kann go-openapi/runtime/middleware nicht zum Laden von API-Definitionen verwenden. Dieses Problem kann den normalen Fortschritt des Projekts beeinträchtigen und muss daher rechtzeitig gelöst werden. Bevor wir dieses Problem lösen, müssen wir verstehen, was go-openapi/runtime/middleware ist und warum die API-Definition nicht geladen werden kann. In diesem Artikel erklären wir die Ursache dieses Problems im Detail und stellen Lösungen bereit, die jedem helfen, dieses Problem reibungslos zu lösen.

Frageninhalt

Ich verwende Swagger in Golangs http/net 以及 github.com/go-openapi/runtime/middleware 来探索 go. Verwenden Sie den folgenden Code:

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()
  }

Wenn ich http://localhost:8088/docs besuche, bekomme ich Folgendes:

Auf den ersten Blick net/http 库以及 middleware 无法找到相对于服务器根目录的 swagger.json Datei. Ich habe diese Datei unter:

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

Meine Frage ist, wie erkenne ich middleware 在当前目录中哪里可以找到 swagger.json, ob ich ein geklontes Projekt teste, bevor ich es bereitstelle?

Problemumgehung

Aus dem Quellcode müssen Sie Folgendes tun:

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

Wenn specurl nicht angegeben ist, wird standardmäßig Folgendes verwendet: /swagger.json

Das obige ist der detaillierte Inhalt vonDie API-Definition kann nicht mit go-openapi/runtime/middleware geladen werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen