Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RESTAPI中的正确寻址_Java_Spring_Rest_Spring Mvc_Spring Boot - Fatal编程技术网

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(...);