Django REST framework - 元数据

[OPTIONS] 方法允许客户端确定与资源相关联的选项和 / 或要求,或者服务器的能力,而不暗示资源操作或启动资源检索。

—— RFC7231,第 4.3.7 节。

REST framework 包含一个可配置的机制,用于确定你的 API 应该如何响应 OPTIONS 请求。这允许你返回 API 模式或其他资源信息。

目前没有被广泛采用的关于 OPTIONS 请求应该返回何种风格响应的确切约定,因此我们提供了一种临时风格,返回一些有用的信息。

以下是一个示例响应,展示了默认情况下返回的信息。

HTTP 200 OK
允许:GET, POST, HEAD, OPTIONS
内容类型:application/json

{
    “名称”:'待办事项列表',
    “描述”:'列出现有的 '待办事项',或创建一个新项目。',
    “渲染”:[
        “application/json”,
        “text/html”
    ],
    “解析”:[
        “application/json”,
        “application/x-www-form-urlencoded”,
        “multipart/form-data”
    ],
    “操作”:{
        “POST”:{
            “note”:{
                “类型”:“string”,
                “必需”:false,
                “只读”:false,
                “标签”:“标题”,
                “最大长度”:100
            }
        }
    }
}

可以通过 'DEFAULT_METADATA_CLASS' 设置键全局设置元数据类:

REST_FRAMEWORK = {
    'DEFAULT_METADATA_CLASS':'rest_framework.metadata.SimpleMetadata'
}

或者可以为视图单独设置元数据类:

class APIRoot(APIView):
    metadata_class = APIRootMetadata

    def get(self, request, format=None):
        return Response({
            ...
        })

REST framework 包仅包含一个名为 SimpleMetadata 的元数据类实现。如果你想使用另一种风格,你需要实现一个自定义的元数据类。

创建模式端点

如果你有特定要求,用于创建可以通过常规 GET 请求访问的模式端点,你可能会考虑重用元数据 API 来实现。

例如,可以在视图集中添加以下路由,以提供可链接的模式端点。

@action(methods=['GET'], detail=False)
def api_schema(self, request):
    meta = self.metadata_class()
    data = meta.determine_metadata(request, self)
    return Response(data)

选择这种方法有几个原因,包括 OPTIONS 响应是不可缓存的。

如果要提供自定义元数据类,你需要覆盖 BaseMetadata 并实现 determine_metadata(self, request, view) 方法。

可能需要执行的有用操作包括返回模式信息、使用 JSON 模式等格式,或向管理员用户返回调试信息。

示例

以下类可用于限制 OPTIONS 请求返回的信息。

class MinimalMetadata(BaseMetadata):
    """
    不包括字段和其他信息的 `OPTIONS` 请求。
    只返回名称和描述。
    """
    def determine_metadata(self, request, view):
        return {
            'name':view.get_view_name(),
            'description':view.get_view_description()
        }

然后配置你的设置以使用这个自定义类:

REST_FRAMEWORK = {
    'DEFAULT_METADATA_CLASS':'myproject.apps.core.MinimalMetadata'
}

第三方包

以下是提供额外元数据实现的第三方包。

DRF-schema-adapter

drf-schema-adapter 是一组工具,用于更轻松地向前端框架和库提供模式信息。它提供了一个元数据混合类以及 2 个元数据类和多个适配器,适合生成 json-schema 以及各种库可读的模式信息。

如果你愿意,它还提供了一个导出器,可以将这些模式信息导出到 json 文件。

你可能感兴趣的:(pythondjango)