【问题标题】:How to manage a Django Rest Framework codebase when API versions change?API 版本更改时如何管理 Django Rest Framework 代码库?
【发布时间】:2021-05-05 21:05:30
【问题描述】:

关于 api 版本控制的主题很多。但是许多人没有讨论版本控制如何影响代码库。当版本更改时,您如何管理代码库?示例将不胜感激。

示例:版本 1 的代码库

默认版本控制:NamespaceVersioning

型号:

class Book(models.Model):
    name=models.CharFiedl(max_length=20)
    pages=models.IntegerField()

查看:

class BookView(views.ViewSet):
    def List(self, request):
        books = Books.objects.all()
        return Response(BookSerializer(books, many=True).data)

序列化器:

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        fields = ['name', 'pages']

引入重大更改后,版本 2 的代码和文件夹结构会是什么样子?

【问题讨论】:

    标签: django api django-rest-framework versioning


    【解决方案1】:

    通过python包例如views.py可以分成单独的<name>_<version>.py文件。然后根据所需的导入效果,如果 url 导入必须保持不变,它们可以在 __init__.py 文件中导入为from <name>_<version> import *

    假设您在views.py 中有View1View2;您可以将实现代码放在名为views 的文件夹中的单独文件中,其中__init__.py 如上所述导入 - from file1 import *

    【讨论】:

    • 感谢您的回答。所以这意味着代码重复。为了简单起见,假设我们有两个 django 应用程序。应用 1 引入了重大更改,并被版本化为版本 2。您是更改应用 2 的版本以保持一致性还是将其保留在版本 1?
    • 如果您想保持旧版本正常工作,那么突破性的更改几乎总是意味着代码重复。
    • 这取决于您想要实现的目标。但是,如果您不想在 App2_v1 中使用 App1_v2 ,那么使用 App1_v2 有什么意义呢?如果您不能一次更新所有内容并且需要同时工作 2 个版本(扼杀模式),那么您需要复制。
    • 我想我不明白这个问题。你有 App1 v1 和 v2 和 App2 取决于 App1 吗?如果是,那么如果您不在这里使用 App1 v2,为什么还要打扰它呢?
    • 它们是相互独立的。问题更多是关于设计风格。即使应用 2 没有引入重大更改,保持所有应用的版本相似是个好主意吗?
    猜你喜欢
    • 2012-12-25
    • 2015-07-04
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多