REST API - 设计一个 POST API - 如果它为同一用户多次调用
REST API - Design a POST API - if its called multiple times for a same user
我刚开始设计 RESTful API,目前正在开发用于管理学校学生的 API。
每个学生都有一个唯一的卷号,客户在 adding/creating 用户时提供该卷号。服务会为每个添加的用户创建一个唯一的内部 ID。
如果客户端为同一用户发出多个 POST 调用,在这种情况下推荐的选项是什么?使用现有资源 ID 是否成功?还是错误?或其他。
您有两个选项,POST 和 PUT,您可以根据需要选择其中之一或两者。
如果选择POST,并且资源已经存在,则抛出一个错误提示资源存在。
如果您选择 PUT,并且资源已经存在,则更新资源和 return 现有资源 ID。
这些是广泛遵循的惯例,对 api 消费者来说很直观。如果您在任何特殊情况下偏离这些,那么您必须确保 api 消费者了解您的约定。
这个 link 可能超级有用 - PUT vs. POST in REST
If clients make multiple POST calls for the same user, what are the recommended options in this scenario? Success with an existing resource id? or an error? or something else.
要记住的一件重要事情是,在不可靠的网络上,客户端无法区分丢失的 请求 和丢失的 响应 .所以你可能会受益于一个明确的协议来处理这种情况。
Idempotent 请求处理可能是您最好的选择:告诉客户端用户创建成功的次数不限。
有一种极端情况,您会收到两条具有相同唯一标识符的消息,但其他数据不同,您应该通过协议找出这种情况下的正确行为(先写者获胜?最后写者获胜?引发冲突?)请记住,您无法保证请求按发送顺序到达。
注意:因为您使用的是 POST,通用组件不会知道请求是幂等的,也无法利用它,这很好。支持 PUT 而不是 POST 的资源模型将允许通用组件处理丢失的消息,但还有其他权衡(例如,HTML 表单不支持 PUT)。
我刚开始设计 RESTful API,目前正在开发用于管理学校学生的 API。
每个学生都有一个唯一的卷号,客户在 adding/creating 用户时提供该卷号。服务会为每个添加的用户创建一个唯一的内部 ID。
如果客户端为同一用户发出多个 POST 调用,在这种情况下推荐的选项是什么?使用现有资源 ID 是否成功?还是错误?或其他。
您有两个选项,POST 和 PUT,您可以根据需要选择其中之一或两者。
如果选择POST,并且资源已经存在,则抛出一个错误提示资源存在。
如果您选择 PUT,并且资源已经存在,则更新资源和 return 现有资源 ID。
这些是广泛遵循的惯例,对 api 消费者来说很直观。如果您在任何特殊情况下偏离这些,那么您必须确保 api 消费者了解您的约定。
这个 link 可能超级有用 - PUT vs. POST in REST
If clients make multiple POST calls for the same user, what are the recommended options in this scenario? Success with an existing resource id? or an error? or something else.
要记住的一件重要事情是,在不可靠的网络上,客户端无法区分丢失的 请求 和丢失的 响应 .所以你可能会受益于一个明确的协议来处理这种情况。
Idempotent 请求处理可能是您最好的选择:告诉客户端用户创建成功的次数不限。
有一种极端情况,您会收到两条具有相同唯一标识符的消息,但其他数据不同,您应该通过协议找出这种情况下的正确行为(先写者获胜?最后写者获胜?引发冲突?)请记住,您无法保证请求按发送顺序到达。
注意:因为您使用的是 POST,通用组件不会知道请求是幂等的,也无法利用它,这很好。支持 PUT 而不是 POST 的资源模型将允许通用组件处理丢失的消息,但还有其他权衡(例如,HTML 表单不支持 PUT)。