REST API Ответ на задержку клиента, но данные успешно добавлены в базу данных - PullRequest
0 голосов
/ 29 мая 2020

Сборка 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 через почтальона.

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