【问题标题】:When to hit API vs Django Built-in Functions何时使用 API 与 Django 内置函数
【发布时间】:2019-02-21 20:56:43
【问题描述】:

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

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

但是,这也需要我做更多的前期工作来有效地重建许多内置的 django 功能。此外,在我看来,这效率较低,因为之前涉及单个 HTTP 请求的页面现在需要多个。围绕每页多个 HTTP 请求的优化问题是否有效?是否存在我应该警惕的上限(例如,如果我允许用​​户在单个页面上更新/插入数十条记录)?

【问题讨论】:

    标签: django rest django-rest-framework


    【解决方案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 后端,因此对此我无法提供太多建议。

    【讨论】:

      猜你喜欢
      • 2022-01-09
      • 2022-01-15
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      • 2018-04-13
      • 2016-07-16
      相关资源
      最近更新 更多