代码之家  ›  专栏  ›  技术社区  ›  Craig

以Restful方式执行数据更改操作

  •  0
  • Craig  · 技术社区  · 5 年前

    我在努力保持清醒,遵守规则。我有一个“Organization”域对象,并且有通常的POST/GET/PUT/DELETE操作:

    邮递 https://www.example.com/api/organisation 保存一个新组织。 收到 https://www.example.com/api/organisation/{id} 通过其ID获取组织 等

    用户可以从客户端(网站、手机等)执行的操作是设置默认组织。在数据库方面,我们只是针对他们想要默认的组织设置一个默认标志。

    但在API方面,我不确定该怎么做,并将其保持在良好的实践中。目前,我的代码中有一个方法:

            [HttpPost]
            public async Task<IActionResult> SetDefaultOrganisation()
    

    我不知道如何将其公开给API。

    https://www.example.com/api/organisation/setdefault/{id}

    这似乎不对。我不想做补丁,因为。。api必须描述发生了什么。这不是一个任何项目都可以改变的问题。

    https://www.example.com/api/organisation/{id}/setdefault 一个更可接受的选择?

    0 回复  |  直到 5 年前
        1
  •  1
  •   Ygalbel    5 年前

    restful端点的一个重要点是以资源为中心,而不是以流程为中心。

    这意味着,如果端点中有动词(一个动作,比如save或add),那么设计中就有问题。

    你在问题中写道

    用户可以从客户端(网站、手机等)执行的操作是设置默认组织

    所以从资源的角度来看,这里的主要资源是用户。

    在这一点上,端点可以是这样的(POST或PUT)

    /api/user/{userId}/orgranizations/default

    身体: { orgID : 1234}

        2
  •  0
  •   Community Mohan Dere    4 年前

    以Restful方式执行数据更改操作

    在REST中,我们向web服务器传递信息的方式是编辑网站。

    这通常是通过以下两种方式之一实现的

    • 我们获取资源的表示,对副本进行编辑,然后将修改后的表示提交给服务器
    • 我们填写表单,并将表单数据的表示形式传递给服务器。

    从REST的角度来看,这两种模式与编辑任何资源时使用的模式相同(这是工作中的统一接口约束:我们的通用工具不需要知道我们所做编辑的任何意义)。

    因此,设计问题在于确定哪些资源(文档)包含所需信息的表示,以及将使用什么表示(模式)来传达信息的更改。

    从通用REST组件的角度来看,我们不在乎文档是什么 --这就是服务器的问题;我们只关心用于标识文档的字符串文字。

    通用组件也不关心拼写约定; /a472a51b-7e36-404b-a985-1fc79d1b7464 是一个非常令人满意的标识符。这种自由度意味着,您可以选择人类易于理解的标识符,以及易于实现路由的标识符。

    /api/organisation/{id}/setdefault

    从通用组件的角度来看,这很好。然而,人类很可能会反对,因为这看起来像是一个 行动 ,我们真正想要的是一个标识符,它告诉我们 文件

    所以这可能是 /api/organization/{id} ,如果在描述组织的文档中的某个地方,我们有一个用户列表,这是默认组织。

    但我认为更常见的情况是 /api/profiles/{userId} ,其中配置文件文档包含有关每个用户的默认组织的信息。

    如果你需要一种细粒度的资源,那么它可能是 /api/profiles/{userId}/defaultOrganization 甚至 /api/defaultOrganizations/{userId}

    (路径段的顺序取决于您希望如何利用相对引用,如 RFC 3986 ).