REST URL 能否将 UI 呈现提示作为元数据发回?

Can REST URLs send back UI rendering hints as metadata?


我找不到明确的文档提到 UI 渲染提示是否可以作为 REST 元数据发回。首先,什么都可以归类为REST元数据?当然,属性的数据类型可以是元数据,但是表示属性是单值还是多值的表示提示也可以描述为元数据吗? "ishidden" 和 "isReadOnly" 呢?根据我的理解,min/max/regexp/fixed 值之类的信息可以作为元数据使用,但不确定与我上面提到的表示提示相关的任何内容是否适合 REST 元数据?任何指针都会有最大的帮助。

谢谢,
稻田

老实说,您可以自由地将您想要的负载发送回 REST 客户端。但是,我不确定始终使用这些 UI-oriented 元数据是否是个好主意。事实上,您也可以拥有使用数据而不会出现 UI 问题的应用程序。

您可以实施一种机制,让您 select 在内容协商中 return 将元数据级别 return 发送给 REST 客户端(Conneg 基于 header Accept) 以类似于 OData 所做的方式。下面是一个示例:

GET serviceRoot/People
Accept: application/json;odata.metadata=minimal

您可以想象 header Accept 的以下值:

  • 无元数据:application/json;元数据=none
  • 结构元数据(属性 类型,...):application/json;元数据=最小
  • 验证元数据(用于确定属性的预期值):application/json;元数据=验证
  • UI 呈现元数据(只读,...):application/json;元数据=呈现

然后您可以按如下所述构建内容:

{
    "property1": "value",
    // Structural
    "property1@metadata": {
        "type": "string"
    },
    "property2": 10,
    // Structural + validation
    "property2@metadata": {
        "type": "integer"
        "minValue": 2,
        "maxValue": 15
    },
    "property3": 10,
    // Structural + ui rendering
    "property3@metadata": {
        "type": "integer"
        "minValue": 2,
        "maxValue": 15,
        "readOnly": true,
        "hidden": false
    }
}

如果您想了解如何在 OData v4 中处理元数据,可以使用来自 odata.org 的以下链接:

编辑:在评论中,inf3rno 下划线 header Prefer 也可用于描述所需的元级别。

下面是一个使用示例:

GET serviceRoot/People
Accept: application/json
Prefer: metadata=rendering

希望对你有帮助, 蒂埃里