Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
REST的URI以反映资源的关系?_Rest_Url_Uri_Restful Url - Fatal编程技术网

REST的URI以反映资源的关系?

REST的URI以反映资源的关系?,rest,url,uri,restful-url,Rest,Url,Uri,Restful Url,我知道一些,例如资源名应该是复数,使用具有相同URI的不同HTTP方法对该资源执行不同的操作,等等 但由于URI应该反映资源之间的关系,我有点困惑。以SO为例,当更新答案的现有注释时,URI应该如下所示: PUT /{contextPath}/questions/{questionId}/answers/{answerId}/comments/{commentId} 但是当我使用这个所谓的标准URI时,我感到很尴尬,因为: 这有点冗长,尤其是当层次结构非常复杂时 很深 提问和回答在这里完全没有

我知道一些,例如资源名应该是复数,使用具有相同URI的不同HTTP方法对该资源执行不同的操作,等等

但由于URI应该反映资源之间的关系,我有点困惑。以SO为例,当更新答案的现有注释时,URI应该如下所示:

PUT /{contextPath}/questions/{questionId}/answers/{answerId}/comments/{commentId}
但是当我使用这个所谓的标准URI时,我感到很尴尬,因为:

  • 这有点冗长,尤其是当层次结构非常复杂时 很深
  • 提问和回答在这里完全没有必要,因为 commentId足以让服务器识别注释记录

  • 那么,处理这个问题的适当方法是什么?我应该始终遵循名称转换,还是在资源的层次关系非常深入时进行一些更改?

    它为您提供了更多选项,而无需提出额外请求

    这样,您就可以调用可能需要查询ID的函数。 当您只有commentId时,您必须首先查询您的questionId

    取决于您的功能要求。如果您在上一页上有特定信息,并且在下一页中必须再次使用,为什么要查询两次?除非它是敏感的,而问题ID显然不是


    这是我对您应该如何看待标准的add选项的看法,它为您提供了更多选项,而无需提出额外请求

    这样,您就可以调用可能需要查询ID的函数。 当您只有commentId时,您必须首先查询您的questionId

    取决于您的功能要求。如果您在上一页上有特定信息,并且在下一页中必须再次使用,为什么要查询两次?除非它是敏感的,而问题ID显然不是


    这是我对您应该如何看待标准的add选项的看法

    我强烈反对“URI应该反映资源之间的关系”


    URI是指向资源的指针。就这样。有一些约定可以使它们更易于阅读,因此更易于使用。当然,没有硬性规定关系应该在URI路径上建模。您可以自由地以一种扁平的方式而不是分层的方式对资源进行建模。使用
    link
    s对资源之间的关系进行建模,并使用查询参数缩小集合范围。

    我强烈反对“URI应该反映资源之间的关系”


    URI是指向资源的指针。就这样。有一些约定可以使它们更易于阅读,因此更易于使用。当然,没有硬性规定关系应该在URI路径上建模。您可以自由地以一种扁平的方式而不是分层的方式对资源进行建模。使用
    link
    s对资源之间的关系进行建模,并使用查询参数缩小集合范围。

    我会将路由/URI简化为:

     PUT /comments/{commentId}
    
    以及相应的RequestBody,可能是某种DTO。
    URI不必从上下文路径一直显示层次结构。它可以是唯一标识资源的最短URI

    我将路由/URI简化为:

     PUT /comments/{commentId}
    
    以及相应的RequestBody,可能是某种DTO。 URI不必从上下文路径一直显示层次结构。它可以是唯一标识资源的最短URI