前段时间我开发了一个网络应用程序来许可我们的软件。这有客户、帐户、用户和许可证。许可证分配给用户并使用序列号激活。许可证是作为处理采购订单的输出而创建的,即没有任何直接发布新许可证的方法。
我目前正在阅读“RESTful Web Services”并考虑如何使其成为 RESTful(HATEOAS 也是)。
大多数 URL 我都清楚,但是许可证需要一些有趣的操作。许可证的基本 URL 将是/licence/{licenceID}
.
- 为用户分配可用许可证(由支持人员完成)
- 释放用户的许可证(将其放回可用许可证池中)
- 使用序列号激活许可证,并生成密钥作为回报
- 重新激活许可证
- 将许可证续订到新的到期日期
- 禁用许可证:仅单向,不可撤销。许可证仍然存在
现在,在 REST 中,我只能使用标准方法,并且不能在 URL 中嵌入“分配”操作。我在想的是挑选出我想要影响的许可证部分。这给出了: -
- 列表:
GET /licences/
- 得到:
GET /licences/{licenceID}
- 分配:
POST /licences/{licenceID}/assignee/{userID}
- 发布:
DELETE /licences/{licenceID}/assignee
- 启用:
POST /licences/{licenceID}/serialNumber/{serialNumber}
- 停用:
DELETE /licences/{licenceID}/serialNumber
- 更新:
POST /licences/{licenceID}/expires
- 禁用:
DELETE /licences/{licenceID}/enabled
我的问题是: -
- 这个 URL 方案是“正确”或明智的做法吗?
- 或者我应该有一个“许可证分配”和“许可证激活”的集合(例如
/assignments/{licenceId}/{userId}
:)
- 或者我应该有一个“许可证分配”和“许可证激活”的集合(例如
- 我是否遗漏了一些基本的东西(当我读完这本书时可能会清楚)
- 参数(userId 和 serialNumber)应该作为路径参数还是查询参数?
- {userId} 指代系统上的用户,因此可以是路径参数
- {serialNumber} 是在客户端(Java Swing)上根据自己的信息生成的(没有序列号的中央数据库)。
非常感谢!