2011-04-11 94 views
0

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

现在,我开始将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

你说得对,但我会用request.is_ajax()来检查它是否实际上是一个ajax请求来相应地返回响应。从django request docs

返回TRUE,如果请求被经由一个XMLHttpRequest制成,通过检查字符串“的XMLHttpRequest”的HTTP_X_REQUESTED_WITH报头。大多数现代JavaScript库都发送这个头文件。如果您编写自己的XMLHttpRequest调用(在浏览器端),如果您想使用is_ajax(),则必须手动设置此标头。

这将允许您为JavaScript禁用的用户单独返回值,以便他们仍然可以正确使用您的网站。如果你没有使用JavaScript库,你可以自己设置。

+0

Tract ...像胃肠? – MattH 2011-04-11 15:16:58

+0

感谢您的回复也 – josephmisiti 2011-04-11 15:39:56

+0

@MattH正好....(错字固定) – 2011-04-11 17:40:57

3

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

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

+0

感谢您的回复 – josephmisiti 2011-04-11 15:39:16