如何告诉客户端数据类型不受支持

时间:2015-07-11 04:50:02

标签: rest http-headers

写一个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中编写此应用程序,但我对行为感兴趣,而不是实际的实现。
因为每个地方的逻辑都相同,所以欢迎使用任何语言的答案。

1 个答案:

答案 0 :(得分:0)

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

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

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

    希望对你有所帮助。