【问题标题】:JSON API: Succes Message without resourceJSON API:没有资源的成功消息
【发布时间】:2017-08-11 20:51:01
【问题描述】:

我们正在使用 JSON-API 标准来开发我们的 API,我们遇到了一个问题,似乎没有遵循标准的明显解决方案。

用例如下:

有一个 API 端点允许您订阅邮件列表。 一种可能的流程是将用户添加为 PENDING 表示用户将收到并选择加入确认电子邮件。

如果是这种情况,我们想向前端返回一条消息 可以显示给用户,促使他点击链接。

在我看来,这并不是真正的错误状态,更多的是后续元信息。所以这意味着将它放在错误消息中在概念上是不合逻辑的。此外,如果我们确实将它放在错误消息中,前端必须以某种方式将其与“真正的错误”区分开来(状态码的分辨率如此之低,以至于冲突似乎不可避免)。

但是,我们不返回资源,因此我们无法将其作为元信息添加到资源中。所以现在我不知道把这些信息放在哪里。

一种可能的解决方案是定义某种“响应”资源并将其放入其中,但这看起来就像一罐蠕虫。

有什么想法吗?投入会很受重视

【问题讨论】:

    标签: api-design json-api


    【解决方案1】:

    如果调用的结果是将用户添加到邮件列表中,则返回200 OK。如果调用的结果是用户必须通过电子邮件选择加入,则返回 202 Accepted。返回一个带有202 的响应对象,其中包含相关信息。

    来自规范:

    202(Accepted)状态码表示请求已经被 接受处理,但处理尚未完成。 该请求最终可能会或可能不会被执行,因为它可能会 在实际进行处理时被禁止。没有 HTTP 中用于从异步重新发送状态代码的工具 操作。

    202 响应是故意不置可否的。其目的是 允许服务器接受对其他进程的请求(可能是 面向批处理的过程,每天只运行一次) 要求用户代理与服务器的连接持续存在 直到该过程完成。与此一起发送的表示 响应应该描述请求的当前状态并指向 (或嵌入)一个状态监视器,可以为用户提供 估计何时会满足请求。

    【讨论】:

    • 我刚刚看到,根据规范,您可以返回一个没有资源但具有顶级 _meta 类别的 Response 对象。这是您要鼓励的成功信息还是您有不同的选择?
    • 对于没有后续电子邮件的请求,我将返回 200/204(如果您想要正文,则返回 200,如果不希望,则返回 204)。对于确实需要后续电子邮件的请求,我会返回一个 202,其正文包含任何相关信息,例如您要提供的消息。我不认为鼓舞人心的信息是元信息,不。
    • 我不太清楚你最后一句话的意思。你说你会返回一个包含鼓励信息但不在元字段中的正文?你会把它放在哪里?还是你不考虑 json-api 规范?
    • 正确。我会把它作为数据的属性,因为它不是我认为的元数据。
    • :-) 我说我会这样做 { "data": { "attributes": { "encouragingMessage": "Check your email!", ...}, ...}, ...} 好吧,真的,I 只是把它留给客户端,而不是从服务器传回消息,但我假设这不是你的选择。
    猜你喜欢
    • 2017-12-04
    • 1970-01-01
    • 2014-10-30
    • 2012-09-05
    • 2018-10-04
    • 1970-01-01
    • 2018-08-27
    • 2013-03-01
    • 2020-07-31
    相关资源
    最近更新 更多