我正在尝试为需要使用复杂资源标识符的REST API构建URL
e.g。获取特定课程
GET /Courses/{id}
其中{id} = {TermId} / {SubjectId} / {SectionID}
可以接受如下格式化或者有更好的方法吗?
/课程/ {TermId} / {SubjectId} / {sectionId}的版本
答案 0 :(得分:0)
这是不可接受的,因为它会给使用您提供的API的客户造成混淆。基本上/
(斜杠)表示新资源。在这种特殊情况下,您拥有Courses
个资源,其中包含TermId
的特定资源,而SubjectId
依次为-
,依此类推。这是不可读的,而不是客户期望的。我在这里看到两种可能的解决方案:
使用组合密钥,以GET /Courses/{TermId}-{SubjectId}-{SectionID}
或其他URI可用符号分隔:
GET /Courses/{courseId}/Terms/{termId}/subjects/{subjectId}/sections/{sectionId}
只需解析服务器端的密钥。
使用其他URI
cat /proc/sys/fs/inotify/max_user_watches
还有其他想法,你建议的那些想法似乎没用。
答案 1 :(得分:0)
在我看来,你有两个合理的选择:
(1)的优点是URI是人类可攻击的 - 假设用户记住了将值放入的顺序以及可以有效的值。如果一个重要的用例是学生使用这些URI在线查找课程,他们可能希望跳过搜索步骤,如果他们拥有所有相关信息并只是将这些值打入URI。如果您的回复类型是HTML,这不是不合理的。
(2)的优势在于它不人类可攻击 - REST是通过超媒体发现的。如果响应类型是JSON或XML,则人类不会直接使用这些URI。
我建议支持以下端点:
GET /courses?termId={}&subjectId={}§ionId={}
// all three parameters are optional. returns all courses that match the
// specified criteria - either a subset of the data or the full course
// data for each result
GET /courses/{courseId}