初识KEGG API

KEGG API是一个连接KEGG各类数据库的应用程序,主要以URL形式进行访问:

http://rest.kegg.jp/<operation>/<argument>[/<argument2[/<argument3> ...]]
<operation> = info | list | find | get | conv | link | ddi

我们可以通过上述各种KEGG设定的operation进行访问如下KEGG数据库

pathway | brite | module | ko | genome | <org> | vg | ag | compound |
glycan | reaction | rclass | enzyme | disease | drug | dgroup | environ |
genes | ligand | kegg | <medicus> | <outside>

一般来说,我们可能用的最多是pathway数据库了,brite和ko也会用到,各类数据库的解释以及API相关参数可以看http://www.kegg.jp/kegg/rest/keggapi.html

  1. INFO

    主要描述各类数据库的信息以及统计结果

    http://rest.kegg.jp/info/pathway
    
  2. LIST

    主要用于列出数据库里面的内容,比如:

    列出人类的所有的pathway通路

    http://rest.kegg.jp/list/pathway/hsa
    

    然后用R统计下人类的pathway通路总共有多少条了,结果可以看出有320条

    pathway <- readLines("http://rest.kegg.jp/list/pathway/hsa")
    length(pathway)
    [1] 320
    

    也可以列出KEGG注释到的人类的gene有哪些,等

    http://rest.kegg.jp/list/hsa
    
  3. FIND

    这个主要用于查找功能,在各个数据库中查找,以匹配你所要的信息,比如:

    查找人类的三羧酸循环的通路的ID是什么

    http://rest.kegg.jp/find/pathway/Citrate cycle
    

    结果:path:map00020 Citrate cycle (TCA cycle)

  4. GET

    这个主要是用于返回根据你输入的各类数据库的登录号所对应的信息,比如:

    我们可以通过KEGG上查询到gene id为10458的基因(人类)在KEGG数据库中各类的信息 http://www.genome.jp/dbget-bin/www_bget?hsa:10458

    但是上述可以通过KEGG API获得,从而使得我们可以用R或者其他脚本语言进行信息提取

    http://rest.kegg.jp/get/hsa:10458
    

    API也支持使用额外参数指定提取输入的相关信息

    aaseq | ntseq | mol | kcf | image | kgml
    

    例如提取geneid为10458的氨基酸序列

    http://rest.kegg.jp/get/hsa:10458/aaseq
    

    也可以比如hsa:10458基因参与了hsa04810通路,我们也可以通过API获得这个通路图,然后用R下载下来

    http://rest.kegg.jp/get/hsa04810/image
    #用R来下载pathway的图片
    library(downloader)
    download("http://rest.kegg.jp/get/hsa04810/image", "hsa04810.png", mode = "wb")
    
  5. CONV

    这个主要用于将外部数据库对kegg数据进行ID转化用的,如果用过Y叔的clusterProfiler包做kegg富集的话,有个bitr_kegg函数。如果看过其代码,会发现这个函数就是用调用了KEGG API的conv来进行id转化的。

    支持的外部数据库id只有三种:ncbi-geneidncbi-proteiniduniprot

    来个例子比如人类的ncbi-geneidkegg id:

    http://rest.kegg.jp/conv/hsa/ncbi-geneid
    

    会发现ncbi-geneidkegg id其实是一样的,不仅人类如此,KEGG数据库里大部分真核生物都是这样的,当然也有一小部分物种不满足这个规律。

    再来人类的uniprot idkegg id的转化

    http://rest.kegg.jp/conv/hsa/uniprot
    
  6. LINK

    这个我认为是这些operation中最有用的一个了。因为用这个link可以将KEGG各个数据库连接在一起,比如列出gene和pathways的联系(人类),然后用R读取,接着就可以做熟悉的KEGG注释。。。。

    http://rest.kegg.jp/link/pathway/hsa
    #用R读取gene与pathway对应关系
    gene2pathway <- readLines("http://rest.kegg.jp/link/pathway/hsa")
    

    还可以指定特定gene,看看有在那些通路上:

    http://rest.kegg.jp/link/pathway/hsa:10458
    

    还可以列出特定通路上有哪些gene(人类):

    http://rest.kegg.jp/link/hsa/hsa00010
    

    如果你知道gene对应的K号,然后想通过K号查找对应的pathway,那么可以:

    http://rest.kegg.jp/link/ko/pathway
    

    但是KEGG API设定了如果想知道gene与ko两个数据库的联系时,不能直接像上述这种将所有联系都列出来,只能与有限个数的进行关联,比如通过gene数据库,关联ko数据库里的K00030,那么会列出所有与K00030相关的各个物种的gene id

    http://rest.kegg.jp/link/genes/K00030
    
  7. DDI

    这个一般是用来查询drug数据库里药物的信息以及药物与药物之间的作用

Summary

KEGG API其实可以认为是对KEGG各大数据库的查询与关联的作用,如果理解的话,完全可以放弃kegg的bioconductor了,反正KEGG的相关R包里的数据都比较老了,理论上都好久没更新了,用KEGG API配合R也可以完成大部分KEGG注释的工作了。如果想批量用到KEGG某个数据库,而没有比较好的工具的话,可以考虑KEGG API,至少这个东西现在还是免费的。。。

但是想用来商业化使用的话,是需要授权的。。。现在只支持学术使用。。。