我正在编写某种基于 RESTfull API 的对象关系映射器。当我完成它时,我计划使它获得 MIT 许可。这个想法是使用一些 3rd 方 REST API 作为数据存储,golang客户端将查询它所需的数据。
API 响应是具有已知结构的 JSON。
这是我的代码:
type AClient struct {
Id string `json:"id"`
Uid string `json:"uid"`
FirstName string `json:"firstName"`
LastName string `json:"lastName"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
City string `json:"city"`
Address string `json:"address"`
Telefone string `json:"telefone"`
Zip string `json:"zip"`
Telefon string `json:"telefon"`
Comment string `json:"comment"`
}
type AEvents struct {
Id string `json:"id"`
Security bool `json:"security"`
Description string `json:"description"`
Good AGood `json:"good"`
Client AClient `json:"client"`
Author AAuthor `json:"author"`
InFuture bool `json:"inFuture"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
}
type Entry struct {
AEvents //this have to be changed to `AClients` in runtime when needed
}
type ORM struct {
ApiUrl string
ModelName string
ModelInterface Entry
HuntKey string
HuntSid string
Csrf string
}
func (o *ORM) Query(parameters map[string]string) ([]Entry, AMetadata, error) {
responseParsed := struct {
Status string `json:"status"`
Metadata AMetadata `json:"metadata"`
Data []Entry `json:"data"` //todo - use o.ModelInterface
}{}
client := &http.Client{}
var queryString string
for k, v := range parameters {
queryString = queryString + fmt.Sprintf("%v=%v&", url.QueryEscape(k), url.QueryEscape(v))
}
我ORM该如何做到这一点:实例化 对象时,我如何传递结构名称,它将用于解析 JSON 响应。当前代码适用于structof AEvents,但我希望它易于更改AClient等等。
UPD:我已经查看了https://github.com/jinzhu/gorm的代码,并找出了很多如何实现它的方法。然后,正如我所承诺的,我将此代码发布为开源 - https://github.com/vodolaz095/hrorm
相关分类