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

如何为子对象定义REST url

  •  1
  • Sunny  · 技术社区  · 5 年前

    一个客户可以有多个地址,我怀疑能否为地址命名REST url。CustomerAddresses是一个独立的表,外键引用Customer表。

    获取客户的所有地址(HttpGet)

    /customers/{customerId}/addresses
    

    添加新客户地址(HttpPost)

    /客户/{customerId}/地址
    

    删除客户地址(HttpDelete)

    /customers/{customerId}/addresses/{addressId}
    

    (或)

    获取客户的所有地址(同上)

    /客户/{customerId}/地址
    

    添加新的客户地址(HttpPost),正文中包含customerId。

    /customeraddresses
    

    删除客户地址(HttpDelete)

    /customeraddresses/{addressId}
    
    0 回复  |  直到 5 年前
        1
  •  2
  •   VoiceOfUnreason    5 年前

    你的两个例子都是 好的 . 通用组件不关心资源标识符是否使用与私有内部存储中使用的名称匹配的拼写。

    所以你可以使用任何对你的人类方便的拼写。

    这可能意味着

    • 易于为消费者记录的拼写
    • 易于在内部传递的拼写
    • 阅读访问日志时易于识别的拼写
    • 以上都不是。

    URI的路径部分基本上是分层的——可以方便地选择允许您使用点段引用其他资源的拼写。


    请记住,您的数据模型和资源模型是 不同的 而且应该允许独立地改变。如果表名的更改也会强制更改资源标识符的拼写,那么可能会有人在某个地方遇到麻烦。