我有这段代码请求来自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
{
"错误":"找不到请求的视频"
}`
为什么我的代码无法处理此响应? 感谢您的帮助!
答案 0 :(得分:1)
我认为您的代码工作正常。如果视频ID无效,则Vimeo API将返回404
状态代码,正如您所述,正文中包含"The requested video could not be found"
。
我认为您将404误认为是"内部服务错误"。如果API出现内部服务错误,您会看到500 / 5xx错误。
请注意,如果您无权访问该视频(私有视频等),API也可能会返回403 Forbidden
错误