Rest 我应该使用一个HTTP请求来检查一个操作是否可行,然后使用另一个HTTP请求来执行该操作,还是应该将其捆绑到一个请求中?

Rest 我应该使用一个HTTP请求来检查一个操作是否可行,然后使用另一个HTTP请求来执行该操作,还是应该将其捆绑到一个请求中?,rest,http,backend,Rest,Http,Backend,我正在制作一个网站,在那里用户可以加入游戏室到一定数量的玩家。我不知道该如何处理试图加入房间的用户。我想到了两个想法: 向后端请求检查文件室是否已满,然后请求将用户添加到文件室,前提是第一个请求返回肯定响应 只发出一个在后端执行所有逻辑的请求,然后在房间未满时将用户添加到房间中,或者返回某种消息向前端表示房间已满 第二种方法似乎更有效,前端和后端之间的来回更少,但它也会在响应格式中造成不一致。更好的做法是什么? 如果相关的话,我正在使用带有RESTAPI的MERN堆栈,但我认为我的问题更一般。我

我正在制作一个网站,在那里用户可以加入游戏室到一定数量的玩家。我不知道该如何处理试图加入房间的用户。我想到了两个想法:

  • 向后端请求检查文件室是否已满,然后请求将用户添加到文件室,前提是第一个请求返回肯定响应
  • 只发出一个在后端执行所有逻辑的请求,然后在房间未满时将用户添加到房间中,或者返回某种消息向前端表示房间已满
  • 第二种方法似乎更有效,前端和后端之间的来回更少,但它也会在响应格式中造成不一致。更好的做法是什么?

    如果相关的话,我正在使用带有RESTAPI的MERN堆栈,但我认为我的问题更一般。

    我认为最好的选择是使用选项2。如果房间还没有满,就没有必要提出两个要求。如果房间已满,您只需确定最合适的响应。您可以返回一个200(OK),并且在响应正文中包含一些有意义的错误代码,您的客户知道这意味着房间已满;或者使用500级代码,例如503(服务不可用),表示无法加入房间。由于房间已满不是与客户相关的“错误”,400级代码不合适。

    我认为最好的选择是选择选项2。如果房间还没有满,就没有必要提出两个要求。如果房间已满,您只需确定最合适的响应。您可以返回一个200(OK),并且在响应正文中包含一些有意义的错误代码,您的客户知道这意味着房间已满;或者使用500级代码,例如503(服务不可用),表示无法加入房间。由于文件室已满不是与客户端相关的“错误”,因此400级代码将不合适。

    需要注意的一点是,您处于分布式系统中-客户端未针对其他编辑锁定“文件室”。实际上,这意味着您正在谈论:web客户端看到的信息是陈旧的(至少有纳秒的时间)并且可能会更改

    所以有一个竞争条件——当“添加”请求到达时,房间的可用性可能已经改变

    这意味着您的“添加”请求协议需要为不太愉快的路径做一些准备。客户端实现将需要处理add请求确实产生所需响应的情况

    所以不管怎样,每个人都必须处理这个案子;飞行前的检查实际上并没有为你节省任何工作

    所以你的第二种方法很好

    但这也造成了响应格式的不一致性


    不是真的-同样,您必须处理故障模式。所以现在我们只是在争论哪个数据/元数据被用作客户端代码必须分支的谓词

    需要注意的一件重要事情是,您处于一个分布式系统中—客户端没有针对其他编辑锁定“房间”。实际上,这意味着您正在谈论:web客户端看到的信息是陈旧的(至少有纳秒的时间)并且可能会更改

    所以有一个竞争条件——当“添加”请求到达时,房间的可用性可能已经改变

    这意味着您的“添加”请求协议需要为不太愉快的路径做一些准备。客户端实现将需要处理add请求确实产生所需响应的情况

    所以不管怎样,每个人都必须处理这个案子;飞行前的检查实际上并没有为你节省任何工作

    所以你的第二种方法很好

    但这也造成了响应格式的不一致性

    不是真的-同样,您必须处理故障模式。所以现在我们只是在争论哪个数据/元数据被用作客户端代码必须分支的谓词