我正在尝试为我的REST API构建PATCH方法。我无法理解的是如何从JSON原始字段中获取名称,以将其用作UPDATE查询中的参数,以便查询可以知道要更新哪个字段,因为与PUT不同,PATCH仅需要更新一个字段,并且而不是数据库中的整个行。我正在使用SQLite3
编辑: 代码:
func PatchServer(c echo.Context) error {
patchedServer := new(structs.Server)
requestID := c.Param("id")
if err := c.Bind(patchedServer); err != nil {
return err
}
if reflect.TypeOf(patchedServer.Name).Kind() != reflect.String || reflect.TypeOf(patchedServer.Components).Kind() != reflect.Int {
panic("Insert a string or an int")
} else {
sql := "UPDATE servers SET server_name = CASE WHEN ? IS NOT NULL THEN ? END WHERE id = ?"
stmt, err := db.Get().Prepare(sql)
if err != nil {
panic(err)
}
_, err2 := stmt.Exec(patchedServer.Name, patchedServer.Name, requestID)
if err2 != nil {
panic(err2)
}
fmt.Println(patchedServer.ID, patchedServer.Name, patchedServer.Components)
fmt.Println("Requested id: ", requestID)
return c.JSON(http.StatusOK, "Patched!")
}