【问题标题】:RESTful Design for non CRUD APIs非 CRUD API 的 RESTful 设计
【发布时间】:2014-10-19 11:10:55
【问题描述】:

我一直在尝试寻找一个教程或网站来解释设计 api 的最佳实践,而不仅仅是代表典型的 Create-Read-Update-Delete 中的资源。

假设我想以 RESTful 方式表示基类库中的典型 API(一些表示单例模式/工厂模式等),我可以找到有关简单 POST、PUT、GET、DELETE 的大部分教程和信息表示 Create、Read、Update 的方法是不够的。

是否有一套标准指南以 RESTful 方式“REST 化”更复杂的 API 和/或标准设计模式?

例如,我不清楚为文件实例提供 MOVE 和 COPY 操作的最佳方法,并且有很多(所以!)很多方法可以实现;

POST http://www.api.com/api/file/<fileidentifier>/COPYTO/<newfileidentifier>

POST http://www.api.com/api/file?directory=<dir>&filename=<filename>
BODY { operation: "copy", newDirectory: "<$newdir>", newFilename: "<$newfilename>"

等等等等

我应该遵守哪些设计准则?

【问题讨论】:

  • 好吧,在您的情况下,文件似乎是一种资源。该文件具有一些属性:名称和位置。当你“移动”你的资源时,你正在更新它的位置,所以我会在那个资源上使用一个 PUT(由“fileidentifier”标识)并在请求正文中传递新的位置。
  • 也许不是最好的例子,因为我混合了移动和复制操作。我已经相应地编辑了问题。
  • 复制资源是在现有资源的基础上创建新资源。所以我会使用 POST /files?source=/files/ (请注意,我对文件资源使用了复数形式。根据您的上下文,似乎是一个集合)
  • 感谢大卫 - 完全同意复数的使用。示例的选择可能会妨碍这里的问题,但现在让我们坚持下去。当然,在复制示例中,可以让客户端负责执行“获取”,然后使用 POST RESTful 查询创建新实例。但是,如果打算使用服务器端功能来完成此操作(即,为什么要将大文件下载到客户端,只是为了再次上传),您将如何构建 API?
  • 嗯?如果您复制现有资源,您的资源已经在服务器端,不是吗?因此,与您的 POST 关联的功能正在服务器端执行所有操作。它只是触发复制,为其创建一个新标识符并将其作为复制操作的结果返回。

标签: c# rest


【解决方案1】:

我希望您将 Odata v4 添加到其中,然后创建服务,因为我正在处理过去 8 个月的相同场景。 好处 1.不需要做很多搜索查询功能。 2. 有可用的 Odata 客户端,它像 Wcf 一样基于元数据生成客户端代码。 所以这也是一个很大的优势。 3. 不要使用 put post get API 的基本名称约定,而是使用更能描述函数实际功能的函数名称。

【讨论】:

  • 所以你的建议是“不要使用 REST”?
  • 您将使用 Rest,但不会使用所有基本方法。而不是使用其他带有 http 属性的方法名称来描述方法类型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多