【发布时间】:2017-09-12 11:27:40
【问题描述】:
编写 API 我曾经在 Java(或 PHP,等等)端验证所有输入参数,但现在我们将 DB 移至 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
【问题讨论】:
-
您的问题终于解决了吗?你走哪条路?
-
@joanolo 我得出了一些结论并回答了我自己的问题(你可以在下面阅读),所以我想说让大部分逻辑由 Java 负责,因为它允许你使所有东西都通用,因为例如
ErrorDetail对象,您可以在 DB 端自定义它,但错误不仅可能来自数据库验证阶段,这将导致您在 DB 和 Java 端准备相同的错误对象。如果你愿意,我可以告诉你更多我的想法:)
标签: java php json postgresql