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')
通过 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.
"$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')