У меня есть некое приложение, которое обращается к API облачной платформы, полулачет JSON, парсит его и возвращает результат.
И на каждый случай у меня написана отдельная функция, которая запрашивает то список тасков, то список кластеров, то еще что-то.
Функции получаются очень похожи друг на друга, но в тоже время написать одну для всех, которая будет принимать аргументы в зависимости от случая, тоже кажется мне не очень хорошим способом решения данной проблемы.
Как в подобном случае стоит поступить?
Пример функций ниже:
//Возвращает список всех работающих кластеров (у которых healthy true)
func getHealtyClusters() []gjson.Result {
url := API + "/clusters/" + ServiceInstanceID
res, body := makeRequest(map[string]string{"Authorization": "Bearer " + accessToken}, "GET", url)
if res.StatusCode == 200 {
healtyClusters := gjson.Get(string(body), `clusters.#(healthy==true)#.name`).Array()
return healtyClusters
} else {
_logStringGenerate("GET ALL HEALTH CLUSTERS", string(body), false, strconv.Itoa(res.StatusCode))
log.Println(State.DebugLogString)
return nil
}
}
//Возвращает таски по конкретному кластуре
func getClusterTasks() []gjson.Result {
url := API + "/tasks/" + ServiceInstanceID + "/30/1"
res, body := makeRequest(map[string]string{"Authorization": "Bearer " + accessToken}, "GET", url)
if res.StatusCode == 200 {
tasks := gjson.Get(string(body), `taskList.#(metadata.ClusterID=="`+State.ClusterID+`")#`).Array()
return tasks
} else {
_logStringGenerate("GET CLUSTER TASKS", string(body), false, strconv.Itoa(res.StatusCode))
log.Println(State.DebugLogString)
return nil
}
}
Также функции могут возвращать не только []gjson.Result, но и другие типы данных.