当前位置: 首页 > 知识库问答 >
问题:

用于保存操作的REST API设计也有可选的副作用[关闭]

公羊向荣
2023-03-14
  • 模板实体
  • 子文档实体

模板可以有多个子文档如果模板被更新,则可以更新基于该实体的所有或部分子文档。

GET /templates/{id} -> Returns template
POST /templates/ -> Creates template
PUT /templates/ -> Updates template

现在,如果我们想要更新模板,并指示服务器更新所有基于模板的文档,什么是一个好的设计呢?

PUT /templates/ 
{
  template: {
    ..
  },
  childDocumentsIds: [1, 3, 7...]
}
PUT /templates?childDocumentIds=1,3,7
{
template
}
    null

我正在尝试判断其他人在设计REST API时是否也有类似的问题。最近,在使用了很少的API之后,我认为我们可以做得比REST API更好。

共有1个答案

司徒光霁
2023-03-14

我认为我们可以做得比REST API更好。

REST体系结构约束的设计考虑了一个特殊的问题:“跨多个组织的基于网络的长期应用程序”。REST的参考应用是万维网。如果这不是你的问题,那么Rest可能就不合适了。

HTTP是一种应用程序,其应用域是通过网络传输文档。如果您可以将问题框定为通过网络传输文档,那么已经为您完成了一大堆工作,如果您愿意遵守它的约束,您可以利用它。

GET /todoList

200 OK

[]
["Send an email to bob@example.org"]

然后我们会要求服务器将它的文档副本看起来像我们的副本

PUT /todoList

["Send an email to bob@example.org"]

HTTP语义告诉服务器如何解释该消息,但它可以自己选择如何处理该消息。例如,服务器可以更新它自己的/TODOLIST本地副本,将电子邮件发送给Bob,更新它的/RecentlySentEmail表示形式,更新它的/RecentlySentEmailsToBob表示形式,等等。

服务器的响应采用多种标准形式;202已接受--我理解您的要求,以后可能再做;204--没有内容--我编辑了我的文档副本以匹配您的,这里有一些元数据;200 OK--我对文档的表示形式进行了更改,它们在这里(或者,我对文档的副本进行了更改,您可以要求我提供一个刷新的副本)。

最直接的例子是发送修改后的模板,并允许服务器根据需要更新其他资源

GET /template

200 ....
[original representation of template]

// make edits

PUT /template
[revised representation of template]

200 OK

如果服务器知道哪些文档需要更新,那么它可以只更新它们。哒哒。

如果客户端需要知道哪些资源已经更新,只需将该列表发回

PUT /template
[revised representation of template]

200 OK

[URI of resources changed by the template]
 类似资料:
  • 我正在为设备管理系统设计REST API。 endpoint:

  • REST API上下文中的资源是用某种编程语言编写的应用程序代码。可以轻松映射到HTTP谓词的CRUD操作是Save/Edit/Delete代码。难以映射到HTTP方法的非CRUD操作是在服务器上部署代码、执行代码和取消部署。 我在SO中遇到的共同建议是: 重新构造操作,使其看起来像资源的字段,例如,如果您的操作是激活引擎,则设计URI:,body: 将操作视为子资源,例如不带主体 使用查询参数,

  • 问题内容: 在Java中是否存在用于集合操作的API,例如联合,交集,差,笛卡尔乘积,从一个集合到另一个集合的函数,这些函数的域限制和范围限制,.... Java? 请评论(操作)的覆盖范围和性能。 谢谢 问题答案: 是的,java 类。 通过Java SE教程: —如果s2是s1的子集,则返回true。(如果集合s1包含s2中的所有元素,则s2是s1的子集。) —将s1转换为s1和s2的并集。(

  • 我试图减少我的nextjs项目的捆绑包大小,但我遇到了一些树抖动的问题。让我解释一下。我有一个Flags.js文件,可导出多个标志组件: 然后,我只将两个标志导入到另一个组件中: 但我注意到,当我使用webpack bundle analyzer查看捆绑包时,所有标志都被导入。如果我在package.json中应用了sideEffects to false,js包文件大小会减少400kb,但是在导

  • 本文向大家介绍关于Js中new操作符的作用详解,包括了关于Js中new操作符的作用详解的使用技巧和注意事项,需要的朋友参考一下 前言 Js是当今时代最常用的代码操作语言,其中new操作符尤为常见。对于很多代码小白来说,并不清楚new在Js中扮演着怎样的角色,具体是做什么用,干了什么。本文从new操作符的作用着手,简单介绍new操作符相关知识。 什么是new? 众所周知,在JS中,new的作用是通过

  • 问题内容: 更新: 这个已经解决了!这很困难,因为调试起来并不容易。但是,在注意到我在表单标签中有一个表单标签时,我亲切的“回答者”指出,无论这是否是问题的根本原因,都必须对其进行修复。请记住,我同意他的观点,这绝对是继续进行下去的方法,但是由于这是目前的学校项目,因此我选择暂时将内部形式移至外部形式之外以使其完成我所期望的。这涉及更改您在下面看到的一些代码。但是,我不会发布该新代码,因为同样,在