В моем приложении мне нужно сделать два разных REST-запроса, содержащих JSON в качестве полезной нагрузки.Теперь для двух разных API базовый блок JSON содержит общую структуру, как показано ниже:
{
"request": {
"data": {
"Object": [
{
<Payload based on API>
}
]
}
}
}
Для реализации этого я написал ниже код в двух разных пакетах
auth.go
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))
}
metadata.go
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 в текущую среду.Как я могу добиться того же.