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

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

同一端點(diǎn)的多租戶實(shí)現(xiàn)

同一端點(diǎn)的多租戶實(shí)現(xiàn)

Go
炎炎設(shè)計(jì) 2022-06-27 11:14:32
我有一個(gè)用 Go 編寫的 API 服務(wù)器,它為不同的租戶做一些工作。我有許多端點(diǎn)應(yīng)該根據(jù)調(diào)用它的租戶實(shí)現(xiàn)不同的代碼,例如:s.GET("/api/orders", a.getOrders)將調(diào)用a.getOrders處理程序,在其工作后將為所有租戶返回相同的 JSON 結(jié)構(gòu),但獲取數(shù)據(jù)的實(shí)現(xiàn)可能不同(有時(shí)對于租戶我需要調(diào)用另一個(gè) Web 服務(wù),對于另一個(gè)我需要查詢不同的 DB表等...)。我正在考慮為每個(gè)租戶創(chuàng)建不同的包,所以我將有一個(gè)common(用于常見實(shí)現(xiàn))、tenanta(用于租戶 A 特定實(shí)現(xiàn))、tenantb等等tenantc......現(xiàn)在,我的問題是:哪個(gè)是最好的如何處理“重定向”?我能想到的第一件事(可能是壞事)是在我的處理程序中放置一個(gè)開關(guān)并從會(huì)話或 url 中a.getOrders解析:tenantIDswitch tenantID {   case "tenanta":       tenanta.getOrders()   case "tenantb":       tenantb.getOrders()   case "tenantc":       tenantc.getOrders()   default:       common.getOrders()}顯然它可能會(huì)變得非??欤壳拔冶仨毺幚?20 多個(gè)租戶)。有沒有更好的方法來處理這種情況?
查看完整描述

1 回答

?
犯罪嫌疑人X

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

你可以做一個(gè)租戶界面,比如


type tenant interface{

    getOrders() Orders

}

現(xiàn)在您可以聲明實(shí)現(xiàn)此接口的任意數(shù)量的租戶


package main


import (

    "fmt"

)


type tenant interface {

    getOrders()

}


type TenantA struct {

}


func (t TenantA) getOrders() {

    fmt.Println("Tenant A")

}


var tenantMap = map[string]tenant{

    "T-A": TenantA{},

}


func main() {

    fmt.Println("Hello")

    teneantTest := "T-A"

    

    curTeneant, ok := tenantMap[teneantTest]

    if !ok {

        fmt.Println("Not Found")

        return

    }

    

    curTeneant.getOrders()

}

現(xiàn)在您的所有租戶都遵循相同的界面,如果所有租戶都定義了最少的功能集,這將是編譯時(shí)可測試的


這也將導(dǎo)致更清晰的抽象


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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