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

在restapi中基于替代标识符获取资源

  •  0
  • mko  · 技术社区  · 7 年前

    基于不同的标识符获取资源的restapi约定是什么?

    GET
    /resource/{id}
    
    GET
    /resource/{guid}
    

    既然这可能被认为是一个双重资源,并且为此设置路由可能是一个问题,那么遵循restapi准则的替代方法是什么呢?

    /资源/?guid={guid}

    /资源/guid/{guid}

    或者别的什么?

    2 回复  |  直到 7 年前
        1
  •  1
  •   codebrane    7 年前

    我通常不会复制端点。问题是:

    什么样的设计选择让这种情况发生?

    GET
    /resource/{id}
    

    因此,通过id访问资源的客户机将使用上述端点。我允许通过guid访问资源的客户机将他们拥有的(guid)交换为他们需要的(id):

    GET
    /id/{guid}
    

    得到
    /资源/{id}
    

    但最终我会研究为什么有些客户机使用guid而不是id,并更改它,以便所有客户机都以相同的方式访问API。

        2
  •  2
  •   cassiomolin    7 年前

    你可以两者兼用 /resource/{id} /resource/{guid} . 许多框架支持 正则表达式 用于匹配路径参数值。

    冗长的回答

    休息是一种乐趣 建筑风格 而不是设计uri的食谱 . 它不强制任何URI设计,完全由您来选择更好地标识资源的URI。

    multiple mappings 对于同一实体。以及 每个映射都是一个资源

    资源是到一组实体的概念映射,而不是在任何特定时间点对应于映射的实体。

    既然如此,如果你支持 DELETE ,重要的是要提到它的工作原理:

    4.3.5. DELETE

    这个 删除 rm UNIX中的命令:它表示对源服务器的URI映射的删除操作,而不是期望删除以前关联的信息。[…]


    注1: URI语法在 RFC 3986 层次结构 形式(段之间用 / )并且可以在查询组件中包含非层次数据(从 ? ).

    注2: 其余的体系结构样式在 chapter 5

    注3: 示例 popular article 作者:Martin Fowler解释了Leonard Richardson定义的模型 建议 一个看起来友好易读的URI结构。