跳转到主要内容

典型响应结构

成功的响应会返回 200 系列 HTTP 状态码,并携带基于 JSON 的有效负载,其中包含被请求、创建、修改或删除的对象,以及服务器对您请求的理解说明。 如果您的请求成功,响应中会包含一个 request 节点,用于回显您的请求。 示例: GET accounts/abcdefg/campaigns?with_deleted=true
{
  /* 您的响应数据... */,
  "request": {
    "params": {
      "account_id": "abcdefg",
      "with_deleted": "true"
    }
  }
}
JSON 响应中的 data 字段将包含与所用资源相关的具体对象。当响应可能包含一个或多个结果时,data 节点的格式为 JSON 数组;当响应仅可能包含一个结果时,则返回 JSON 映射(hash)。在某些少见情况下,你可能会看到原本应返回集合的响应却返回了一个映射(hash)。此时,应将该单个映射视为一个对象,其类型与 type 字段中指定的类型相同。

错误响应结构

错误响应会返回非 200 系列的 HTTP 状态码。通常会附带 JSON 响应,但有些错误会返回不同类型的响应体。在无法解析响应结构的情况下,应以该 HTTP 状态码的核心含义为准。例如,你可能偶尔会看到 HTTP 404 搭配 HTML 响应。在这种情况下,可以合理地认为内容无法找到(HTTP 404 表示“未找到”)。 典型的错误响应与成功响应的结构相似。错误的性质会在响应的 errors 节点中体现。errors/code 节点表示一个 CAPS_CASE 常量错误码,你可以以编程方式使用它来做出处理/修复决策。errors/message 节点表示一个(通常为)英文的人类可读的错误描述。还可能附带其他 fields 以提供更细粒度的错误细节。
{
  "errors": [
    {
      "parameter": "start_time",
      "details": "日期无效",
      "code": "INVALID_PARAMETER",
      "value": "",
      "message": "start_time 应为时间值,实际收到空字符串 \"\""
    }
  ],
  "request": {
    "params": {
      "account_id": "hkk5"
    }
  }
}
在上述示例中,对某个 analytics 端点的请求包含了无效的 start_time 参数值。对于含有无效参数的请求,其 errors/codeINVALID_PARAMETER
HTTP Code错误代码
403ACCOUNT_LOCKED_OUT
404ACCOUNT_MEDIA_NOT_FOUND
403ACCOUNT_NOT_FOUND
403ACTION_NOT_ALLOWED
404APP_EVENT_PROVIDER_CONFIGURATION_NOT_FOUND
404APP_EVENT_TAG_NOT_FOUND
404BEHAVIOR_OR_BEHAVIOR_EXPANDED_NOT_FOUND
404CAMPAIGN_NOT_FOUND
408CANCELLED_REQUEST
404CARD_NOT_FOUND
403CURRENT_USER_SUSPENDED
400DUPLICATE_TWEET
400EXCLUSIVE_PARAMETERS
400FEATURE_NOT_AVAILABLE
403FUNDING_INSTRUMENT_ACCESS_NOT_ALLOWED
403FUNDING_INSTRUMENT_EXCEEDS_AVAILABLE_CREDIT_LIMIT
404FUNDING_INSTRUMENT_NOT_FOUND
403GENERIC_TWEET_ERROR
400ILLEGAL_CHARACTERS
400INCLUSIVE_PARAMETERS
500INTERNAL_ERROR
404INVALID_APP_ID
404INVALID_APP_STORE
400INVALID_DENOMINATION
400INVALID_FUNDING_INSTRUMENT
404INVALID_IAB_CATEGORY
404INVALID_ID_ILLEGAL_CHARACTERS
400INVALID_IMAGE
400INVALID_MEDIA
400INVALID_MEDIA_ID
400INVALID_PARAMETER
400INVALID_PLACEMENT_TYPE
400INVALID_TAILORED_AUDIENCE_TYPE
400INVALID_TARGETING_TYPE
400INVALID_TIME_WINDOW
400INVALID_TV_SHOW_LOCATIONS
400INVALID_TWEET
400INVALID_USER
400INVALID_USER_ID
423LOCK_ACQUISITION_TIMEOUT
404LINE_ITEM_APP_NOT_FOUND
404LINE_ITEM_NOT_FOUND
404MACT_APP_NOT_FOUND
403MALWARE_STATUS
404MEDIA_CREATIVE_NOT_FOUND
404MEDIA_NOT_FOUND
405METHOD_NOT_ALLOWED
400MISSING_PARAMETER
404NO_PROVIDER_AVAILABLE_FOR_THIS_CLIENT_APPLICATION
404NOT_FOUND
404PROMOTABLE_USER_NOT_FOUND
404PROMOTED_ACCOUNT_NOT_FOUND
404PROMOTED_TWEET_NOT_FOUND
403READONLY_CLIENT_APPLICATION
400REQUEST_TOO_COMPLEX
404ROUTE_NOT_FOUND
503SERVICE_UNAVAILABLE
503OVER_CAPACITY
400SPEND_EXCEEDS_BUDGET
404TAILORED_AUDIENCE_CHANGE_FILE_NOT_FOUND
404TAILORED_AUDIENCE_NOT_FOUND
404TAILORED_AUDIENCE_OR_TAILORED_AUDIENCE_EXPANDED_NOT_FOUND
404TARGETING_CRITERION_NOT_FOUND
400TOO_MANY_CAMPAIGNS
400TOO_MANY_LINE_ITEMS
429TOO_MANY_REQUESTS
400TV_SHOW_OUTSIDE_MARKET
400TWEET_CANNOT_BE_BLANK
403TWEET_IS_SPAM
404TWEET_NOT_FOUND
429TWEET_RATE_LIMIT_EXCEEDED
401UNAUTHORIZED_ACCESS
403UNAUTHORIZED_CLIENT_APPLICATION
400UNKNOWN_CARD_TYPE
400UNKNOWN_CRITERIA_TYPE
403USER_NOT_FOUND
404WEB_EVENT_TAG_NOT_FOUND