第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

如何為一個(gè)端點(diǎn)創(chuàng)建多種驗(yàn)證方法?

如何為一個(gè)端點(diǎn)創(chuàng)建多種驗(yàn)證方法?

Go
蝴蝶不菲 2023-06-05 16:59:33
我想制作一個(gè)驗(yàn)證 api 以驗(yàn)證一組關(guān)于特定規(guī)則集的 json 請求。為此,我只想使用一個(gè)端點(diǎn)并調(diào)用與特定 json 結(jié)構(gòu)相對應(yīng)的函數(shù)。我知道 go 中沒有方法重載,所以我有點(diǎn)難過。...type requestBodyA struct {    SomeField   string `json:"someField"`    SomeOtherField  string `json:"someOtherField"`}type requestBodyB struct {    SomeDifferentField   string `json:"someDifferentField"`    SomeOtherDifferentField  string `json:"someOtherDifferentField"`}type ValidationService interface {    ValidateRequest(ctx context.Context, s string) (err error)}type basicValidationService struct{}...因此,為了驗(yàn)證大量不同的 json 請求,為每個(gè) json 請求創(chuàng)建結(jié)構(gòu)是否更好?還是我應(yīng)該動(dòng)態(tài)創(chuàng)建這些?如果我只有一個(gè)端點(diǎn),我怎么知道發(fā)送了哪種請求?
查看完整描述

1 回答

?
www說

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊

如果您有一個(gè)必須接受不同 JSON 類型的端點(diǎn)/rpc,您需要以某種方式告訴它如何區(qū)分它們。一種選擇是有類似的東西:


type request struct {

  bodyA *requestBodyA

  bodyB *requestBodyB

}

然后,將這些字段適當(dāng)?shù)靥畛涞饺萜?JSON 對象中。該模塊將僅在存在鍵時(shí)json填充,否則將其保留為,依此類推。bodyAbodyAnil


這是一個(gè)更完整的例子:


type RequestBodyFoo struct {

    Name    string

    Balance float64

}


type RequestBodyBar struct {

    Id  int

    Ref int

}


type Request struct {

    Foo *RequestBodyFoo

    Bar *RequestBodyBar

}


func (r *Request) Show() {

    if r.Foo != nil {

        fmt.Println("Request has Foo:", *r.Foo)

    }

    if r.Bar != nil {

        fmt.Println("Request has Bar:", *r.Bar)

    }

}


func main() {

    bb := []byte(`

    {

        "Foo": {"Name": "joe", "balance": 4591.25}

    }

    `)


    var req Request

    if err := json.Unmarshal(bb, &req); err != nil {

        panic(err)

    }

    req.Show()


    var req2 Request

    bb = []byte(`

    {

        "Bar": {"Id": 128992, "Ref": 801472}

    }

    `)

    if err := json.Unmarshal(bb, &req2); err != nil {

        panic(err)

    }

    req2.Show()

}

另一種選擇是使用地圖更動(dòng)態(tài)地執(zhí)行此操作,但上面的方法可能就足夠了。


查看完整回答
反對 回復(fù) 2023-06-05
  • 1 回答
  • 0 關(guān)注
  • 173 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號