【问题标题】:Best rest api naming convention for resources with association具有关联的资源的最佳 rest api 命名约定
【发布时间】:2019-01-07 07:02:06
【问题描述】:

以下是我拥有的其他端点。我希望用户调用第一个端点,并且对于后续调用,我希望用户 ID 处于请求中。实现这一目标的最佳方法是什么?

1. POST www.test.com/v1/users (return userid)
2. POST www.test.com/v1/services
3. PUT  www.test.com/v1/services/{serviceId}
4. DELETE www.test.com/v1/services/{serviceId}
5. GET www.test.com/v1/services?search="search string for dynamic query"
6. PATCH www.test.com/v1/services/{serviceId}/{state}

【问题讨论】:

  • 你验证了userid和token的关联吗?即,如果我选择其他人的用户名并向您发送请求,会发生什么?

标签: java spring rest spring-boot


【解决方案1】:

这取决于您的域和您想要表达的内容。通常,用户凭据是标头的一部分。但是,如果您想明确说明,可以将其作为 url 的一部分:

/v1/{userId}/services/

通常我使用 aggregation vs composition 来确定它是否是嵌套资源。

【讨论】:

  • 客户端将使用 http 标头发送一个身份验证令牌。这个用户 id 只是为了表明用户和他的服务之间的关联。不过在这种情况下我喜欢聚合。
  • 然后使用嵌套资源模型。如果您有答案,请考虑接受。
【解决方案2】:

进一步的调用可能会在请求标头中包含www.test.com/v1/users 返回的用户 ID(应该加密?)。

如果您不需要向用户公开 userId,您可以使用任何编码器并生成哈希值(该登录会话/会话 ID 唯一的个人访问令牌)。每次发出后续请求时,都可以验证会话 ID 并继续执行进一步操作。

另外,我觉得后者应该是你的选择。另外,尝试根据生成的会话 ID 设置会话保持活动时间。

【讨论】:

    猜你喜欢
    • 2016-07-21
    • 2023-03-25
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    相关资源
    最近更新 更多