JSON Hyper-Schema:为应用程序 URL 提取实例 ID 的正确方法

JSON Hyper-Schema: Correct way to extract instance IDs for application URLs

通过 Flask-Potion 使用 JSON Hyper-Schema,我有一个 API returns 在 /api/species 找到的物种列表。它 returns 是这样的:

[
{
    "$uri": "/api/species/1",
    "latin_name": "danio rerio",
    "name": "zebrafish"
}
]

对于我的 Web 前端,我希望 /species/1 成为面向 URL 的用户,从 /api/species/1 获取用于显示目的的数据。这个面向 URL 的用户与底层 API 无关,除了映射 ID 是有意义的,因为我将如何格式化面向 URL 的用户?所以当我有一个物种列表应该 link 到它们各自的物种页面时,我该如何形成 /species/1?因为我从我的 API 得到的 $uri 是 API uri,我是应该解析这个字符串来提取“1”还是有一个更优雅的解决方案我错过了在吗?

在 Potion 中有几种方法可以做到这一点。选择 "$uri" 作为对象标识符并不是 JSON HyperSchema 特有的,它只是 Potion 中的默认配置选项。

如果您希望使用 "$uri" 字段,您必须对其进行解析以检索 ID。但是您也可以告诉 Potion 使用 Meta.id_field_class documented here.

代替 return 具有数字 ID 的 "$id" 字段
class SpeciesResource(ModelResource):
    # ...
   class Meta:
      id_field_class = fields.Integer

您可以通过设置 Meta.include_type = True

将其与 "$type" 字段组合

一般来说,如果您想向资源中添加任何类型的只读字段,只需在架构中指定即可:

class SpeciesResource(ModelResource):
    # ...
    class Schema:
        id = fields.Integer(io='r')