API (почти) ответ переменной RESTFul с GoLang - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть программное обеспечение, которое я не могу заменить по разным причинам, и API имеет вид RESTFul.

Все 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.

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018
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))
}
0 голосов
/ 13 сентября 2018

Я часто использую этот инструмент при потреблении новых API https://mholt.github.io/json-to-go/. Если вы скопируете и вставите свой JSON, вы можете получить автоматические распорки, например:

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 Предыдущий ответ был правильным, необработанное сообщение лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...