客户端提供的API服务与服务器生成的ID

我有一个通过API访问的“作业”服务。用户可以POST到端点,然后作业将开始。一段时间后,作业的结果将回发到提供的webhook。

在这种情况下,有两种主要的ID处理方法:

  1. 服务器端-作业开始时,会将ID传递回创建者。然后,创建者将保留该ID,然后在作业完成后,将使用ID将其传递给输出,并能够连接各个点。

  2. 客户端-客户端提交作业的ID。服务器确保此ID是唯一的,然后在完成作业后将其传递回去。


这是我关于该主题(https://www.techyourchance.com/client-generated-ids-vs-server-generated-ids/)的唯一文章


老实说,我不能做这两个的正面或反面。我的直觉说,客户端将不太容易出现用户错误(ID错放)。两者之间是否存在任何有据可查的应用程序?

shifigo 回答:客户端提供的API服务与服务器生成的ID

为什么不是两个?

我最终选择了一条似乎能同时兼顾两种行为的路线。允许用户提交ID,然后在内部实施唯一性。或者,允许他们提交缺少的ID,并为其生成一个ID。


设置了客户端ID

这里最大的风险是提交预先使用的ID(可能被其他人使用)的客户。当前,我强制避免此问题的方法是要求所有提交的ID以客户端ID(例如client#123_client-generated-id#4)开头。这样,所有碰撞都将发生,并且可以避免多次创建项目。


服务器端ID设置

无论哪种方式,最好返回创建的项目的ID。完成此操作后,您可以通过允许客户端明确不包含ID 来进一步扩展该功能。当看到该显式触发器时,您可以为它们创建id并照常返回它。

POST@user/comments -> {
  id: null | "NO_ID" | "VOID" | "Special value specified in the docs"
  userId: "client#123"
  msg: "k"
} -> {
  id: "client#123_server-generated-id#5"
}

通过同时执行这两项操作,应该为您提供一个对于高级用户是幂等的系统(例如,他们不会偶然两次创建相同的事物),对于临时用户来说很容易(他们不会拥有)以管理ID系统。

本文链接:https://www.f2er.com/2982256.html

大家都在问