何时使用API​​与Django内置函数

时间:2019-02-21 20:56:44

标签: django rest django-rest-framework

我有一个使用django构建的网站/本地应用程序组合。为了支持本机应用程序,我使用django-rest-framework构建了一个api后端。我从多个来源中读到,这是a good idea。现在,如果我想与数据库进行交互,我似乎有太多选择,而且我想知道什么是行业最佳实践。

例如,如果我想浮现一个简单的表单来更新User,则根据我过去的django经验,我倾向于创建UpdateView。但是,我现在想知道是否应该构建一个通过AJAX发布到我的User API端点的表单。根据我的阅读,似乎第二个选项与API优先的方法更加一致。

但是,这还需要我做更多的前期工作,才能有效地重建许多内置的Django功能。另外,在我看来,这效率较低,因为以前涉及单个HTTP请求的页面现在将需要多个页面。关于每页多个HTTP请求的优化问题是否有效?我应该注意一个上限(例如,如果我允许用​​户在单个页面上更新/插入数十条记录)?

1 个答案:

答案 0 :(得分:1)

  

此外,在我看来,这效率不如以前的页面   涉及一个HTTP请求,现在将需要多个。

欢迎来到单页应用程序世界:)

您完全正确,这是困扰许多SPA风格网站的问题。与返回服务器呈现的HTML页面的单个HTTP调用相比,执行多个API调用总是会导致您的网站/应用程序的前期加载时间更长。

构建“经典”网站没有任何问题,尽管遵循“ API首先”的优点,但不会使其他构建网站的方法无效。构建单个页面的应用程序将不可避免地使您重写Django免费提供的许多功能,例如表格或i18n。另一方面,将前端和后端完全分开,可以更轻松地管理和雇用在应用程序不同部分工作的不同人员。

在不确切知道要构建什么的情况下给您一个直接的答案有点困难。但是我可以根据我的经验给您一些建议。

将您的API定制到您的前端。

开发人员似乎喜欢构建漂亮的REST API:每个资源都有自己的终结点,正确的HTTP响应,PUT,POST,DELETES等。但是,如果您的前端需要执行20个请求才能提交单个表单,那么这一切都没有用。 。务实。为您的前端构建一个终结点,该终结点可在单个HTTP调用中完成所需的一切。这不仅容易,而且更安全,您可以在单个数据库事务中完成所有操作,并在发生错误时回滚。

预热您的前端

您的某些端点可能永远不会或很少会更改。您可能有一个“国家”终结点,该终端返回要在下拉列表中显示的国家列表,或者您的用户有一个联系人列表,该联系人不会经常更改。您可以将所有信息放在一个端点中,并在打开页面后立即让您的前端加载它。

在某些端点中返回预渲染的HTML。

我过去曾这样做,有人为此而杀了我:)我们有一个动态表单,该表单根据后端的某些配置而改变。这样做是一种“纯API”方式,仅需要构建端点才能返回此配置,然后在前端动态构建表单。不仅如此,我们还必须将表单验证与后端模型验证相匹配。我认为这浪费了很多时间。 DRF有一个很好的技巧,实际上您可以告诉DRF将序列化器呈现为HTML表单,然后可以自定义表单模板,并根据需要使其返回Angular或React模板。

GraphQL

GraphQL可以解决此类问题,但我从来没有在Django中构建GraphQL后端,因此我对此没有太多建议。