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

时间:2015-06-15 22:15:06

标签: json rest flask-potion

通过Flask-Potion使用JSON Hyper-Schema,我有一个API,它返回/api/species处找到的物种列表。它返回如下内容:

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

对于我的网络前端,我希望/species/1成为面向用户的网址,从/api/species/1获取其数据用于显示目的。这个面向用户的URL与底层API无关,除非映射ID是有意义的,因为我将如何格式化面向用户的URL?因此,当我有一个应该链接到各自物种页面的物种清单时,如何形成/species/1?由于我从API获得的$ uri是API uri,我应该解析此字符串以提取" 1"还是我有一个更优雅的解决方案?

1 个答案:

答案 0 :(得分:1)

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

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

class SpeciesResource(ModelResource):
    # ...
   class Meta:
      id_field_class = fields.Integer

您可以通过设置"$type"

将其与Meta.include_type = True字段结合使用

通常,如果要向资源添加任何类型的只读字段,只需在架构中指定它:

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