首页 > 解决方案 > 如何定义我的 REST API?

问题描述

我有 3 个模型:锦标赛冠军竞争者

因此,要列出所有锦标赛的所有参赛者,URL 是:

GET https://base.com/tournament/{slug}/competitors

但是要添加一个竞争对手,它与冠军有关,所以:

POST  https://base.com/championships/{id}/competitors

对于同一个模型,两个动词(GET 和 POST)有不同的 URI 可以吗?否则,我该怎么办?

我喜欢这样做:

POST  https://base.com/tournaments/{slug}/championships/{id}/competitors 

没有必要的字段。

标签: restapi-designurl-design

解决方案


对于同一个模型,两个动词(GETPOST)有不同的URI可以吗?

这可能会给 API 使用者造成混淆,因此我建议您使用相同的 URI。


请记住,在Roy T. Fielding 的论文第 5 章中描述的 REST 架构风格为构建在此类架构之上的应用程序定义了一组约束。但它没有说明 URI 必须是什么样的。

Martin Fowler 撰写的一篇流行文章中显示的示例解释了 Leonard Richardson 定义的模型,这表明URI 结构看起来友好且易于阅读。虽然它可能是可取的,但它不是REST 应用程序的强制要求。


您可以采用很多有效的方法。如果竞争对手需要锦标赛存在而锦标赛需要锦标赛存在,您可以使用以下方式表达这种层次结构

/tournaments/{slug}
/tournaments/{slug}/championships/{id}
/tournaments/{slug}/championships/{id}/competitors/{id}

但是最后一个 URI 可能被认为太长并且可能难以记住。所以你可以简单地拆分它,然后你不需要发送很多参数:

/tournaments/{slug}
/championships/{id}
/competitors/{id}

如果您需要执行任何过滤,您可以使用查询参数。例如:

/championships/{id}?tournament={slug}

推荐阅读