在我的应用程序中,我需要发出两个不同的REST请求,其中包含JSON作为有效负载。现在,对于两个不同的JSON API基本块,其通用结构如下所示
{
"request": {
"data": {
"Object": [
{
<Payload based on API>
}
]
}
}
}
为实现这一点,我在下面的两个不同的程序包中编写了代码
package auth
type ReqJSONAuth struct {
Request struct {
Data struct {
Object []Object `json:"Object"`
} `json:"data"`
} `json:"request"`
}
type Object struct {
User User `json:"user"`
}
type User struct {
CustomerID string //`json:"customerid"`
IPAddress string `json:"pbxaddress"`
NoOfUsers string //`json:"noofusers"`
}
func (j *ReqJSON) User() []User { return j.Request.Data.Object.User }
func (j *ReqJSON) SetUsers(u []User) { j.Request.Data.Object.User = u }
func main() {
var j ReqJSON
j.SetUser(User{
UserID: "_id",
IPAddr: "1.1.1.1",
Noofusers: "100",
Qos: "34",
ID: "kldjflkdfjlkdjfkld",
Domain: "xyz.com",
})
b, err := json.MarshalIndent(j, "", " ")
fmt.Println(err, string(b))
}
package metadata
type ReqJSONMeta struct {
Request struct {
Data struct {
Object []Object `json:"Object"`
} `json:"data"`
} `json:"request"`
}
type Object struct {
Meta Meta `json:"metadata"`
}
type Meta struct {
CustomerID string `json:"customerId"`
FilePath string `json:"filePath"`
FileName string `json:"fileName"`
}
func (j *ReqJSONMeta) User() []User { return j.Request.Data.Object.User }
func (j *ReqJSONMeta) SetUsers(u []User) { j.Request.Data.Object.User = u }
以上代码可以正常工作,但我想对其进行重构以使其更加干净和通用,以便将来我们可以在当前框架中添加更多API。 我怎么能达到同样的目的。