当请求的视频ID与资源不匹配时,如何处理来自Vimeo API的JSON响应

时间:2017-03-28 16:14:33

标签: ruby-on-rails json video vimeo vimeo-api

我有这段代码请求来自Vimeo API的视频,只要video_id是有效ID,它就可以工作,但是如果我的ID无效,我会收到内部服务器错误。我知道我的代码在本节中有所突破。我相信我不知道如何阅读我从API获得的JSON响应。

以下是我的代码,以及我在使用终端请求无效ID的视频时收到的JSON响应。

VIMEO_REGEX = %r{(?:vimeo?\.com\/(\d+))}
    def video_id
      self.class.search_params(metadata)
    end

    def self.search_params(metadata)
      return unless metadata && metadata[:url]
      match_data = metadata[:url].match(VIMEO_REGEX)
      match_data.try(:[], 1)
    end

    def self.metadata_fields
      [:url]
    end

    protected

    def validate_metadata_url
      return unless errors.empty?
      errors .add :metadata, 'url is not a valid vimeo url' unless metadata[:url].match(VIMEO_REGEX)
    end

    def validate_api_payload
      validate_metadata_url
      return unless errors.empty?
      metadata[:payload] = JSON.parse RestClient.get(
        "https://api.vimeo.com/videos/#{video_id}",
        'Authorization' => 'Bearer ##################')
      errors.add :metadata, 'resource not found' if metadata[:payload][:errors]
    end

我正在查看的代码部分是validate_api_payload,其余代码仅用于上下文。

JSON回复:

`curl -H "Authorization: Bearer ###" https://api.vimeo.com/videos/21011831o

{
    "错误":"找不到请求的视频" }`

为什么我的代码无法处理此响应? 感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我认为您的代码工作正常。如果视频ID无效,则Vimeo API将返回404状态代码,正如您所述,正文中包含"The requested video could not be found"

我认为您将404误认为是"内部服务错误"。如果API出现内部服务错误,您会看到500 / 5xx错误。

请注意,如果您无权访问该视频(私有视频等),API也可能会返回403 Forbidden错误

此处有更多信息:https://developer.vimeo.com/api/endpoints/videos