PostgREST returns 错误 JSON 值没有错误(Python 请求)

PostgREST returns no error with wrong JSON values (Python request)

我正在尝试为 postgREST 创建一个客户端(PostgreSQL 13 的最新版本)

当我尝试插入数据时,我感觉到(在我看来)一个奇怪的行为:当我使用 json.dumps 进行插入请求时,如果我的值错误,我会得到一个 201 代码作为回应。

工作代码
字段 id 是主键。

headers["Authorization"] = mytoken
myjson = {"id": "13", "name":"nameinserted"}
r = requests.post(url, json=myjson, headers=headers)

Returns一个201代码 如果我重试该代码,我会得到 409(这是正常的)

代码无效:
这个总是 returns 我一个 201 代码,并且从不在数据库中插入任何东西(即使有正确的数据)。 区别是我用错了json.dumps(myjson)

headers["Authorization"] = mytoken
myjson = {"id": "13", "name":"nameinserted"}
myjson = json.dumps(myjson)
r = requests.post(url, json=myjson, headers=headers)

为什么我没有收到有关数据或格式错误的错误消息json?

在您给出的第一个示例中,发送到 PostgREST 的 JSON 编码有效载荷是:

'{"id": "13", "name": "nameinserted"}'

第二个例子,再次编码后,发送的payload为:

'"{\"id\": \"13\", \"name\": \"nameinserted\"}"'

PostgREST 将第一个有效负载解析为 JSON 值;另一方面,第二个有效负载被解析为字符串值,例如等同于 '"any_string"'。 PostgREST 对这种类型的负载很宽容,不会给出错误但 defaults it to an empty JSON array '[]', which is allowed even if the array is empty due to bulk insertion,并以 201.

响应