You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用R语言httr2包POST请求gnomAD API报400错误如何解决

gnomAD API httr2请求400错误修复方案

问题背景

本问题关联同平台使用rvest提取gnomAD数据库信息的相关讨论,本次方案不依赖rvest包,直接通过httr2向gnomAD官方API接口发送POST请求获取数据。原实现因httr2使用方式错误,持续返回HTTP 400 Bad Request错误,以下为可复现的错误代码与修正方案。

原始错误代码

library(tidyverse)
library(httr2)

request("https://gnomad.broadinstitute.org/api/") %>%
  req_body_form(
    'chrom' = '1',
    'datasetId' = 'gnomad_r3', 
    'referenceGenome' = 'GRCh38',
    'start' = 55516868, 
    'stop' = 55516908
  ) %>%  
  req_perform()

# 报错信息
# Error in `resp_abort()`:
# ! HTTP 400 Bad Request.
# Run `rlang::last_error()` to see where the error occurred.

错误原因

gnomAD提供的接口为GraphQL类型接口,不支持表单格式的参数提交,原代码使用req_body_form发送表单参数是触发400错误的核心原因。GraphQL接口要求请求体为JSON格式,必须包含查询语句与查询变量两部分内容,同时需要指定正确的JSON请求头。

修正后可运行代码

library(tidyverse)
library(httr2)

# 定义GraphQL查询语句,可根据需要提取的字段调整返回内容
region_query <- '
query getRegionVariants($chrom: String!, $datasetId: DatasetId!, $referenceGenome: ReferenceGenomeId!, $start: Int!, $stop: Int!) {
  region(chrom: $chrom, start: $start, stop: $stop, reference_genome: $referenceGenome) {
    variants(dataset: $datasetId) {
      variant_id
      pos
      ref
      alt
      genome {
        ac
        an
        af
      }
    }
  }
}
'

# 发送正确格式的请求
resp <- request("https://gnomad.broadinstitute.org/api/") %>%
  req_headers(`Content-Type` = "application/json") %>%
  req_body_json(list(
    query = region_query,
    variables = list(
      chrom = "1",
      datasetId = "gnomad_r3",
      referenceGenome = "GRCh38",
      start = 55516868,
      stop = 55516908
    )
  )) %>%
  req_perform()

# 解析返回结果
result <- resp_body_json(resp)

关键注意点

  • 必须使用req_body_json构造JSON格式的请求体,不能使用req_body_form传表单参数
  • 请求头必须明确声明Content-Type为application/json
  • 请求体固定包含两个核心字段:query字段存放GraphQL查询语法,variables存放所有查询参数(染色体编号、数据集版本、参考基因组版本、区间起止坐标等)
  • 可根据实际数据需求修改GraphQL查询语句中的返回字段,支持添加变异注释、频率筛选、基因关联信息等各类gnomAD开放字段

内容的提问来源于stack exchange,提问作者HoelR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 10:12:26