2016-07-06 37 views
1

这里是用例:提示用户完成API之前警告的NodeJS

用户调用的API。 API发现它正在覆盖之前保存的内容 。为了提前完成,用户需要说“是,提前 并覆盖”或“否,不覆盖”。所以基本上需要一种方式 发回应答,并得到用户选择的请求,然后 继续操作。

我的担忧是:

  • 什么是这样做的最佳做法是什么?
  • 如果我休会服务并根据需要返回响应。用户输入选择后是否需要激活相同的API?

我正在使用Nodejs/Express和Angularjs。

回答

0

如果你只是想开发API,那么你可以:

  1. 创建另一个API来检查是否存在数据;调用API数据是否之前

    做像“canOverwrite”在API中的另一个标志,并与用户确认:然后

  2. 与API继续与用户

或确认后如果存在可以被覆盖。

使用websockets而不是HTTP调用也会给你发送确认信息的灵活性(但可能不适用于AngularJS)。

+0

检查数据是否存在于一个API调用中,然后根据客户端中的数据做出决定是竞争条件。检查然后应用覆盖逻辑需要是服务器上的原子操作,以避免竞争条件与其他某个API请求更改数据是否存在。 – jfriend00

+0

@j_k喜欢在下面的ans指出。如果验证API之间发生数据更改并继续执行操作api –

+0

如果API处理事务性数据,则需要具有与验证api相关的时间戳并更新Pai –

1

每个API请求应该可能是无状态的。要做到这一点,您需要在API中添加一个选项,指示服务器在发生覆盖时应该执行的操作。客户端可以指定覆盖是否存在,或者不覆盖并返回数据已经存在的状态。

然后,如果它会提示用户并进行第二次API调用以请求覆盖,则由客户端决定。这是客户端行为,而不是服务器策略。

如果客户端首先发送don't overwite,然后在提示进行第二次API调用后要求覆盖,那么服务器可能必须重新从头开始重新运行API调用。具体实现是否可以暂时从第一个请求中缓存任何内容以提高第二个请求的性能。这是服务器上的实现选择,与其他提高性能的缓存相同。

+0

这就是我该怎么做的。没有“覆盖”标记但实际上是覆盖的请求返回405,并且客户端将该解释为“必须已经有数据,需要请求用户明确覆盖”。 – jonrsharpe

0

由于上面提到的@ jfriend00,REST API应该是无状态的。但是你可以通过后端nodeJs代码实现这一点。其实这是一种幻觉,但实际上并非如此。

所以,你将有两个端点像

  1. /数据/验证

    这只是检查数据是否存在于数据库中,并发送一个真或假的UI

  2. /数据/加

    现在我f用户想要覆盖并点击UI上的'OVERWRITE'按钮或者某个东西,向这个端点发送一个覆盖数据的请求。

如果用户不想覆盖,请不要调用添加端点。

+0

问题在于,有人可能在验证和添加之间添加了数据。在这种情况下,添加端点仍然需要正确行为,而不是假设如果它被调用,那么应该覆盖那里的任何东西。另请参阅http://stackoverflow.com/questions/38216592/prompt-user-a-warning-before-completing-a-api-nodejs/38216707#comment63856612_38216707对此提出的其他答案。 – jonrsharpe

+0

好点。可能在验证api中,可以在数据中设置一个标志,将数据锁定为特定时间?随后的验证调用只会检查lockState并在其锁定时退出。这样,可以避免竞争条件。 – Srijith

+0

那么......有状态?而不仅仅是幻觉。这将工作,但它不是很RESTful! – jonrsharpe