gpt4 book ai didi

java - 可以在 PostgreSQL 端验证 JSON 吗?

转载 作者:可可西里 更新时间:2023-11-01 00:40:11 24 4
gpt4 key购买 nike

编写 API 我曾经在 Java(或 PHP,无论什么)端验证所有输入参数,但现在我们将数据库移至 PostgreSQL,这为我们提供了强大的 JSON 功能,例如从表行构建 JSON 等等(我到目前为止,没有发现任何我们不能没有 PGSQL JSON 函数的东西)。所以我想如果我对 Postgres 进行所有参数验证(同时考虑到我可以直接从数据库返回 JSON)怎么办?

在 Java 中我是这样写的:

if (!params.has("signature")) 
//params comes from @RequestBody casted to JSONObject
return errGenerator.genErrorResponse("e01"); //this also need database access to get error description

在 Postgres 上我会这样(测试,按预期工作):

CREATE OR REPLACE FUNCTION test.testFunc(_object JSON)
RETURNS TABLE(result JSON) AS
$$
BEGIN
IF (_object -> 'signature') IS NULL --so needed param is empty
THEN
RETURN QUERY (SELECT row_to_json(errors)
FROM errors
WHERE errcode = 'e01');
ELSE --everything is okay
RETURN QUERY (SELECT row_to_json(other_table)
FROM other_table);
END IF;
END;
$$
LANGUAGE 'plpgsql';

等等……

目前我看到的一个问题是,如果我们转向 MS SQL 或 Sybase,它将需要重写所有过程。但随着 NoSQL 现在越来越多,这似乎不太可能,如果我们转向 NoSQL DB,我们还必须重新编码所有 API

最佳答案

您基本上必须考虑两个项目:

  1. 支票离数据存储越近,它就越安全。如果您让数据库执行所有检查,那么无论您如何与它交互,无论是通过您的应用程序,还是通过您可能使用的某些第三方工具(即使只是为了维护),它们都会执行。从这个意义上说,在数据库端进行检查可以提高安全性(如“数据一致性”)。在这方面,让数据库执行检查确实很有意义。

  2. 您将支票放得离用户越近,您响应他/她的输入的速度就越快。如果您的 Web 应用程序需要快速响应时间,您可能希望在客户端端进行检查。

并考虑一个重要的问题:

  1. 您可能还必须考虑您的团队知识:开发人员更擅长什么。如果您对 Java 库的了解远胜于您对数据库函数的了解...那么在 Java 端执行所有检查可能是有意义的。

您可以采用第三种方式:依次进行两项检查,首先是应用程序(客户端)端,然后是数据库(服务器)端。除非你有一些复杂的自动化,否则这需要额外的工作来确保执行的所有检查都是一致的。也就是说,在数据库检查时,不应在客户端阻止任何允许通过的数据。至少,最基本的检查是在第一阶段执行的,所有这些(即使它们是多余的)都在数据库中执行。

如果您有时间在多个应用程序层中移动数据,我会安全地进行。但是,要做出的选择是针对具体情况的。

关于java - 可以在 PostgreSQL 端验证 JSON 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43441422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com