REST api 可变长度嵌套路径的设计

REST api design for variable length nested paths

我需要为嵌套在一个或多个命名空间下的资源设计一个API。

例如:

   / +
     |
     +--- namespace1 
                |
                +-------- namespace2
                             |
                             +---------------- resource

我可能有 0 到 N 个命名空间。

表示此类资源的推荐方式是什么?我考虑过以下方法:

  1. 表示URL中的命名空间路径。例如:

    GET /resources/namespace1/namespace2/resource
    
  1. 将命名空间表示为查询参数:

    GET /resources/resource?context=/namespace1/namespace2
    
  1. 将命名空间表示为 header:

    GET /resources/resource
    Context: /namespace1/namespace2
    

是否有针对此类问题的推荐方法,或者是否有任何我可能遗漏的其他模式?

我同意,#1 是最易读的,如果您使用的技术使其易于使用,则值得考虑。但是,这可能会导致客户端工作以正确形成 API 调用,这不会使 API 特别容易被发现或记录。

#3 实际上只是#2 的变体。您只选择在 header 而不是查询参数中表达名称空间。在任何一种情况下,它都不会使客户端必须 assemble URI,但客户端可能更愿意发送一个“干净”的 URI 请求,而不是添加 headers.

诸如“范围”、“上下文”、“命名空间”和“层次结构”之类的东西都适合作为查询参数。尽管您有所保留,这还是让 #2 变得美味。

这似乎是 KISS 的情况。 REST 没有专门涵盖这种情况。