关于API设计的问题

时间:2011-04-11 14:47:02

标签: python django json api

我正在研究最好的“设计模式”Web API。我目前正在使用Django作为我的Web框架。我创建了一个非ajax接口,导致整个页面在每个请求时重新加载。

现在,我开始将ajax合并到界面中。为了便于讨论,我需要添加API的两个示例功能如下

1)测试版页面:用户提供电子邮件地址。我想对服务器端进行ajax调用,看看它是否已存在于我的数据库中。我对此调用的初始设计是类似于

的视图函数
def check_email(request):
    if request.method == "POST":
           # check db

           # return JSON true/false

2)个人资料图片上传,新的个人资料图片已添加到您的网页而不会重新加载整页

据我所知,最好的方法是通过对视图函数的POST调用。然后,响应将返回JSON,然后我可以相应地注入到DOM中。

有人可以告诉我,如果我正在设计这个API吗?

注意:我已经检查了django-piston,它似乎也非常有用。

感谢

2 个答案:

答案 0 :(得分:3)

是的,你似乎走在了正确的轨道上。一个狡辩:要检查数据库中是否存在电子邮件地址,理想情况下应该使用GET而不是POST,因为没有更新信息 - 您只是询问是否存在某些内容。

返回JSON的另一种方法是返回预渲染的HTML,您可以在适当的位置将其直接注入DOM。这样做的好处是你可以使用Django的模板机制来渲染现有的模板片段 - 唯一的区别是你单独渲染片段,而不是在整个HTML页面中包含/扩展它。

答案 1 :(得分:2)

你是正确的,但我会使用request.is_ajax()检查它是否真的是ajax请求,以相应地返回响应。来自django request docs

  

如果请求是通过XMLHttpRequest发出的,则返回True,方法是检查字符串'XMLHttpRequest'的HTTP_X_REQUESTED_WITH标头。大多数现代JavaScript库都会发送此标头。如果你编写自己的XMLHttpRequest调用(在浏览器端),如果你想让is_ajax()工作,你必须手动设置这个头。

这将允许您为已禁用javascript的用户分隔返回值,从而允许他们仍然正确使用您的网站。如果您没有使用javascript库,请自行设置。