พลังงานสะท้อนกลุ่มไม่ได้ทำงานกับ OpenAPI ที่ถูกสร้างรหัสโดยใช้ oapi-codegen

0

คำถาม

ฉันใช้ oapi-codegen ต้องสร้างของฉันเซิร์ฟเวอร์รหัสและเสียงสะท้อน Labstack เป็นเครื่องเซิร์ฟเวอร์ ตอนที่ฉันมองผ่านเป็น Group ตัวอย่างไป Openapi.RegisterHandlers แทนที่จะเป็น Echo ตัวอย่างผมเสมอไป 400 เกิดข้อผิดพลาดกับ {"message":"no matching operation was found"} สำหรับคำร้องของในกลุ่ม:

    swagger, err := Openapi.GetSwagger()
    if err != nil {
        fmt.Fprintf(os.Stderr, "Error loading swagger spec\n: %s", err)
        os.Exit(1)
    }

    // Use oapi validation middleware to check all requests against the
    // OpenAPI schema.
    g := e.Group("/api", middleware.OapiRequestValidator(swagger))
    Openapi.RegisterHandlers(g, &MyApi{})

ถ้าคนส่งคำขอ /api/fooอยู่ที่ไหน foo เป็นรูปแบบ api endpoint กำหนดไว้ที่ถูกสร้างขึ้นเซิร์ฟเวอร์รหัสฉันเข้าใจ 400 ข้อผิดพลาด ถ้าผมทำอย่าง /api/<some undefined api> ฉันยังได้เลขที่ 400 ถ้าฉันส่งการร้องขอสำหรับสิ่ง /bazฉันเข้าใจ 404 มือนอย่างที่คาดไว้ตั้งแต่นั้นไม่ถูกกำหนดเส้นทางได้ ถ้าฉันไม่ผ่านเป็นส่วนนำหน้าที่ Group()ฉันเข้าใจ 400 เกิดข้อผิดพลาดสำหรับทุกอยากขอให้ช่วยอะไรหน่อย ฉันเข้าใจเดียวกับพฤติกรรมถ้าผมจะใช้ RegisterHandlersWithBaseURL()

go go-echo openapi
2021-11-23 20:35:13
1

คำตอบที่ดีที่สุด

0

มันดูเหมือนว่าจะมีแมลงอยู่ที่ไหนถ้าคุณสำหรับกำหนดเป็นฐานเส้นทางเหมือนกันไป Group() ฟังก์ชันหรือ RegisterHandlersWithBaseURL()ที่OapiRequestValidator กลางรายการที่ไม่ต้องสนใจที่ฐานเส้นทางตอนเช็คดูสิ่งที่ร้องขอมาต้องการเส้นทางกับเส้นทาง. มันใช้เส้นทางกำหนดไว้ใน OpenAPI spec โดยไม่มีที่ฐานเส้นทางเดินของตัวเอง ต้องทำงานอยู่แบบนี้ฉัน overwrote ง inline.tmpl ต้นแบบแล้วแฮ็คเข้าไปที่ GetSwagger() ฟังก์ชันกจะมีส่วนร่วมนี้ที่ด้านล่าง:

func GetSwagger(pathPrefix string) (swagger *openapi3.T, err error) {
...
    var updatedPaths openapi3.Paths = make(openapi3.Paths)

    for key, value := range(swagger.Paths) {
        updatedPaths[pathPrefix + key] = value
    }

    swagger.Paths = updatedPaths
}

กุญแจสำคัญใน Path บนแผนที่เป็นเส้นทางได้ ฉันแค่เพิ่มเข้าไปที่ฐานเส้นทางที่ทุกกุญแจ

2021-11-30 04:00:22

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่