我正在构建一个基于用户选择的应用程序,该应用程序连接到youtube api并获取某些播放列表的视频列表。 我想让它安全使用,如果状态不是 200,则无法显示下一个屏幕。 我的请求的 JSON 结果不会返回除隐私状态之外的任何状态信息(同样,如果我获得视频而不是播放列表的数据,我会获得详细信息):
var urlString = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=500&playlistId=(playlistId)&key=XXXXX"
"status":{
"privacyStatus":"public"
}
如何验证播放列表请求是否有效? 谢谢!
我还没有找到测试YT api状态的可靠方法,所以我通常会从应该存在的调用中寻找结果。如果它们不存在(即空或"0"),那么它通常是一个失败的调用。
所以[总结果]和/或[标题]作为例子。
这里有两部分。
-
您需要确定实际的 HTTP 请求是否成功(即请求 https://googleapis/youtube/v3/[方法]?参数])
-
您有一个特定的要求,您需要处理没有数据的情况。来自 API 本身的响应不会显式提供此信息,而是需要定义失败的含义。
考虑到这一点,您可以实施两个级别的检查:
检查 1 - HTTP 状态代码
第一级将检查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"
}
}
检查 2 - 数据
第二级将检查是否返回了任何结果(因为似乎可能具有 HTTP 状态代码200
而没有结果)。
这与实际 HTTP 请求本身的状态无关。相反,您必须检查响应以查看应用程序所需的数据是否存在。
在下面的200
响应示例中,items
数组为空。因此,您可以说,即使请求成功,这也是失败条件,并且不会显示下一个屏幕。
{
"kind": "youtube#playlistItemListResponse",
"etag": ""[etag would appear here]"",
"nextPageToken": "CAAQAA",
"pageInfo": {
"totalResults": 199,
"resultsPerPage": 0
},
"items": [
]
}
注意:以上是特意将每页结果设置为 0 的示例。