我正在构建一个基于用户选择的应用程序连接到youtube api并获取某些播放列表的视频列表。 我想安全使用,如果状态不是200,则无法显示下一个屏幕。 我的请求的JSON结果不会返回有关隐私状态以外的状态的任何信息(类似地,如果我获取视频的数据而不是播放列表,我会收到详细信息):
var urlString = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=500&playlistId=\(playlistId)&key=XXXXX"
"status":{
"privacyStatus":"public"
}
如何验证播放列表的请求是否有效? 谢谢!
答案 0 :(得分:0)
我还没有找到一种可靠的方法来测试YT api状态,所以我通常会查找应该存在的调用结果。如果它们不在那里(即空或'0'),则通常是失败的呼叫。
以[totalResults]和/或[title]为例。
答案 1 :(得分:0)
这里有两个部分。
您需要确定实际的HTTP请求是否成功(即https://googleapis/youtube/v3/[method]?[parameters]的请求)
您有一个特定的要求,您需要处理没有数据的情况。 API本身的响应不会明确地提供给您,而是您需要定义失败的含义。
考虑到这一点,您可以实施两级检查:
第一级会检查HTTP状态代码(200
= OK
,400
= Bad Request
等。)
如果您的API请求返回状态200
,您可以继续进行下一级别的检查(请参阅检查2)。但是,如果您的API请求返回状态400
,则请求失败,无需进一步检查(或必需)。
注意:如果您获得400
状态,则响应中会有一些JSON,其中包含有关错误的详细信息。
{
"error": {
"errors": [
{
"domain": "youtube.parameter",
"reason": "missingRequiredParameter",
"message": "No filter selected. Expected one of: id, playlistId",
"locationType": "parameter",
"location": ""
}
],
"code": 400,
"message": "No filter selected. Expected one of: id, playlistId"
}
}
第二级将检查是否已返回任何结果(因为似乎可能有HTTP状态代码200
并且没有结果)。
这与实际HTTP请求本身的 status 无关。相反,您必须检查响应以查看应用程序所需的数据是否存在。
以下200
响应为例,items
数组为空。所以你可以说,即使请求成功,这也是一个失败的情况,并没有显示你的下一个屏幕。
{
"kind": "youtube#playlistItemListResponse",
"etag": "\"[etag would appear here]\"",
"nextPageToken": "CAAQAA",
"pageInfo": {
"totalResults": 199,
"resultsPerPage": 0
},
"items": [
]
}
注意:以上是将每页结果故意设置为0的示例。