属性值可以用作RESTURL中的标识符吗

属性值可以用作RESTURL中的标识符吗,rest,json-api,Rest,Json Api,我有一个具有标识符id和属性名称的资源-名称对于每个资源实例都是唯一的 为了获取、修补和删除资源,使用name字段是否符合REST和JSON:API 作为URL中的标识符 e、 g.要按名称获取资源,是否符合以下URL: 获取/resource/{name} 或者使用/优选以下各项: 获取/资源?名称={name} 要按名称修补或删除,可以使用: 修补程序/资源/{name} 删除/resource/{name} 为了获取、修补和删除资源,在URL中使用名称字段作为标识符是否符合REST和JSO

我有一个具有标识符id和属性名称的资源-名称对于每个资源实例都是唯一的

为了获取、修补和删除资源,使用name字段是否符合REST和JSON:API 作为URL中的标识符

e、 g.要按名称获取资源,是否符合以下URL:

获取/resource/{name}

或者使用/优选以下各项:

获取/资源?名称={name}

要按名称修补或删除,可以使用:

修补程序/资源/{name}

删除/resource/{name}

为了获取、修补和删除资源,在URL中使用名称字段作为标识符是否符合REST和JSON:API

对。REST不关心资源标识符的拼写,只要这些标识符与中定义的生产规则一致

这可能意味着您需要对属性名称进行编码——例如,用等效的十六进制表示替换一些保留字符

GET /resource/{name}
PATCH /resource/{name}
DELETE /resource/{name}
那很好

GET /resource?name={name}
PATCH /resource?name={name}
DELETE /resource?name={name}
也很好。这是一种权衡;将信息编码到路径段意味着您可以利用相对引用和点段。在查询部分使用键值对意味着您可以使用HTML表单允许客户端指定名称

GET /resource?name={name}
DELETE /resource/{name}
从技术上讲,您可以进行混合匹配,但是通用缓存不会知道您是否聪明,并且在URI不同时不会缓存条目


这个答案完全忽略了它也应该遵守的原则

这是公正的评论

API没有对URI中使用的拼写约定引入任何重要约束

然而,它确实希望标识符可以通过application/x-www-form-urlencoded键值对进行扩展以支持,等等

(警告:在阅读JSON:API规范时请小心,因为其中“resource”的使用与的上下文中的含义不太一致。)

JSON:API鼓励使用路径段来引用“资源”,就好像它们是单个“参考文档”中可单独寻址的元素一样

此外,建议使用特定的分层拼写,使用资源的类型和标识符来计算其URI

/{type}/{id}
换句话说,
GET/resource/{name}
应该返回一个
application/vnd.api+json
表示,其中包含
类型
成员
resource
id
成员
名称
。规范应用了此(类型、id)组合必须满足的附加约束

如果
name
只是一个属性,而不是实际的标识符,那么JSON:API就是一个过滤器

/resource?filter%5Bname%5D=abcde
返回的表示将包括一个链接关系,该链接关系以通常的方式跟踪标识符


(注意:[]是,因此需要在查询部分使用十六进制编码。至少有一个JSON:API示例解释了这一点,但推荐中的过滤示例并不强调这一点。实际上,您可以不编码地使用它们——在查询部分使用方括号是一种常见的不合规约定).

这个答案完全忽略了它也应该符合的内容。此外,它并没有讨论ID不仅应该是唯一的,而且随着时间的推移应该是稳定的。答案更新以包含此反馈。谢谢