我提前道歉,因为我无法回答我的问题,但请耐心等待我,我会尽量做到尽可能准确。但是,我的问题有点模糊,很难问。
我最近和我的一位同事讨论过通过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编码该对象,您也会将其发回。他的主要反应是,只有应该被发回的属性应该是公开的,如果我们发送回额外的数据,那么什么呢?我只是很难同意,但想知道一种方法或其他方法是否有任何理由受到青睐。
提前感谢您的意见/答案。
答案 0 :(得分:4)
我同意你的看法。您不应该通过REST响应直接公开您的架构,以免某些不道德的类型决定破解您的设置,现在对您的架构布局有一个有根据的猜测,即使使用有效的api密钥也可能发生。
我只会返回请求的列,并且这些列会被更改,因此它们不会镜像架构。
答案 1 :(得分:2)
我个人认为可以返回整个对象,而不仅仅是我目前需要的字段。这使得api更加灵活。 但是为了保存要传输的数据,你可以允许api让客户端定义它想要的列,它是双方的双赢,api本身具有你想要的灵活性,客户端只消耗它真正需要的数据
请参阅http://www.sitepoint.com/best-practices-rest-api-scratch-implementation/ - 关于"字段,过滤,排序和搜索的部分"