【发布时间】:2017-05-31 14:08:23
【问题描述】:
我们正在为我们的平台开发一个 REST API。假设我们有organisations 和projects,而projects 属于organisations。
读完this answer后,我会倾向于在URL中使用数字ID,这样一些URL就会变成(比如前缀/api/v1):
/organisations/1234
/organisations/1234/projects/5678
但是,我们希望为前端 UI 使用相同的 URL 结构,这样如果您在浏览器中键入这些 URL,您将在响应中获得相关网页,而不是 JSON 文件。就像您在 Facebook 或 Github 等网站上看到个人和组织的相关名称一样。
使用这个,我们可以得到类似的东西:
/organisations/dutchpainters
/organisations/dutchpainters/projects/nightwatch
看起来 Github 实际上以同样的方式公开了their API。
使用名称而不是 ID 来定义 URL 的优点和缺点如下:
优点:
- 为最终用户提供更直观的 URL
- 前端 UI 和 JSON API 的一对一映射
缺点:
- 必须使用唯一的名称
- 必须处理与保留名称的冲突,例如
count,所以稍后,您仍然可以开发类似/organisations/count的API 端点,并实际获取组织的数量而不是名为count的组织。
尤其是后者,似乎成为了潜在的后背痛。不过,在阅读 this answer 之后,我几乎确信要使用字符串标识符,因为从约定的角度来看,它似乎没有什么不同。
我的问题是:
- 我是否错过了使用字符串而不是数字 ID 的重要优点/缺点?
- Github 是在他们的平台成熟后开发了他们的基于字符串的方法,还是他们从一开始就知道这意味着一些限制(就像我之前提到的那样,他们似乎没有实现这样的功能)?李>
【问题讨论】:
标签: rest url-routing github-api identifier api-design