【问题标题】:How to tell the client that the data type is unsupported如何告诉客户端数据类型不受支持
【发布时间】:2015-07-11 04:50:02
【问题描述】:

编写一个 RESTful API,我偶然发现了一个问题。
如果客户端以 API不支持的格式 POST/PUT 一些数据,服务器应该如何提醒客户端?

例如: 客户端以 QueryString 格式发布了一些数据

fieldA=foo&fieldB=bar

但是服务器只接受 JSON,所以数据应该像这样 POST:

{"fieldA": "foo", "fieldB": "bar"}

目前,我正在发送 415 状态码(PHP 代码):

header("HTTP/1.1 415 Unsupported Media Type", true, 415);

但这并没有告诉客户端 API 接受/使用哪种媒体类型。
此外,这是否足够或 正确的方法 使请求失败?

问题是,在 RESTful API 中,告诉客户端发送到服务器的数据是不受支持的媒体类型的最佳方式是什么,以及服务器如何告诉客户端支持/预期什么?

PS:我正在用 PHP 编写这个应用程序,但我对行为感兴趣,而不是实际的实现。
由于逻辑在任何地方都是相同的,因此欢迎使用任何语言进行回复。

【问题讨论】:

    标签: rest http-headers


    【解决方案1】:

    首先你需要区分这两种类型的错误:

    1. 400 错误请求 - 不等于:
    2. 415 不支持的媒体类型

    当发送媒体类型不受支持的请求时,应返回 415。由于没有标头指示端点接受哪些媒体类型并且需要精确的信息,因此可能会在响应的正文中返回详细的消息。简而言之,返回 415 并带有消息支持 XML 和 JSON。在大多数框架中,返回的错误可以被捕获和包装。请记住只始终以相同的格式返回错误消息,以便消费者可以轻松解析它。

    当请求以有效格式 (JSON) 发送时,例如单个字段作为 String 的实例发送,并且必须是 Integer,400 应返回详细消息。

    希望对你有所帮助。

    【讨论】:

    • 如果是 415,服务器是否应该返回任何标头以告知预期的媒体类型?如果不是,服务器是否应该在响应内容中发送此信息?此消息是否应遵循任何标准或格式?
    • 不,没有。正如我在回答中所写。这种信息很容易携带在体内。没有这样的格式。您可以介绍自己的,但正如我所写,所有错误消息都要保持一致。
    • "您可以引入自己的,但正如我所写的,所有错误消息都要保持一致。"完美...谢谢... ;D
    猜你喜欢
    • 2012-03-30
    • 2019-06-29
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 2015-12-28
    • 2016-09-02
    • 1970-01-01
    相关资源
    最近更新 更多