【问题标题】:PHP API best practices - echoing out json_encoded object: bad or good?PHP API 最佳实践 - 回显 json_encode 对象:好还是坏?
【发布时间】:2015-02-26 03:59:17
【问题描述】:

我提前道歉,因为我无法表达我的问题,但请多多包涵,我会尽量做到准确。但是,我的问题有点模糊,很难问。

我最近一直在与我的一位同事讨论有关通过 PHP 从 RESTful API 发回的响应。我们的不同之处在于服务器的响应。

他的论点是只对原始对象(它是数据库表中一行数据的 PHP 对象表示)进行 json_encode。但是,我发现问题在于,例如,您只需要发回几列数据。

例如,假设您要返回一个对象,您所需要的只是表中的主键、描述和名称。但是,该对象还具有其他用途的属性(var1、var2 等) 如果像这样回显:

echo(json_encode($object));

JSON 看起来像这样:

{
    "primary_key": 4,
    "description": "hello",
    "name": "name namerton",
    "var1": null,
    "var2": null,
    "var3": null,
    "var4": null,
    "var5": null,
    "var6": null
}

我通常更喜欢通过以下方式循环访问我的对象:

$objectArray = array(
    "primary_key" => $object->primary_key,
    "description" => $object->description,
    "name" => $object->name
);
echo(json_encode($objectArray));

将数据转换为数组,返回一个更像这样的 JSON 结果:

{
    "primary_key": 4,
    "description": "hello",
    "name": "name namerton"
}

我想,我的问题是,对于 json 编码对象并从 API 返回它们是否有任何标准?一种或另一种是不好的做法吗? 还是这是个人喜好问题?

我主要担心发回大量空键,甚至从服务器发回无意的数据。 IE。如果您只希望发回主键、描述和名称,但设置了其他两个属性,那么如果您对该对象进行 JSON 编码,您也会将它们发回。他的主要回应是,只有应该发回的属性才应该是公开的,如果我们发回额外的数据,那又如何?我只是很难同意,但想知道一种方法或其他方法是否有任何理由受到青睐。

提前感谢您的意见/回答。

【问题讨论】:

  • 只是添加到以下答案:如果这是您可以考虑的因素,更广泛的对象可能允许更大的缓存可能性。

标签: php json rest


【解决方案1】:

我同意你的看法。您不应该通过 REST 响应直接公开您的架构,以免一些不道德的类型决定破解您的设置,现在对您的架构布局进行有根据的猜测,即使使用有效的 api 密钥也可能发生这种情况。

我只会返回请求的列,这些列将被更改,因此它们不会反映架构。

【讨论】:

    【解决方案2】:

    我个人认为返回整个对象是可以的,而不仅仅是我当前需要的字段。这使得 api 更加灵活。 但是要保存要传输的数据,您可以允许 api 让客户端定义它想要的列,这对双方来说都是双赢的,api 本身具有您想要的灵活性,客户端只使用它真正需要的数据.

    参见http://www.sitepoint.com/best-practices-rest-api-scratch-implementation/ - 关于“字段、过滤器、排序和搜索”的部分

    【讨论】:

    • 有趣。听起来这是个人喜好问题,而不是基于标准的任何事情。我想我们将继续讨论并找到解决方法。由于您首先回答了事实,因此选择您的答案作为答案。但是,两个答案都很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 2014-06-16
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多