Кэширование etag API YouTube, etag обновляется при каждом запросе - PullRequest
1 голос
/ 14 апреля 2020

Первый шаг:

Я отправил запрос GET

curl --location --request GET 'https://www.googleapis.com/youtube/v3/videos?key={API_KEY}&part=id&chart=mostPopular&regionCode=es&videoCategoryId=17&maxResults=25'

Я получил ответ 200 OK, тело:

{
    "kind": "youtube#videoListResponse",
    "etag": "\"tnVOtk4NeGU6nDncDTE5m9SmuHc/CcRzMe1sxt_kvnG7LpS3dIQoCig\"",
    "nextPageToken": "CBkQAA",
    "pageInfo": {
        "totalResults": 181,
        "resultsPerPage": 25
    },
    "items": [
        {
            "kind": "youtube#video",
            "etag": "\"tnVOtk4NeGU6nDncDTE5m9SmuHc/_GxV3cYD2wcterTfViCosiAVb54\"",
            "id": "LGnQfH8dnow"
        },
        {
            "kind": "youtube#video",
            "etag": "\"tnVOtk4NeGU6nDncDTE5m9SmuHc/-qYNOMCfpr8knbAS5auTTwRVt5Q\"",
            "id": "3cO8sTv9aE4"
        },
        {
            "kind": "youtube#video",
            "etag": "\"tnVOtk4NeGU6nDncDTE5m9SmuHc/4VBqB7u16yEkTMk6sSYEOI4P-hs\"",
            "id": "8-7b4Ixavrg"
        },
        {
            "kind": "youtube#video",
            "etag": "\"tnVOtk4NeGU6nDncDTE5m9SmuHc/ppyJEw0-OpZ3VI56IIn4vwl6Ja8\"",
            "id": "tZvxbUosFWw"
        },
        {
            "kind": "youtube#video",
            "etag": "\"tnVOtk4NeGU6nDncDTE5m9SmuHc/qk0x2ve66gTYW6_g8O4BWlfrvJU\"",
            "id": "_4-KEZw9bX4"
        },
        {
            "kind": "youtube#video",
            "etag": "\"tnVOtk4NeGU6nDncDTE5m9SmuHc/XP7oKSr0MwfURXwaW5nr1Qi8WbE\"",
            "id": "sgERdPX_dkM"
        },
        ...(other videos...)
    ]
}

Я сохранил значение body.etag в кеше , на моей стороне. Это значение: "etag": "\"tnVOtk4NeGU6nDncDTE5m9SmuHc/CcRzMe1sxt_kvnG7LpS3dIQoCig\""

Я отправил тот же запрос GET еще раз, но я добавил If-None-Match: "tnVOtk4NeGU6nDncDTE5m9SmuHc/CcRzMe1sxt_kvnG7LpS3dIQoCig" HTTP-заголовок к этому запросу GET.

curl --location --request GET 'https://www.googleapis.com/youtube/v3/videos?key={API_KEY}&part=id&chart=mostPopular&regionCode=es&videoCategoryId=17&maxResults=25' \
--header 'If-None-Match: "tnVOtk4NeGU6nDncDTE5m9SmuHc/CcRzMe1sxt_kvnG7LpS3dIQoCig"'

Я получил ответ 200 OK, тело:

{
    "kind": "youtube#videoListResponse",
    "etag": "\"tnVOtk4NeGU6nDncDTE5m9SmuHc/_ruxn7w4X-iRBUUok6BWY66DtLU\"",
    "nextPageToken": "CBkQAA",
    "pageInfo": {
        "totalResults": 181,
        "resultsPerPage": 25
    },
    "items": [
        {
            "kind": "youtube#video",
            "etag": "\"tnVOtk4NeGU6nDncDTE5m9SmuHc/_GxV3cYD2wcterTfViCosiAVb54\"",
            "id": "LGnQfH8dnow"
        },
        {
            "kind": "youtube#video",
            "etag": "\"tnVOtk4NeGU6nDncDTE5m9SmuHc/-qYNOMCfpr8knbAS5auTTwRVt5Q\"",
            "id": "3cO8sTv9aE4"
        },
        {
            "kind": "youtube#video",
            "etag": "\"tnVOtk4NeGU6nDncDTE5m9SmuHc/4VBqB7u16yEkTMk6sSYEOI4P-hs\"",
            "id": "8-7b4Ixavrg"
        },
        {
            "kind": "youtube#video",
            "etag": "\"tnVOtk4NeGU6nDncDTE5m9SmuHc/ppyJEw0-OpZ3VI56IIn4vwl6Ja8\"",
            "id": "tZvxbUosFWw"
        },
        {
            "kind": "youtube#video",
            "etag": "\"tnVOtk4NeGU6nDncDTE5m9SmuHc/qk0x2ve66gTYW6_g8O4BWlfrvJU\"",
            "id": "_4-KEZw9bX4"
        },
        {
            "kind": "youtube#video",
            "etag": "\"tnVOtk4NeGU6nDncDTE5m9SmuHc/XP7oKSr0MwfURXwaW5nr1Qi8WbE\"",
            "id": "sgERdPX_dkM"
        },
        ...(other videos...)
    ]
}

Я ожидаю получить 304 без изменений, не 200 OK и тот же результат. Но я все еще получаю 200 OK и новый etag в теле ответа. Смотрите снимок экрана.

difference between responses

Я ожидаю получить только один первый ответ. Я ожидаю получить 304, когда запрашиваю тот же запрос с If-None-Match: "tnVOtk4NeGU6nDncDTE5m9SmuHc/CcRzMe1sxt_kvnG7LpS3dIQoCig", не вызывает изменений в запрашиваемых данных.

...