Java 当我们有可选行为时,什么是正确的restful API设计?
我有一个将一个班级的学生分成小组的用例。 类有一个classId,团队有一个teamId 我有以下选择:Java 当我们有可选行为时,什么是正确的restful API设计?,java,rest,api,Java,Rest,Api,我有一个将一个班级的学生分成小组的用例。 类有一个classId,团队有一个teamId 我有以下选择: 创建两个端点: @GET @Path("/schoolMetadata/byClass/{classId}") @Produces(MediaType.APPLICATION_JSON) public Response getMetadataByClassId( 及 第二个实现是使用查询参数 @GET @Path("/schoolMetadata/by/") @Produces(Medi
@GET
@Path("/schoolMetadata/byClass/{classId}")
@Produces(MediaType.APPLICATION_JSON)
public Response getMetadataByClassId(
@GET
@Path("/schoolMetadata/by/")
@Produces(MediaType.APPLICATION_JSON)
public Response getMetadataById(
@QueryParam("classId") final Id classId
@QueryParam("teamId") final Id groupId) {
if (classid != null) {
} else {
}
}
两种方法中哪一种更好?我想第一种方法更好,因为它符合单一责任原则(SOLID) 单一责任原则(SRP)断言一个类或模块应该只做一件事。现在,这是一种主观的观点,因此这个原则通过启发式得到了加强,即类或模块应该只有一个改变的理由
1方法有两个方法(模块),每个方法只做一件事RESTful URL背后的思想是,它们应该表示单数或复数名词的“资源”。代表类似事物的“集合”的资源应该是复数的。您已经指出,可以为类id或团队id获取学校元数据。听起来像类和团队的可能被视为“资源”,而不管它们是否都在内部建模为“学校元数据”。如果没有任何其他信息,我可能会建议如下:
- classes/{classId}
- teams/{teamId}
- 学校元数据/资源/类/{classId}
- 学校元数据/资源/团队/{teamid}
- 学校元数据/资源/类生成“类”列表。这里可以使用查询参数来简化搜索选项
- 学校元数据/资源/团队生成“团队”列表李>
@GET
@Path("/schoolMetadata/by/")
@Produces(MediaType.APPLICATION_JSON)
public Response getMetadataById(
@QueryParam("classId") final Id classId
@QueryParam("teamId") final Id groupId) {
if (classid != null) {
} else {
}
}