Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带通知端点的RESTAPI设计_Api_Rest - Fatal编程技术网

带通知端点的RESTAPI设计

带通知端点的RESTAPI设计,api,rest,Api,Rest,我正在创建一个API端点,它接受客户订单,创建订单并发送电子邮件通知。在我们当前的设计中,一旦我们成功创建订单,我们将向客户发送成功通知201,然后调用我们的内部电子邮件api。收到我们的成功通知后,客户端应用程序会向用户显示一条消息以检查其电子邮件 我对这种设计感到不舒服,因为如果出于某种原因,电子邮件发送方法失败了,客户将无法理解这一点。另一方面,如果我们等待成功发送电子邮件,然后发送客户端应用程序成功通知,则需要更长的时间 那么,克服这个问题的正确方法是什么呢 我认为你的设计很管用。如果邮

我正在创建一个API端点,它接受客户订单,创建订单并发送电子邮件通知。在我们当前的设计中,一旦我们成功创建订单,我们将向客户发送成功通知201,然后调用我们的内部电子邮件api。收到我们的成功通知后,客户端应用程序会向用户显示一条消息以检查其电子邮件

我对这种设计感到不舒服,因为如果出于某种原因,电子邮件发送方法失败了,客户将无法理解这一点。另一方面,如果我们等待成功发送电子邮件,然后发送客户端应用程序成功通知,则需要更长的时间


那么,克服这个问题的正确方法是什么呢

我认为你的设计很管用。如果邮件服务不起作用,客户为什么会在意呢?如果订单通过了服务器上的所有验证并被持久化,我会将其视为成功状态并返回
201 Created

当客户机被创建时,按照你说的去做;给用户一条关于检查邮件的信息,但告诉他们应该有一些耐心。比如:

您的订单已提交。请检查你的邮件。如果您在24小时内没有收到邮件,请与我们联系,“或在此提供任何其他解决方案”

您无法控制邮件到达用户邮箱的时间,因为邮件发送不是同步过程


记住:分开你的消费者。

我认为你的设计是可行的。如果邮件服务不起作用,客户为什么会在意呢?如果订单通过了服务器上的所有验证并被持久化,我会将其视为成功状态并返回
201 Created

当客户机被创建时,按照你说的去做;给用户一条关于检查邮件的信息,但告诉他们应该有一些耐心。比如:

您的订单已提交。请检查你的邮件。如果您在24小时内没有收到邮件,请与我们联系,“或在此提供任何其他解决方案”

您无法控制邮件到达用户邮箱的时间,因为邮件发送不是同步过程


记住:分开你的客户。

202接受通常是对需要进一步处理的请求的最合适的响应。但是,在您的情况下,这可能是不对的,因为电子邮件不是资源创建的基础


201 Created
完全可以接受,因为订单实际上已经创建。但是,正如规范所说,您应该返回一个
Location
头,其中包含所创建资源的URI和一个描述如何访问资源的实体。这应该可以解决邮件服务失败的问题-客户仍然可以访问他们的订单,老实说,电子邮件不能保证送达,因此我希望电子邮件不是您业务流程中绝对需要的一部分。

202接受通常是对需要进一步处理的请求的最合适的响应。但是,在您的情况下,这可能是不对的,因为电子邮件不是资源创建的基础


201 Created
完全可以接受,因为订单实际上已经创建。但是,正如规范所说,您应该返回一个
Location
头,其中包含所创建资源的URI和一个描述如何访问资源的实体。这应该可以解决邮件服务失败的问题-客户仍然可以访问他们的订单,老实说,电子邮件不能保证送达,因此我希望电子邮件不是您业务流程中绝对需要的一部分。

您的内部电子邮件API是否经常失败这是一个问题?您当前的设计在我看来似乎是正确的,只要消息类似于“尽快查找我们的电子邮件”—您基本上无法控制电子邮件发送的速度。@ceejayoz它没有失败,但我们能假设它不会失败吗?由于我们通过电子邮件提供订单摘要,因此我们的用户正确接收电子邮件非常重要。如果您希望在成功将电子邮件传递给API之前,这仍然不意味着电子邮件将很快或根本不会发送。您的内部电子邮件API是否经常失败?这是一个问题?您当前的设计在我看来似乎是正确的,只要消息类似于“尽快查找我们的电子邮件”——您基本上无法控制电子邮件发送的速度。@ceejayoz不是这样的失败,但我们能假设它不会失败吗?由于我们通过电子邮件提供订单摘要,因此我们的用户正确接收电子邮件非常重要。如果您希望在成功将电子邮件传递给API之前,这仍然不意味着电子邮件将很快或根本不会发送。我曾考虑使用202,但我认为它更令人困惑,因为在这种情况下,客户只知道订单已被接受,但它甚至无法判断订单是否已创建。我想这是201案例的发展方向。这个答案是完全正确的。我曾考虑使用202,但我认为它更令人困惑,因为在这种情况下,客户只知道订单已被接受,但它甚至无法判断订单是否已创建。我认为这是201案例。这个答案完全正确。