PHP API最佳实践 - 回显json_encoded对象:坏还是好?

时间:2014-12-30 00:00:25

标签: php json rest

我提前道歉,因为我无法回答我的问题,但请耐心等待我,我会尽量做到尽可能准确。但是,我的问题有点模糊,很难问。

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

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

例如,假设您正在返回一个对象,其中您只需要表中的主键,描述和名称。但是,该对象还具有其他用途的属性(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返回?是一种或另一种不良做法? 或者这是个人偏好的问题?

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

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

2 个答案:

答案 0 :(得分:4)

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

我只会返回请求的列,并且这些列会被更改,因此它们不会镜像架构。

答案 1 :(得分:2)

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

请参阅http://www.sitepoint.com/best-practices-rest-api-scratch-implementation/ - 关于"字段,过滤,排序和搜索的部分"