我目前正在设计一个 API,但遇到了一个小问题: 当您应该能够通过 ID 或 slug 识别项目时,RESTful API 的 URL 应该是什么样子?
我可以想到三个选项:
GET /items/<id>
GET /items/<slug>
这就要求slug和ID是可区分的,本例中不一定给出。我想不出一个干净的解决方案来解决这个问题,除非你这样做:
GET /items/id/<id>
GET /items/slug/<slug>
这可以正常工作,但是这不是我想通过 slug 或 ID 识别项目的唯一地方,当一个人想要为其他操作实施相同的方法时,它很快就会变得非常难看。它只是不是很可扩展,这导致我们采用这种方法:
GET /items?id=<id>
GET /items?slug=<slug>
这似乎是一个很好的解决方案,但我不知道这是否是人们所期望的,因此可能会由于使用不当而导致令人沮丧的错误。此外,为这个实现路由也不是那么容易 - 或者说干净 - 实现路由。但是,它很容易扩展,并且看起来与获取多个项目的方法非常相似:
GET /items?ids=<id:1>,<id:2>,<id:3>
GET /items?slugs=<slug:1>,<slug:2>,<slug:3>
但这也有一个缺点:如果有人想用 ID 识别他想获取的一些项目,而用 slug 识别其他项目怎么办?混合这些标识符并不容易实现。
这些问题的最佳和最广泛接受的解决方案是什么?一般来说,在设计这样的 API 时,什么是重要的?