让我们考虑以下API。
/school/{schoolId or schoolName}
/school/{schoolId or schoolName}/students/{studentId or studentName}
我必须开发上面的API。在Spring REST中实现这一目标的最佳方法是什么?我可以简单地将URL路径变量作为字符串获取并检查它是id还是名称然后处理它。
但是还有其他更好的解决方案吗?
房间里有一头大象,学校名称或学生姓名不是唯一的。所以不建议用它代替id,否则你会烧伤你的手。
- / school / {学校ID或学校名称}
我会把它分成两个终点
如果找到,请返回学校实体
HTTP-200
{
"id" : "id-123",
"name" : "worlds best school ever",
"address" : "123 somestreet, some city, some state"
}
如果没找到,
HTTP 404 and an empty body
如果每个搜索条件至少找到一个实体
HTTP-200
[
{
"id" : "id-123",
"name" : "worlds best school ever",
"address" : "123 somestreet, some city, some state"
}
]
如果每个搜索条件都找不到实体
HTTP-200
[]
- / school / {schoolId或schoolName} / students / {studentId或studentName}
这引出了一个问题,一个学生属于多个学校,我不这么认为。如果是这种情况,/ school / {schoolId或schoolName}是不必要/冗余的信息。如果是这样,我会改为
如果发现
HTTP-200
{
"id" : "studentid-345",
"name" : "Albert Einstein",
"school_id" : "id-123"
}
如果没有找到
HTTP 404 with empty body
如果每个搜索条件至少找到一个实体
HTTP-200
[
{
"id" : "studentid-345",
"name" : "Albert Einstein",
"school_id" : "id-123"
}
]
如果每个搜索条件都找不到实体
HTTP-200
[]