EpiGraphDB as a collated resource offers rich integrative epidemiological evidence for researchers to use, which can be queried from our RESTful API service.
EpiGraphDB web application:
EpiGraphDB web API (OpenAPI / swagger interface):
The R package is designed to give users quick access to some of the key resources, but not as a comprehensive replacement of the web API. At the moment EpiGraphDB is still under fast and active development with frequent addition of new API endpoints that might not have corresponding functions available in the R package.
In this tutorial we will discuss two alternative methods to get data from the EpiGraphDB web API – using httr
in R and using curl
in the command line.
httr
Here are some examples of querying EpiGraphDB web API using httr:
library("epigraphdb")
<- getOption("epigraphdb.api.url")
url <- list(
payload exposure_trait = "Body mass index",
outcome_trait = "Coronary heart disease"
)<- httr::RETRY("GET", glue::glue("{url}/mr"), query = payload)
r %>%
r ::content(as = "parsed") %>%
httrstr(2)
#> List of 2
#> $ metadata:List of 3
#> ..$ query : chr "MATCH (exposure:Gwas)-[mr:MR_EVE_MR]->(outcome:Gwas) WHERE exposure.trait = \"Body mass index\" AND outcome.tra"| __truncated__
#> ..$ total_seconds: num 0.0306
#> ..$ empty_results: logi FALSE
#> $ results :List of 18
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
And this is the data structure as returned from the epigraphdb::mr
call with mode = "raw"
:
::mr(
epigraphdbexposure_trait = "Body mass index",
outcome_trait = "Coronary heart disease",
mode = "raw"
%>%
) str(2)
#> List of 2
#> $ metadata:List of 3
#> ..$ query : chr "MATCH (exposure:Gwas)-[mr:MR_EVE_MR]->(outcome:Gwas) WHERE exposure.trait = \"Body mass index\" AND outcome.tra"| __truncated__
#> ..$ total_seconds: num 0.0234
#> ..$ empty_results: logi FALSE
#> $ results :List of 18
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
#> ..$ :List of 3
In fact, currently the epigraphdb::mr
function is a wrapper of httr::get
. Please consult with httr
documentation for details of usage.
curl
Here is an example in using curl
to get data and using jq
for post processing the returned json data:
curl -X 'GET' 'https://api.epigraphdb.org/mr?exposure=Body+mass+index&outcome=Coronary+heart+disease' | jq
The returned data will look like this:
{
"query": "MATCH (t1:Gwas)-[r:MR]->(t2:Gwas) WHERE t1.trait = \"Body mass index\" AND t2.trait = \"Coronary heart disease\" AND r.p < 1e-05 RETURN t1.id AS exposure_id, t1.trait AS exposure_name, t2.id AS outcome_id, t2.trait AS outcome_name, r.estimate AS estimate, r.se AS se, r.p AS p, r.ci_upp as ci_upp, r.ci_low AS ci_low, r.selection AS selection, r.method AS method, r.moescore AS moescore ORDER BY r.p ;",
"results": [
{
"exposure_id": "974",
"exposure_name": "Body mass index",
"outcome_id": "7",
"outcome_name": "Coronary heart disease",
"estimate": 0.388519597717655,
"se": 0.0493380883899318,
"p": 3.41730166606158e-15,
"ci_upp": 0.498022055339364,
"ci_low": 0.279017140095947,
"selection": "DF",
"method": "FE IVW",
"moescore": 0.89
},
{
"exposure_id": "2",
"exposure_name": "Body mass index",
"outcome_id": "7",
"outcome_name": "Coronary heart disease",
"estimate": 0.397101449275362,
"se": 0.0727452867916401,
"p": 4.79382740959139e-08,
"ci_upp": 0.539679591432014,
"ci_low": 0.25452330711871,
"selection": "HF",
"method": "Simple median",
"moescore": 0.92
},
{
"exposure_id": "95",
"exposure_name": "Body mass index",
"outcome_id": "7",
"outcome_name": "Coronary heart disease",
"estimate": 0.454936804438897,
"se": 0.0930665978652417,
"p": 1.01714040121612e-06,
"ci_upp": 0.637343984418443,
"ci_low": 0.272529624459351,
"selection": "DF",
"method": "Penalised median",
"moescore": 0.78
},
{
"exposure_id": "2",
"exposure_name": "Body mass index",
"outcome_id": "8",
"outcome_name": "Coronary heart disease",
"estimate": 0.330889761641503,
"se": 0.0683874628196063,
"p": 1.30851348920923e-06,
"ci_upp": 0.47183747438535,
"ci_low": 0.189942048897655,
"selection": "DF",
"method": "FE IVW",
"moescore": 0.75
},
{
"exposure_id": "835",
"exposure_name": "Body mass index",
"outcome_id": "7",
"outcome_name": "Coronary heart disease",
"estimate": 0.359685792349727,
"se": 0.0755689310372249,
"p": 1.93876456579184e-06,
"ci_upp": 0.507798175532879,
"ci_low": 0.211573409166575,
"selection": "Tophits",
"method": "Simple median",
"moescore": 0.91
},
{
"exposure_id": "974",
"exposure_name": "Body mass index",
"outcome_id": "8",
"outcome_name": "Coronary heart disease",
"estimate": 0.32847610101648,
"se": 0.0730805223133059,
"p": 6.96632705468264e-06,
"ci_upp": 0.49537017731629,
"ci_low": 0.16158202471667,
"selection": "DF",
"method": "FE IVW",
"moescore": 0.85
}
]
}
Alternatively, you can use other commonly used tools to query the web API:
For details of the EpiGraphDB RESTful API and related services, please visit our documentation site.