收到 HTTP 400 响应

HTTP 400 response received

已发送以下 HTTP 请求并收到 HTTP 400 响应。导致它失败的请求有什么问题?

 POST /api/v2/organizations/4523jddfgd/projects HTTP/1.1
 Host: www.reddit.com
 Content-Type: application/json
 Authorization: Bearer VALID_API_TOKEN

   [
     "name": "Project 1",
     "package": "Standard",
     "address": {
     "street": "12456 Main St",
     "city": "Dallas",
     "zip": "75200",
     "state": "TX",
     "country": "USA"
     }
  ]

这是一道面试题,大家能帮帮我吗?

查看 MDN wiki page 关于 HTML 状态码 400。

状态代码 400 指向客户端错误,例如格式错误的请求 body。另一个原因可能是缺少必需的 header。如 MDN wiki 页面所示,您不应尝试再次发送相同的未修改请求,因为结果将是相同的,因为它不是服务器端问题。

您应该做的是:再次查阅 API 文档并确保没有 header 遗漏并且请求 body 有效(即有效 JSON/ XML/ 任何正确的结构)。

查看您的请求,我发现 body 无效 JSON。

[
     "name": "Project 1",
     "package": "Standard",
     "address": {
     "street": "12456 Main St",
     "city": "Dallas",
     "zip": "75200",
     "state": "TX",
     "country": "USA"
     }
  ]

无法解析,因此出现错误。数组不能保存属性。缺少的是 [ 之后和结束 ] 之前的 {}。 使用以下请求 body 应该可以。

[
   {
      "name":"Project 1",
      "package":"Standard",
      "address":{
         "street":"12456 Main St",
         "city":"Dallas",
         "zip":"75200",
         "state":"TX",
         "country":"USA"
      }
   }
]

编辑

正如@Evert 指出的那样,您更有可能需要将 [] 替换为 {},因为 POST 请求用于创建单个新资源。但您可以绝对确定的唯一方法是阅读 API 文档。

{
   "name":"Project 1",
   "package":"Standard",
   "address":{
      "street":"12456 Main St",
      "city":"Dallas",
      "zip":"75200",
      "state":"TX",
      "country":"USA"
   }
}