我正在使用 REST Api 起诉 Python Flask,因为我有越来越多的路由,很难管理所有资源 url。
现在,我很困惑哪一个是 URL 参数的更好做法。以下示例:
获取有限制的类(class)列表:/courses/<int:lim>
或 /courses/list?lim=10
获取特定类(class):/courses/<code>/<section>
或 /courses/show?code=cs100§ion=1
获取特定类(class)的学生列表:/courses/<code>/<section>/students
或 /students/show?code=cs100§ion=1
我应该使用 /
还是通过 ?
传递查询参数
我使用 /
的唯一原因是查询中没有冲突。
如果我有这两个 URL 用于两个不同的查询,我该如何修复它以便我可以根据参数进行查询:/students/show?code=cs100§ion=1
(获取该类(class)的所有学生)/students/show?id=123456789
(获取特定学生)
最佳答案
URL 应该标识一个资源或资源集合。您想为客户端提供的任何选项,例如分页、限制、过滤、排序等。我认为最好包含在查询字符串或 HTTP header 中。
所以关于你的具体问题:
Get a list of courses with limits:
/courses/<int:lim>
OR/courses/list?lim=10
没有一个。使用
/courses?lim=10
.无需/list
组件,这是一个 Action ,而不是资源。Get a specific course:
/courses/<code>/<section>
OR/courses/show?code=cs100§ion=1
首先。再次,
/courses/show
表示操作,您希望 URL 成为资源的链接,在这种情况下是您的类(class)。Get a list of students in specific course:
/courses/<code>/<section>/students
OR/students/show?code=cs100§ion=1
第一个,和上一个原因一样。
我在最近两次 PyCon session 上进行了 REST API 演讲,如果您想了解更多 API 设计最佳实践,请随时查看:
关于api - Flask REST api 资源 URL 建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29704812/