Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Tidak dapat memuatkan definisi API menggunakan go-openapi/runtime/middleware

Tidak dapat memuatkan definisi API menggunakan go-openapi/runtime/middleware

王林
王林ke hadapan
2024-02-13 21:00:221096semak imbas

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

Semasa proses pembangunan, editor PHP Banana kadangkala menghadapi masalah: ia tidak boleh menggunakan go-openapi/runtime/middleware untuk memuatkan definisi API. Masalah ini mungkin menjejaskan kemajuan biasa projek, jadi ia perlu diselesaikan tepat pada masanya. Sebelum menyelesaikan masalah ini, kita perlu memahami apa itu go-openapi/runtime/middleware dan mengapa takrifan API tidak boleh dimuatkan. Dalam artikel ini, kami akan menerangkan punca masalah ini secara terperinci dan menyediakan penyelesaian untuk membantu semua orang menyelesaikan masalah ini dengan lancar.

Kandungan soalan

Saya menggunakan swagger dalam http/net 以及 github.com/go-openapi/runtime/middleware 来探索 go golang. Gunakan kod berikut:

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

Apabila saya melawat http://localhost:8088/docs Saya mendapat perkara berikut:

Pada pandangan pertama, net/http 库以及 middleware 无法找到相对于服务器根目录的 swagger.json fail. Saya mempunyai fail ini terletak di:

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

Soalan saya ialah, bagaimana saya boleh memberitahu middleware 在当前目录中哪里可以找到 swagger.json apabila menguji projek klon sebelum menggunakannya?

Penyelesaian

Melihat dari kod sumber, anda perlu melakukan perkara berikut:

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

Jika specurl tidak dinyatakan, ia lalai kepada: /swagger.json

Atas ialah kandungan terperinci Tidak dapat memuatkan definisi API menggunakan go-openapi/runtime/middleware. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam