1

我有一个 Django 服务器,负责将 JSON 格式的文件提供给控制器机器。我的服务器从 POST 请求中获取数据,并在 GET 请求中提供 JSON 文件。我想知道在服务器上创建这个桥的最 RESTful 和最有效的方法是什么?

我正在考虑为每个 POST 请求创建一个 JSON 模型并将实例存储在我的数据库中,并将这些实例动态地打包到 JSON 文件中,并在 GET 请求上为它们提供服务。另一种方法是在 POST 请求上创建 JSON 文件,将它们保存在服务器上的文件夹中,并在 GET 请求上提供这些文件。

哪种方式更好,为什么?还是我没有看到更好的方法?

4

2 回答 2

0

你为什么要创建文件?您可以让 Django 视图返回 JSON 响应而不是 HTML 响应:

import json

# in your view:
data = {}
return HttpResponse(json.dumps(data), mimetype="application/json")

从可用数据动态构造 JSON 数据,如果 JSON 响应很大,则添加缓存(例如,memcachedVarnish)。

这将防止某些问题(如果 GET 请求完成但还没有 JSON 文件怎么办?)。这样,您可以根据您拥有的数据生成 JSON,或者返回带有错误消息的 JSON。

于 2012-06-21T20:27:38.520 回答
0

我研究了带有自然键和依赖项等的json 序列化,以控制被序列化的字段。我还尝试使用中间件wodofstuff来实现更深层次的外键序列化。但是,我决定使用模板来呈现 JSON 响应。

一些陷阱是

  • 我负责格式化 JSON(更容易出错,例如缺少分号)
  • 我负责转义字符
  • 渲染比内置序列化慢?

一些优点是

  • 我可以控制序列化的内容(即使基础模型已更改)
  • 我可以格式化 JSON 文件上的多对多或外键关系,但我喜欢

低密度脂蛋白;就我而言,我需要的 JSON 文件的格式是非常自定义的。它在字典列表中有字典。有些字段是迭代的,所以我在模板中有 for 循环来呈现它们。但是,该格式要求将迭代对象中的某些字段封装在列表中,而不是字典。

这是我在考虑simplejson时遇到的障碍。通过使用类似的东西

import simplejson as json
def encode_complex(obj):
    if isinstance(obj, complex):
        return [obj.real, obj.imag]
    raise TypeError(repr(o) + " is not JSON serializable")
json.dumps(2 + 1j, default=encode_complex)
'[2.0, 1.0]'

我可以设法返回迭代数据;但是,我需要迭代中的迭代和自定义对象类型(列表或字典)来封装某些迭代。最后,(可能是缺乏知识或缺乏耐心)我决定只在模板中进行。

我觉得通过模板渲染它不是最可扩展或“最智能”的方式,它可能以更好的方式完成吗?请随时证明我是对还是错。

于 2012-07-04T17:06:52.937 回答