选择在客户端/ api /服务器解决方案中编写逻辑的正确位置

时间:2014-03-22 14:10:36

标签: django angularjs api rest tastypie

我目前正在使用这种非常标准的模式设计解决方案:

  • 使用Django的1个web-app(它托管唯一的数据库)
  • 使用AngularJS的1个客户端移动应用
  • 此客户端应用程序使用REST API(在带有Tastypie的Django Server上实现)来获取和设置数据。

作为这些架构的初学者,我只是问自己逻辑应该去哪里,我想用一个简单的示例案例来回答我的问题:

  1. 在移动客户端应用中,要求客户只在表单中输入电子邮件地址进行订阅。
  2. a)如果地址未使用,则完成铭文(填写在DB上的内容)。
  3. b)如果使用该地址,则会引发错误,并要求用户重试。
  4. 执行这些简单操作的工作流程是什么?

    我要求举例说明如何将移动应用中输入的电子邮件地址与我的数据库中现有的电子邮件地址进行比较:

    • 我是否应该从服务器获取所有电子邮件地址的列表,然后在我的客户端应用程序中执行逻辑以说明输入的地址是否已存在?这似乎是一个糟糕的方法,因为获取大量元素并不具备Web服务的性能,客户端也不应该看到所有的电子邮件地址。

    • 我应该将输入的电子邮件地址发送到服务器并让它进行比较吗?但如果是的话,我该如何发送数据呢?据我所知,PUT / POST是在DB中写入的,而不仅仅是将数据发送到服务器来分析它并继续进行逻辑。

    我觉得我在这里明显遗漏了一些东西...... 非常感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

PUT和POST旨在用于创建和更新资源。服务器可能有也可能没有数据库。它可能使用本地文件系统,或者它可能处理内存中的任何内容。这不是客户的业务。在提供API的大多数服务器上拥有业务逻辑当然很常见。

使用PUT / POST将电子邮件地址发送到服务器。服务器检查电子邮件地址是否(a)有效,(b)允许。如果检查失败,请按照RFC中的说明向客户返回相关响应。我会选择403 Forbidden,这表示发送到服务器的数据存在问题。在响应中使用实体来详细说明请求的问题。

答案 1 :(得分:0)

我在一个有角度的网页应用程序中做过类似的事情,

我已停用提交按钮,并在电子邮件字段旁添加了检查可用性按钮。

我已将电子邮件发送到服务器并检查它是否已存在并将结果发送给客户端, 然后要求用户输入备用电子邮件(如果无效)或启用表单的提交按钮

<强>替代地

当用户离开电子邮件字段时,您可以将电子邮件发送到验证电子邮件的服务,并获取响应,并显示此电子邮件已存在的消息并禁用提交,或启用提交按钮<否则< / p>