繁体   English   中英

有关API设计的问题

[英]Question Regarding API Design

我正在研究最佳的“设计模式” 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-活塞,而且看起来也很有用。

谢谢

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

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

您是正确的,但是我将使用request.is_ajax()来检查它是否实际上是一个ajax请求,以相应地返回响应。 来自Django请求文档

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

这将允许您为禁用了javascript的用户分隔返回值,从而使他们仍然可以正确使用您的网站。 如果您不使用JavaScript库,则可以自行设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM