Skip to contents

STATcubeR allows you to cache responses from the STATcube REST API. This means, for example, that responses for the /table endpoint can be reused.

Setup

Caching is disabled by default. In order to activate or deactivate caching, use the functions sc_cache_enable() and sc_cache_disable()

#> Caching will be available for this session. Add
#> 
#>   STATCUBE_CACHE     = TRUE
#>   STATCUBE_CACHE_DIR = "~/.STATcubeR_cache"
#> 
#> to your .Renviron to enable caching persistently.

The caching directory can be displayed or changed using sc_cache_dir()

#> [1] "~/.STATcubeR_cache"
sc_cache_dir("~/.cache/STATcubeR/api")
sc_cache_dir()
#> [1] "~/.cache/STATcubeR/api"

Using the cache

Caching will affect all calls to sc_table() and sc_schema() as well as their “derived” functions: sc_table_saved(), sc_table_custom(), sc_schema_db(), sc_schema_catalogue().

If the same resource is requested several times, the last valid API response is reused. Invalid resposes (such as 404 responses) will not be added to the cache.

Cache files always contain unparsed API responses as returned by httr::GET() or httr::POST(). Responses are stored in an rds format. If caching is enabled, the corresponding cache files to an object of class sc_schema or sc_table can be retieved using sc_cache_files().

sc_example("accomodation") %>% sc_table(language = "both") %>% sc_cache_files()
#> [1] "~/.cache/STATcubeR/api/3Ks85P6Vxkk-GGbnYJd6d3+st8A=.rds"
#> [2] "~/.cache/STATcubeR/api/vM1s-as1gKR9YGp25eRQQeIEosY=.rds"
#> [1] "~/.cache/STATcubeR/api/4rWB+6cBgJGs21wu059iNOI1LDQ=.rds"

Note that the first call to sc_cache_files() returned two paths. Since the table was requested in two languages, two api responses are necessary to construct the table object.

The content of the cache files can be parsed using readRDS() and httr::content(). This gives direct access to the API response in a list() format. For example, the following syntax can be used to extract the database info from the response.

sc_example("accomodation") %>% sc_table() %>% sc_cache_files() %>%
  readRDS() %>% httr::content() %>% .[["database"]] %>% str()
#> List of 4
#>  $ id            : chr "detouextregsai"
#>  $ uri           : chr "str:database:detouextregsai"
#>  $ label         : chr "Accomodation statistics as of 1974 according to seasons"
#>  $ annotationKeys:List of 1
#>   ..$ : chr "Q"

Cleaning the cache

Cache files can be deleted individually using the paths returned by sc_cache_files(). Alternatively, use sc_cache_clear() to delete all files from the cache.

sc_cache_clear()
#> deleted 12 entries from the cache

Should I use caching?

If you are using STATcubeR interactively, the answer is probably no. However, when building applications that rely on STATcube data caching can be a usefiul way to decrease the traffic with the STATcube server. Another usecase for caching is if you are writing rmarkdown documents that rely on STATcube data. Caching makes those documents both reproducible and quicker to render.

Please note that there is currently no reliable way to invalidate the cache. Therefore, API responses will be reused even if resources get updated on the server.