API(几乎)与GoLang的RESTFul变量响应

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了API(几乎)与GoLang的RESTFul变量响应相关的知识,希望对你有一定的参考价值。

我有一个软件,由于各种原因我无法替换,并且有一个看起来像RESTFul的API。

所有EndPoints都可以使用一个或多个(在数组中)对象进行响应,即使RESTFul体系结构表明它必须使用对象数组进行响应,如果它只找到一个对象,它将返回对象而不包含在数组中。

GET /customers?country_id=10000

{
  "count": 5,
  "customers": [
    { "id": 10000, "name": "Customer 10000", "vatnum": "123456789P", "country_id": 10000 },
    { "id": 10001, "name": "Customer 10001", "vatnum": "234567891P", "country_id": 10000 },
    { "id": 10002, "name": "Customer 10002", "vatnum": "345678912P", "country_id": 10000 },
    { "id": 10003, "name": "Customer 10003", "vatnum": "456789123P", "country_id": 10000 },
    { "id": 10004, "name": "Customer 10004", "vatnum": "567891234P", "country_id": 10000 }
  ]
}

GET /customers?vatnum=123456789P

{
  "count": 1,
  "customers": {
    "id": 10000,
    "name": "Customer 10000",
    "vatnum": "123456789P",
    "country_id": 10000
  }
}

我的问题是我正在制作这个API的客户端,我不知道哪个是在Golang结构中映射/解析服务器响应方面解决这个问题的最佳策略。

答案

我在使用新的apis https://mholt.github.io/json-to-go/时经常使用这个工具,如果你复制粘贴你的json你可以获得自动struts,即:

type AutoGenerated struct {
    Count     int `json:"count"`
    Customers struct {
        ID        int    `json:"id"`
        Name      string `json:"name"`
        Vatnum    string `json:"vatnum"`
        CountryID int    `json:"country_id"`
    } `json:"customers"`
}

这是单个结构,另一个只是一个数组。

我意识到我误读了你的问题。 https://golang.org/pkg/encoding/json/#RawMessage以前的答案是正确的原始信息是最好的。

另一答案
type ListResponse struct{
    Count int `json:"count"`
    Customers []Customer `json:"customers"`
}

type Customer struct{
ID int               `json:"id"`
VatNum string        `json:"vatnum"`
Name string          `json:"name"`
CountryId int        `country_id`
}
func main(){
    customer1 = Customer{1,"vat 1","name 1",1000}
    customer2 = Customer{2,"vat 2","name 2",1001}
    customers := make([]Customer,0,10)
    customers = append(customers,customer1,customer2)
    response = ListResponse{len(customers),customers}
    buf,_ = json.Marshal(response)
    fmt.Println(string(buf))
}

以上是关于API(几乎)与GoLang的RESTFul变量响应的主要内容,如果未能解决你的问题,请参考以下文章

golang Go中的基本RESTful API - https://medium.com/@etiennerouzeaud/how-to-create-a-basic-restful-api-i

译文Restful API规范

golang : gorm + gin实现restful 分页接口

REST API

使用 node.js 更正了大型 RESTful API 的可扩展结构

Go实战--通过gin-gonic框架搭建restful api服务(github.com/gin-gonic/gin)