我正在使用Swagger编写YAML文档设计RESTful API方法以克隆资源。我有几个选项,不知道哪个最好。请问有人能建议吗?
选项:
- 将克隆资源对象的责任交给消费者(其中消费者分配新对象的属性值,然后创建新对象),该过程需要包括两个针对API的请求:针对源对象进行GET,然后是一个POST到该资源上用于创建新的对象。这感觉像是在消费者那里承担了太多责任。
- 使用WebDAV HTTP扩展提供的COPY方法 (见此处)。看起来这正是我想要的复制功能。但是,我想尽可能地坚持标准方法
- 在/{resource}?resourceIdToClone={id}上进行POST,其中resourceIdToClone是可选参数。这将与我已经有的用于创建资源的API路径冲突,在其中向POST主体添加模式。 这意味着在/{resource}/上使用POST进行创建和克隆,这将违反SRP。
- 添加一个名为' CloneableResource '的新资源,并对/CloneableResource/{resource_type}/{resource_source_id}执行POST操作。例如,如果要克隆一只绵羊,则可以向/CloneableResource/Sheep/10进行POST。这样,就可以坚持使用标准的HTTP方法,不会与任何其他资源路径冲突(或违反SRP)。但是,我将添加一个新的、可能多余的类型到域中。我也想不到有什么情况下消费者会希望执行除了POST之外的其他操作,所以这个似乎是代码异味。