我正在使用php构建一个安静的Web服务。我想实现订阅/订阅者,其中两者都是用户实体。
我有一个数据库模型如下:
subscription table/model:
id,
subscriber_id,
publisher_id
user table/model:
id,
firstname,
lastname
我想获取用户的$ id作为get请求,并按以下格式返回订阅者列表的以下json响应:
[
{
"id" : "USER_SUBSCRIPTION_ID",
"subscriber" : {
"id" : "subscriber1",
"firstname" : "subscriber1_fname",
"lastname" : "subscriber1_lname",
},
"publisher" : {
"id" : "requester_id",
"firstname" : "requester_fname",
"lastname" : "requester_lname",
}
},
{
"id" : "USER_SUBSCRIPTION_ID",
"subscriber" : {
"id" : "subscriber1",
"firstname" : "subscriber2",
"lastname" : "subscriber2",
},
"publisher" : {
"id" : "requester_id",
"firstname" : "requester_fname",
"lastname" : "requester_lname",
}
}
]
我还写了一个序列化器,它获取我的数据库模型并将其编码为json。我不知道如何在这种情况下使用它,因为我不能将publisher_id和subscriber_id替换为用户表中的相应记录。 什么是最简单,最干净的方法?
由于
答案 0 :(得分:1)
如果您使用的应用程序框架(例如Zend,Phalcon PHP或类似内容),返回此类数据的最佳做法是:
您的模型应具有任何敏感属性private
或protected
。这就是所谓的encapsulation。在你的情况下,似乎没有,但重要的是要记住。
从服务器检索模型时,您只需对其执行json_encode
,它就会生成您提供的内容作为示例,而不会显示任何不可见的属性。
如果您正在使用没有框架的对象,则上述情况适用。
如果您不使用OOP,我建议您这样做。这将允许PHP为您完成工作,即使它只是“REST”服务,因为它可以用表示数据的对象进行类型处理。
最后,如果你没有对此进行OOP,那么就没有安全的类型 - 玩杂耍了;您必须在JSON编码之前手动构建数据。
修改强>
值得一提的是,如果您正在使用框架,通常可以使用导出方法格式化输出,例如Phalcon PHP DB结果上的toArray()
方法。
此外,如果您使用vanilla PDO
进行数据库连接,则可以json_encode()
$statement
直接上传。