Сборка REST API с использованием Go, которая подключается к Postgresql в Docker и Google Kubernetes Engine. Возникла проблема при выполнении запроса POST в клиенте (веб или мобильном устройстве), он успешно добавлен в базу данных, но данные в клиенте не обновлялись после refre sh несколько раз.
Требуется 1- 3 минуты, затем данные обновляются в клиенте после refre sh, в другом случае, если я сначала вызываю запрос GET в почтальоне, клиент будет напрямую обновлен.
POST
func addBlock(ir iris.Context) {
request := md.Block{}
err := ir.ReadJSON(&request)
if err != nil {
ir.StatusCode(iris.StatusBadRequest)
ir.WriteString(err.Error())
return
}
if request.Block_name == "" {
ir.StatusCode(iris.StatusBadRequest)
ir.Write([]byte(`{"Message": "StatusBadRequest"}`))
return
}
db.Create(&request)
a := db.NewRecord(request)
fmt.Println(a)
if a == true {
ir.StatusCode(iris.StatusBadRequest)
} else {
status := md.ResponseStatus{}
status.Status = "Success"
status.Message = "add Blocks"
status.Id = request.Block_id
json.NewEncoder(ir).Encode(status)
}
}
GET
func getBlocksByfarmID(ir iris.Context) {
farmID, err := ir.Params().GetInt("farm_id")
if err != nil {
farmID = 0
}
var blockModel []md.Block
db.Where("farm_id = ?", farmID).Find(&blockModel)
if len(blockModel) == 0 {
status := md.ResponseStatus{}
ir.StatusCode(iris.StatusNotFound)
status.Status = "Not Found"
status.Message = fmt.Sprintf("No Found block with farm id : %d", farmID)
json.NewEncoder(ir).Encode(status)
} else {
json.NewEncoder(ir).Encode(blockModel)
}
}
Клиент Android с использованием Retrofit2 GET
@Headers({"Content-Type: application/json"})
@GET("farm/{farm_id}/blocks")
Call<List<BlocksModel>> getBlockByFarmID(@Path("farm_id") String farm_id);
POST
@Headers({"Content-Type: application/json"})
@POST("farm/blocks/{action}")
Call<AddBlock> blockFunc(@Path("action") String action,
@Body String jsonBody);
Я ожидаю обновления клиента в реальном времени при добавлении данных в базу данных, не дожидаясь 1-3 минут, или сначала вызовите API через почтальона.