只读的派生 REST 资源?

A read-only derived REST resource?

我正在创建一项新服务,我需要在其中支持对两个实体进行标记。 我能否将 /tags 创建为仅支持以下调用的顶级 REST 资源:

GET    /tags

GET    /tags/{tagName}

要应用标签,我们使用以下调用:

PATCH    /entity1/{entity_1_Name}

PATCH    /entity2/{entity_2_Name}

因此,无论何时将标签应用于实体,随后对 GET /tags 的调用都会显示该标签。我打算这样做,因为这不需要我将标签独立存储在我的数据存储中。

这是个好主意吗?

Can I create /tags as a top level REST resource

是的,你可以。如果 tag 是一个独立的实体并且 api 响应将仅包含 tag_name 和其他与标签相关的信息,这听起来很有意义。您的 api 是否有数据库或 web.config 在幕后或它处理硬编码的值列表都没有关系。您的 API 界面 隐藏了 这个事实,用户永远不会知道实现的细节。有一个只读实体是可以的。

whenever a tag is applied to an entity, subsequent calls to GET /tags will show that tag

我希望您的 GET /entity2/{entity_2_Name} 资源模型会有一个 tags 字段:

class Entity2
{
    string entity_name;
    ...
    string[] tags
}

作为备选方案,您可以通过两个调用获取所有数据:

GET /entity2/{entity_2_Name} //响应中没有标签数组

GET /entity2/{entity_2_Name}/tags

资源/entity2/{entity_2_Name}/tags应该return标签分配给这个具体entity2实例