代码之家  ›  专栏  ›  技术社区  ›  fsdgdf

REST API中的正确寻址[关闭]

  •  -2
  • fsdgdf  · 技术社区  · 7 年前

    我创建了一个应用程序,您可以在其中提问和回答。我对如何创建地址以添加问题答案的评估的决定有一个小问题。

    我想到了两个主意

    POST http://localhost:8080/answers/{answerId}/votes
    

    POST http://localhost:8080/questions/{questionId}/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,第一个地址的语法是否正确?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Georg Wittberger    7 年前

    这两条路径对于REST API都有效,但它们具有不同的语义。

    第一条路径 /answers/{answerId}/votes 只需使用唯一的答案ID作为参考,即可访问系统中任意答案的投票。这里没有疑问的上下文。

    第二条路径 /questions/{questionId}/answers/{answerId}/votes 限制URL中有效使用的答案ID集,因为该路径的开头将上下文缩小到特定问题。然后,只允许该特定问题的答案ID请求相应的投票。

    因此,这取决于你想为你的消费者提供什么,即什么最适合你的消费者的需要。