写一个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中编写此应用程序,但我对行为感兴趣,而不是实际的实现。
因为每个地方的逻辑都相同,所以欢迎使用任何语言的答案。
答案 0 :(得分:0)
首先,您需要区分这两种类型的错误:
当发送具有不支持的媒体类型的请求时,应返回415。由于没有标题指示端点接受哪些媒体类型并且需要精确信息,因此可以在响应的正文中返回详细消息。简而言之,返回415并带有消息支持XML和JSON 。在大多数框架中,可以捕获并包装返回的错误。请记住只有始终以相同格式返回错误消息,以便消费者可以轻松解析它。
以有效格式(JSON)发送请求时,例如单个字段作为String的实例发送,并且必须是整数, 400 应返回详细消息。
希望对你有所帮助。