决定 REST API 路径约定
Deciding on REST API Path Convention
我在我的组织的机密部门工作,我需要获取该部门可用的城市。分类城市是城市的子集。因此,为了获取城市,我创建了以下 API 路径。
api/classified/cities
然后我意识到,由于分类城市是城市的子集,因此 URL 可以是
api/cities/classifiedcities
根据 REST 原则,我应该使用上述路径中的哪一个?
理论上子集应该遵循父集(因此第一个解决方案看起来不太好)。
第三种方法是通过查询参数:
api/cities?type=classified
如果您的目标是 REST 原则,那么 REST 实际上并没有任何 URI 的外观原则(只要它标识 "real" 资源!)。 It does however say that it should be linked instead of hardcoded into the clients. This is why some people say URI 无关紧要。它们无关紧要,因为客户应该 "discover" URI 而不是事先知道它们。
那么,为什么我们不都选择像“/45ttfdfg/34tkfjdldf23wedkdfjsd”这样的 URI?这又完全取决于个人喜好。如果 URI 是人类 "readable" 就好了。有一些(写得不好的)工具采用了某种结构。有一些 "REST" 库(服务器和客户端的)也假设了一堆东西,例如 "subresources" 的概念(它也不是来自 REST)。
总结一下:如果您遵循 REST(当然您不必这样做!),那么客户端应该发现 URI。如果是这样的话,那就归结为个人喜好和 libraries/clients 的一些技术限制。所以选择一个你喜欢的,别担心!如果需要,以后可以随时修改它们,因为服务器可以控制其 URI。
我在我的组织的机密部门工作,我需要获取该部门可用的城市。分类城市是城市的子集。因此,为了获取城市,我创建了以下 API 路径。
api/classified/cities
然后我意识到,由于分类城市是城市的子集,因此 URL 可以是
api/cities/classifiedcities
根据 REST 原则,我应该使用上述路径中的哪一个?
理论上子集应该遵循父集(因此第一个解决方案看起来不太好)。
第三种方法是通过查询参数:
api/cities?type=classified
如果您的目标是 REST 原则,那么 REST 实际上并没有任何 URI 的外观原则(只要它标识 "real" 资源!)。 It does however say that it should be linked instead of hardcoded into the clients. This is why some people say URI 无关紧要。它们无关紧要,因为客户应该 "discover" URI 而不是事先知道它们。
那么,为什么我们不都选择像“/45ttfdfg/34tkfjdldf23wedkdfjsd”这样的 URI?这又完全取决于个人喜好。如果 URI 是人类 "readable" 就好了。有一些(写得不好的)工具采用了某种结构。有一些 "REST" 库(服务器和客户端的)也假设了一堆东西,例如 "subresources" 的概念(它也不是来自 REST)。
总结一下:如果您遵循 REST(当然您不必这样做!),那么客户端应该发现 URI。如果是这样的话,那就归结为个人喜好和 libraries/clients 的一些技术限制。所以选择一个你喜欢的,别担心!如果需要,以后可以随时修改它们,因为服务器可以控制其 URI。