Java RESTAPI中的正确寻址
我创建了一个应用程序,您可以在其中提问和回答。关于如何创建一个地址以添加对问题答案的评估的决定,我有一个小问题 我有两个想法Java RESTAPI中的正确寻址,java,spring,rest,spring-mvc,spring-boot,Java,Spring,Rest,Spring Mvc,Spring Boot,我创建了一个应用程序,您可以在其中提问和回答。关于如何创建一个地址以添加对问题答案的评估的决定,我有一个小问题 我有两个想法 POST http://localhost:8080/answers/{answerId}/votes 或 在我看来,第一个地址更合适,因为在网站上我将能够得到答案 AnswerEntity answerEntity = this.answerRepository.getById(answerId); answerEntity.setVotes(...); 但是,第二
POST http://localhost:8080/answers/{answerId}/votes
或
在我看来,第一个地址更合适,因为在网站上我将能够得到答案
AnswerEntity answerEntity = this.answerRepository.getById(answerId);
answerEntity.setVotes(...);
但是,第二个地址的服务如下所示
QuestionEntity questionEntity = this.questionRepository.getById(questionId);
for(AnswerEntity answer : questionEntity .getAnswers()) {
if(answer.getId().equals(answerId) [
answerEntity = answer;
}
}
answerEntity.setVotes(...);
因此,在我看来,第一个地址似乎更好,但我想征求你对这个问题的意见。根据REST API,第一个地址的语法是否正确?两个路径对REST API都有效,但它们具有不同的语义 第一个路径
/answers/{answerId}/voces
应该允许访问系统中任意答案的投票,只需使用唯一的答案ID作为参考。毫无疑问,这是一个背景
第二个路径/questions/{questionId}/answers/{answerId}/voces
限制URL中有效使用的答案ID集,因为该路径的开头将上下文缩小到特定问题。然后,只允许该特定问题的答案ID请求相应的投票
因此,这取决于您想为您的消费者提供什么,即什么最适合您的消费者的需要。既然
answerId
可能是唯一的,请使用它。您是指第一个地址吗?根据REST API,第一个地址的语法正确吗?为什么不正确?我不知道,问你。所以我用第一个地址给答案打分没有问题吗?请不要破坏你的帖子。要从数据库中得到答案,我只需要一个应答ID
。因此,第二个地址中的questionId
将完全不被使用。那么为什么要在第二个地址中添加questionId
?这是关于您希望在RESTAPI中提供什么语义。当然,您可以通过数据库中的唯一ID加载答案,但这真的是您想要作为API提供给消费者的吗?如果你想遵循领域驱动的设计,第二条路径更符合逻辑,因为没有问题答案是不存在的,对吗?如果您想确保API禁止消费者只访问他们所属问题答案的投票,那么您应该选择第二条路径。
QuestionEntity questionEntity = this.questionRepository.getById(questionId);
for(AnswerEntity answer : questionEntity .getAnswers()) {
if(answer.getId().equals(answerId) [
answerEntity = answer;
}
}
answerEntity.setVotes(...);