【发布时间】:2014-11-01 23:41:36
【问题描述】:
我想用 REST-ful api 编写一个 Django 应用程序。 Django REST 框架提供了三个内置的模型序列化器: ModelSerializer 序列化成这样的东西
{
'normal_field': 'value',
'foreign_key_field': 42
}
和 HyperlinkedModelSerializer 序列化成这样的东西
{
'normal_field': 'value',
'foreign_key_field': 'http://domain/api/myothermodel/11'
}
我的问题是,是否有另一种好方法来序列化数据,以便客户端直接知道哪些字段必须解析,哪些字段不需要解析。
示例:接收此消息的客户端
{
'foo': 'http://domain/api/myothermodel/11',
'bar': 'http://otherdomain/api/myothermodel/12'
}
不知道 foo 或 bar 是否应该是可解析的外键字段而不是纯 url。比如:
{
'foo': 'http://domain/api/myothermodel/11', # Here the client might know that this is only a plain url.
'bar': {
'_foreignkey': true, # Tells the client that this field should behave as a foreign key which has to be resolved first
'url': 'http://otherdomain/api/myothermodel/12'
}
}
是否有任何标准或最佳做法?或者最佳实践是客户端不从 JSON 中知道这一点,而是从它拥有或从服务器获取的其他代码中知道这一点?
更新: 可选,您可以添加对于 AngularJS 等一些知名客户端库的最佳实践方式。
【问题讨论】:
-
这实际上是一个我自己没想到的有趣问题。对我们来说,前端人员提前知道必须解决什么
-
您能否澄清一下您所说的必须首先解析的外键是什么意思?通过已解决,您的意思是相关实例在您的 REST API 中具有资源位置端点吗?并且通过先解决,先进行什么具体操作?
-
是:“解析”表示数据代表信息,获取相关实例。 “首先”表示我最终想在我的站点上显示该实例和所有相关实例。所以客户端必须遵循所有的关系并在页面被渲染之前获取实例。但是:在我的第一个示例中,数据是这种“可解析”的信息,而不仅仅是一些普通数据,这一点并不明显。这是否更清楚?
-
我明白了,您的目标是自描述 API,或多或少类似于 HATEOAS。 AFAIK,虽然有一些work on that front,但 JSON 还没有标准。无论您选择何种设计,记录 API 都是一个好主意。
-
@Fiver:谢谢。如果您将帖子设置为答案,我可以接受并(稍后)奖励赏金。
标签: json django rest serialization django-rest-framework